Hello,

I recently encountered a situation where I had (effectively) the following polymorphic type:

type 'a record = { id : int; data : 'a }

and the following compare function

let compare {id = id1} {id = id2} = Pervasives.compare id1 id2

and wanted to put such records into a set. However, I could not figure out how to make the polymorphic 'a in the type definition "disappear" in the module argument to the Set.Make functor. For example, the obvious

Set.Make(struct
  type t = 'a record
  let compare = compare
end)

fails because the 'a in the type definition for t is unbound. Is there no way to do this? I'm thinking of some sort of "forall" designation, which universally quantifies the type parameter, like

Set.Make(struct
  type t = forall 'a : 'a record
  let compare = compare
end)

(I'm sure that there is better terminology for this---please pardon my ignorance about types and type theory.)

I ended up solving my problem by placing the record type into a functor, whose argument specified the concrete type for data, but I'm curious if other solutions exist.

Thanks,
Will

Attachment: PGP.sig
Description: This is a digitally signed message part

_______________________________________________
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

Reply via email to