[Haskell-cafe] Re: Rank-2-polymorphism problem

Martin Huschenbett huschi at gmx.org
Fri Mar 23 16:37:16 EDT 2007

Ian Lynagh schrieb:

> readValue' :: Field -> Maybe (forall s. SqlBind s => s) -> Value
> readValue' fld s =
>     if isJust s then readValue fld (fromJust s) else emptyValue fld

Thank you very much, that's exactly what I wanted. After reading in the 
GHC users guide about rank 2 polymorphism I thought that this is not 
possible. Chapter "7.4.8. Arbitrary-rank polymorphism" says:

There is one place you cannot put a forall: you cannot instantiate a 
type variable with a forall-type. So you cannot make a forall-type the 
argument of a type constructor. So these types are illegal:

     x1 :: [forall a. a->a]
     x2 :: (forall a. a->a, Int)
     x3 :: Maybe (forall a. a->a)

Maybe the users guide is not precise enough at this point.

Regards, Martin.

More information about the Haskell-Cafe mailing list