2009/11/12 Neil Brown <nc...@kent.ac.uk>: > 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. >
But that's not an issue of semantics of forall, just of which part of the rather broad and universal semantics is captured by which language extensions. > Thanks, > > Neil. > -- Eugene Kirpichov Web IR developer, market.yandex.ru _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe