> Yesterday I encountered an ocaml error that, if I can now make some > sense out of it -- it's not properly speaking a bug -- was quite > confusing at first and took me some time to figure out. > > What happens is that a sum-type defined in a module can implicitely be > turned into abstract because of its inner contents. > > Here is a small example: > ------ > module F (A : sig type a end) = struct > type a = A.a > type t = X of A.a > end > > (* if A.a is abstract, the type F.t is made abstract *) > module A = F (struct type a end) > (* > The inferred interface is: > module A : sig type a type t end
That is a well-known limitation. The fix is to name the argument module: module TA = struct type a end module A = F (TA) /Andreas _______________________________________________ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs