
"Simon Peyton-Jones"
writes: GHC and Hugs both do. In fact, GHC supports arbitrary-rank universal quantification.
The example I tried failed, so I assumed it wasn't supported.
$ cat Exists.hs module Exists where data T = forall a. Enum a => Foo (a->a) f :: T -> (Int,Bool,Char) f (Foo g) = (g 0, g False, g 'a') $ ghc -fglasgow-exts -c Exists.hs
Exists.hs:4: Couldn't match `Int' against `Bool' Expected type: Int Inferred type: Bool In the first argument of `g', namely `False' In the definition of `f': (g 0, g False, g 'a')
You've written an existential constructor. For universal quantification, write it like this: data T = Foo (forall a . Enum a => a -> a) a good illustration of the confusion caused by the dual use of forall, I guess :-) Cheers, Simon