-
Notifications
You must be signed in to change notification settings - Fork 85
/
Copy pathfunctors.ml
48 lines (40 loc) · 955 Bytes
/
functors.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
(* TEST
setup-ocamlc.byte-build-env;
flags = "-dlambda -dno-unique-ids";
ocamlc.byte;
check-ocamlc.byte-output;
*)
module type S = sig
val foo : int -> int
end
module O (X : S) = struct
let cow x = X.foo x
let sheep x = 1 + cow x
end [@@inline always]
module F (X : S) (Y : S) = struct
let cow x = Y.foo (X.foo x)
let sheep x = 1 + cow x
end [@@inline always]
module type S1 = sig
val bar : int -> int
val foo : int -> int
end
module type T = sig
val sheep : int -> int
end
module F1 (X : S) (Y : S) : T = struct
let cow x = Y.foo (X.foo x)
let sheep x = 1 + cow x
end [@@inline always]
module F2 : S1 -> S1 -> T = functor (X : S) -> functor (Y : S) -> struct
let cow x = Y.foo (X.foo x)
let sheep x = 1 + cow x
end [@@inline always]
module M : sig
module F (X : S1) (Y : S1) : T
end = struct
module F (X : S) (Y : S) = struct
let cow x = Y.foo (X.foo x)
let sheep x = 1 + cow x
end [@@inline always]
end