* Andrew Gibiansky <andrew.gibiansky@gmail.com> [2014-01-06 22:17:21-0500]
I believe the rule is that all constraints (including class constraints)> Why is the following not allowed?
>
> {-# LANGUAGE ExistentialQuantification, ExplicitForAll, RankNTypes,
> FlexibleInstances #-}
>
> class Class a where
> test :: a -> Bool
>
> instance Class (forall m. m -> m) where
> test _ = True
>
> main = do
> putStrLn $ test id
>
> Is there a reason that this is forbidden? Just curious.
range over monotypes.
What are you trying to achieve?
You can do this, for example:
newtype Poly = Poly (forall a . a -> a)
instance Class Poly where test = const True
main = print $ test $ Poly id
BTW, this has nothing to do with ExistentialQuantification.
Roman