2012/1/6 AUGER Cédric <sedri...@gmail.com> > when you write "forall a. exists b. a -> b -> a", then you allow the > caller to have access to b to produce a (didn't you write "a->b->a"?) >
Yes, sorry, I always assumed independence between the type variables. Like in: f :: forall a. a -> (forall b. b -> a) being the same than: f :: forall a b. a -> b -> a I should have specified: "*if* a doesn't depend on b in the latter." Of course the latter allows that, whereas the first does not (since its what prevents STRefs from escaping runST, by forbidding the return type of runST to depend on the phantom type 's' of the ST action).
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe