Hi, how about that: # type t = { check : 'a. 'a -> bool };; type t = { check : 'a. 'a -> bool; } # let return_true : 'a. 'a -> bool = fun _ -> true;; val return_true : 'a -> bool = # let make1 () = { check = return_true; };; val make1 : unit -> t = cheers, Philippe. 2012/7/3 Jean-Louis Giavitto > Hello. > > I am trying to build a record with a polymorphic field and I am unable to > initialize this field. The problem can be summarized as follow. The > following definitions works well: > > type t = { check : 'a. 'a -> bool } > > let return_true _ = true > > let make1 () = { check = return_true; } > > But this definition raises an error: > > let make2 f = { check = f; } > > with the message: > > Error: This field value has type 'a -> bool which is less general than > 'b. 'b -> bool > > Note that > > let return_false _ = true > > let make3 c = { check = if c then return_false else return_true; } > > is working but that > > let g c = if c then return_false else return_true > let make4 c = { check = g c; } > > raises the same error message. Making explicit the argument of make does > not helps: > > let make5 f = { check = f; } > in make5 return_true > > (same error message). And making explicit the type of make does not help > neither: > > let make6 : 'a. ('a -> bool) -> t > = function f -> { check = f; } > > (same error message). > > > > Do you have an idea how I can specify a function similar to make to buid a > record of type t? > > In the real life, the argument f will be the result of a computation and > instead of a simple signature 'a -> bool, I must deal with a signature > > 'a 'b. (('b) #SomeClass as 'a) * 'b -> bool > > > Thanks for your advice, > Jean-Louis Giavitto. > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa-roc.inria.fr/**wws/info/caml-list > Beginner's list: http://groups.yahoo.com/group/**ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-**bugs > >