Eugene Kirpichov wrote:
2009/11/12 Andrew Coppin <andrewcop...@btinternet.com>:
Even I am still not 100% sure how placing forall in different positions does
different things. But usually it's not something I need to worry about. :-)

To me it does not look like it does different things: everywhere it
denotes universal polymorphism. What do you mean? I might be missing
something.
I think what he means is that this:

foo :: forall a b. (a -> a) -> b -> b

uses ScopedTypeVariables, and introduces the type-name a to be available in the where clause of myid. Whereas something like this:

foo2 :: (forall a. a -> a) -> b -> b

uses Rank2Types (I think?) to describe a function parameter that works for all types a. So although the general concept is the same, they use different Haskell extensions, and one is a significant extension to the type system while the other (ScopedTypeVariables) is just some more descriptive convenience.

Thanks,

Neil.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to