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 ?
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