summaryrefslogtreecommitdiff
path: root/testsuite/tests/typing-modules/generative.ml
diff options
context:
space:
mode:
authorJacques Garrigue <garrigue at math.nagoya-u.ac.jp>2013-12-17 03:52:50 +0000
committerJacques Garrigue <garrigue at math.nagoya-u.ac.jp>2013-12-17 03:52:50 +0000
commitcfa350c31aebe2e06611d0fbb41fe88b1f30b8e8 (patch)
tree9809a9c320538a793866f1ca7a408fe09679a902 /testsuite/tests/typing-modules/generative.ml
parent024c8ad498a7c0fc35355c543d94a14bfd3fab51 (diff)
downloadocaml-cfa350c31aebe2e06611d0fbb41fe88b1f30b8e8.tar.gz
merge generative functors
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@14365 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'testsuite/tests/typing-modules/generative.ml')
-rw-r--r--testsuite/tests/typing-modules/generative.ml26
1 files changed, 26 insertions, 0 deletions
diff --git a/testsuite/tests/typing-modules/generative.ml b/testsuite/tests/typing-modules/generative.ml
new file mode 100644
index 0000000000..8463c0a8c4
--- /dev/null
+++ b/testsuite/tests/typing-modules/generative.ml
@@ -0,0 +1,26 @@
+(* Using generative functors *)
+
+(* Without type *)
+module type S = sig val x : int end;;
+let v = (module struct let x = 3 end : S);;
+module F() = (val v);; (* ok *)
+module G (X : sig end) : S = F ();; (* ok *)
+module H (X : sig end) = (val v);; (* ok *)
+
+(* With type *)
+module type S = sig type t val x : t end;;
+let v = (module struct type t = int let x = 3 end : S);;
+module F() = (val v);; (* ok *)
+module G (X : sig end) : S = F ();; (* fail *)
+module H() = F();; (* ok *)
+
+(* Alias *)
+module U = struct end;;
+module M = F(struct end);; (* ok *)
+module M = F(U);; (* fail *)
+
+(* Cannot coerce between applicative and generative *)
+module F1 (X : sig end) = struct end;;
+module F2 : functor () -> sig end = F1;; (* fail *)
+module F3 () = struct end;;
+module F4 : functor (X : sig end) -> sig end = F3;; (* fail *)