Yes, but this involves duplicating code, and I really hate to duplicate code, even in interfaces. To also answer Ashish: I want to define an interface to modules where I use a very specific kind of map. Of course, I could leave Map.Make polymorphic, but that is a different module type than the one I want to use to represent my theory. Yours, Jacky On 20/09/2010 19:58, Martin Jambon wrote: > Dumitru Potop-Butucaru wrote: >> Actually, I was looking for a way to specialize a whole module, >> not just the associated type (**this** I knew how to do). >> I would like to write something like: >> >> include module type of Set.Make(String) with 'a= int >> >> Is this possible? > I don't know about such a shortcut, but the following works and the interface > is easier to use for a human: > > (* foo.mli *) > type key = string > type value = string > type map > val empty : map > val is_empty : map -> bool > val add : key -> value -> map -> map > val find : key -> map -> value > val remove : key -> map -> map > val mem : key -> map -> bool > val iter : (key -> value -> unit) -> map -> unit > val map : (value -> value) -> map -> map > val mapi : (key -> value -> value) -> map -> map > val fold : (key -> value -> 'a -> 'a) -> map -> 'a -> 'a > val compare : (value -> value -> int) -> map -> map -> int > val equal : (value -> value -> bool) -> map -> map -> bool > > > (* foo.ml *) > module M = Map.Make (String) > include M > type value = string > type map = string M.t > > > > Martin > > >> Yours, >> Jacky Potop >> >> >> >> >> On 20/09/2010 16:57, Ashish Agarwal wrote: >>> module M = Map.Make(String) >>> >>> type t = int M.t >>> >>> Type t is the type of maps from string's to int's. Or alternatively >>> write a >>> function that assumes 'a is some specific type: >>> >>> # let f m = M.fold (fun _ x y -> x + y) m 0;; >>> val f : int M.t -> int = >>> >>> >>> On Mon, Sep 20, 2010 at 10:35 AM, Dumitru Potop-Butucaru< >>> dumitru.potop_butucaru@inria.fr> wrote: >>> >>>> Hello, >>>> >>>> I'm certain most users here will consider the question trivially simple, >>>> but I browsed the documentation without finding a solution. >>>> >>>> The question is quite general: Given a polymorphic definition like >>>> Map.Make(X), where >>>> X is some module, how can I specialize its 'a type parameter, e.g. by >>>> setting it to Y, so that >>>> I have maps from X to Y ? >>>> >>>> Yours, >>>> Jacky Potop >>>> >>>> _______________________________________________ >>>> 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 >>>> >>>> >> _______________________________________________ >> 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 >