On Sun, Mar 25, 2007 at 01:28:53AM +0100, Marc A. Ziegert wrote: > hi! > > i've just discovered this strange behaviour of existential quantifiers with > runST: > > --- > Prelude Control.Monad.ST> :t runST (return ()) > runST (return ()) :: () > > Prelude Control.Monad.ST> :t runST $ (return ()) > <interactive>:1:9: > Couldn't match expected type `forall s. ST s a' > against inferred type `m ()' > In the second argument of `($)', namely `(return ())' > > Prelude Control.Monad.ST> > --- > > > the same with "id runST undefined". > is this a bug or an unsolved problem? > i'm not sure wheather it is a part of the wanted feature of runST's type > definition. > > i did not find any discussions about this. > can anyone enlighten me, please?
Neither. The type of id is: forall a. a -> a In Haskell, type variables range only over normal types, not rank-two types. Therefore the application (runST id) is illegal. (Sadly GHC is not able to produce a particularly good error message in this case.) (There is a GHC extension in the HEAD that allows this, but you are adviced not to rely on or even try to understand it.) Stefna _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe