Version française
Home     About     Download     Resources     Contact us    
Browse thread
Re: [Caml-list] Polymorphic values in local modules
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Alain Frisch <alain@f...>
Subject: Re: [Caml-list] Polymorphic values in local modules
On 03/02/2010 11:05, Tiphaine Turpin wrote:
> It is possible however, provided you wrap the argument inside a
> polymorphic record field (or object) as follows:
>
> type t = {f : 'a. 'a ->  'a}
>
> let test f =
>   let module Foo : Foo_sig =
>       struct
>     let foo = f.f
>       end
>   in
>     ()

Another option (that will be available in OCaml 3.12) is to build the 
module as a first-class value outside the function "test".

=================================
module type Foo_sig = sig
   val f: 'a -> 'a
end

let test foo =
   let module Foo = (val foo : Foo_sig) in
   (* use the polymorphic function here... *)
   ()

let () =
   let foo_impl = (module struct let f a = a end : Foo_sig) in
   test foo_impl
=================================

The type for test is:

val test : (module Foo_sig) -> unit



Alain