Version française
Home     About     Download     Resources     Contact us    
Browse thread
basic question about Functors
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Eric Cooper <ecc@c...>
Subject: Re: [Caml-list] basic question about Functors
On Tue, Dec 22, 2009 at 05:48:57PM -0500, Keith Sheppard wrote:
> I've looked through the Functors section of the ocaml tutorial
> (http://www.ocaml-tutorial.org/modules) and so I see how I can declare
> a StringMap like:
> 
> > module StringMap = Map.Make(String);;
> 
> Now I can define a function like:
> 
> > remove_fish = StringMap.remove "fish"
> 
> What I'm confused about is what type signature I can use in the mli
> file if I want to make the remove_fish function public...

The top level (or "ocaml -i") is your friend:

    # module StringMap = Map.Make(String);;
    module StringMap :
    ...
    # let remove_fish = StringMap.remove "fish";;
    val remove_fish : '_a StringMap.t -> '_a StringMap.t = <fun>

You could use this type signature as-is, but the '_a type variables are more
restrictive than necessary due to the "value restriction". To make it
fully general, use "eta expansion":

    # let remove_fish m = StringMap.remove "fish" m;;  
    val remove_fish : 'a StringMap.t -> 'a StringMap.t = <fun>

-- 
Eric Cooper             e c c @ c m u . e d u