1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
open! Base
open! Import
type ('m, 'w) t = T : ('i Index.t * 'a, 'b, 'w) Hk.t2 -> ('i -> 'a -> 'b, 'w) t
[@@unboxed]
let with_hk f (T t) = T (f t)
module Make4 (T : sig
type ('a, 'b, 'c, 'd) t
end) =
struct
include Hk.Make4 (T)
let projected t ~f = inject (f (project t))
let injected t ~f =
let (T t) = f (T (inject t)) in
project t
;;
end