[Haskell-cafe] Existentially-quantified constructors, Eq and Show

Stefan Holdermans stefan at cs.uu.nl
Thu Dec 8 09:04:53 EST 2005


>>>> data State
>>>>     = Start
>>>>     | Stop
>>>>     | forall a . (Show a, Eq a) => State a
> But this is a rank-2 type, not an existentially quantified type?

No, this one really is an existentially quantified type.

An example of a data constructor with a rank-2 type would be, f.i.:

   data State = ...
              | State (forall a . (Show a, Eq a) => a)

Here we have

   State :: (forall a . (Show a, Eq a) => a) -> State

while in the existentially quantified case we had

   State :: forall a . (Show a, Eq a) => a -> State

which has rank 1.

(The rank-2 example does not make much sense, however, for the only  
value that can be passed to State is bottom. But, hey, it's just an  



More information about the Haskell-Cafe mailing list