> concrete: What is the difference between > (forall b. Term b => b -> b) -> a -> a > and > (Term b) => (b -> b) -> a -> a > ? One may want: fun f x y = f x + f y for instance: fun length [True, False] [1,2] Therefore, I would say, you need typing a la fun::(forall a.[a]->Int)->[b]->[c]->Int Ciao, Steffen