Hi, replacing : module rec A1 : AA = struct type q = ASet.t type t = string with : module rec A1 : AA with type q = ASet.t, type t = string should be okay. Shouldn't it ? On Wed, Mar 18, 2009 at 1:08 PM, Hugo Ferreira wrote: > Hello, > > I hope this is not a beginners questions. > I am trying to reuse code via functors, > however I am getting the following error: > > Cannot safely evaluate the definition of the recursively-defined module > (refers to "AA.empty" when implemented as a constant value) > > I circumvented the problem by not using a > constant value but a function instead. As I > understand it this may cause run-time errors. > My question is: is their any way to make the > following example work. > > Specifically, for the example below is their > any way of indicating to the compiler that > AA.q = ASet.t ? > > TIA, > Hugo F. > > module type AA = > sig > type q > type t = string > > val compare: t -> t -> int > val add: t -> q -> q > val empty: unit -> q > end > > module rec A1 : AA > = struct > type q = ASet.t > type t = string > > let compare s1 s2 = Pervasives.compare s1 s2 > let add e s = ASet.add e s > let empty _ = ASet.empty > end > and ASet : Set.S with type elt = A1.t > = Set.Make(A1) > > module type Wrap_A = > sig > type t > type q > > val init: q > val add: t -> q -> q > end > > module Make_A (An_A : AA) : Wrap_A > = > struct > type t = An_A.t > type q = An_A.q > > (*let init = ASet.empty*) > let init = An_A.empty () > let add t q = An_A.add t q > end > > module Wrap_A1 = Make_A( A1 ) > > _______________________________________________ > 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 > -- Alp Mestan In charge of the C++ section on Developpez.com.