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 # module M1 = Continuation(Sum) ;; Error: Signature mismatch: Modules do not match: sig val op : int -> int -> int val init : int end is not included in OpVarADT.OpVarADT Values do not match: val op : int -> int -> int is not included in val op : 'a -> 'b -> 'c I'm sure I'm doing something wrong but I can't see what, any help is welcome TIA Walter --