Version française
Home     About     Download     Resources     Contact us    
Browse thread
How can I set a type parameter of Map.Make(X) ?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Martin Jambon <martin.jambon@e...>
Subject: Re: [Caml-list] How can I set a type parameter of Map.Make(X) ?
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 =<fun>
>>
>>
>> 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


-- 
http://mjambon.com/