On 2011/09/27, at 20:46, Walter Cazzola wrote: > Dear all, > I'm still playing around with functors, modules and polymorphism but > I've some problems with this last concept. > > In the attached files I have tried to implement a sort of function with > a variable number of arguments (based on continuation) and to generalize > the approach I've used a functor (OpVarADT) where I defined the > operation of type 'a -> 'b -> 'c but seems that it is not general enough > to contain int->int->int or 'a -> 'a list -> 'a list > > This is the functor instantiation with the errors I get: > > # module M0 = Continuation(StringConcat) ;; > Error: Signature mismatch: > Modules do not match: > sig val op : 'a -> 'a list -> 'a list val init : 'a list end > is not included in > OpVarADT.OpVarADT > Values do not match: > val op : 'a -> 'a list -> 'a list > is not included in > val op : 'a -> 'b -> 'c
It seems that your continuation functor has not the right specification. Namely, there is no way you can provide a meaningful function of type 'a -> 'b -> 'c (i.e. a -> b -> c for all possible a, b, and c) other than raising an exception or going into an infinite loop. I think that you meant something else, like type a and b and c val op : a -> b -> c which would let you give a specific function for op. Jacques Garrigue -- 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