'Forall' Polymorphism Question
Simon Peyton-Jones
simonpj@microsoft.com
Wed, 31 Oct 2001 04:19:33 -0800
Any system that allows a parametric type variable to
be instantiated by a for-all type is called "impredicative",=20
I think. Example: Maybe (forall a. a->a), or as you have
below (m (forall a. a->a)).
I don't understand all (well, any) of the details, but I understand
that impredicative systems make type inference nigh impossible.
I don't know any programming language that has impredicative types.
Haskell certainly does not, nor any extension I know of.
I'm willing to be corrected!
Simon
| -----Original Message-----
| From: Ashley Yakeley [mailto:ashley@semantic.org]=20
| Sent: 31 October 2001 10:14
| To: Haskell List
| Subject: 'Forall' Polymorphism Question
|=20
|=20
| I note that GHC by default gives this type for "return id":
|=20
| (return id) :: forall m a. (Monad m) =3D> m (a -> a)
|=20
| Wouldn't this be more general:
|=20
| (return id) :: forall m. (Monad m) =3D> m (forall a. a -> a)
| (return return) :: forall m. (Monad m) =3D> m (forall m1 a.=20
| (Monad m1)=20
| =3D> a -> m1 a)
|=20
| ...?
|=20
| Is this something GHC could ever do, or are there good reasons why it=20
| would never work in Haskell?
|=20
| --=20
| Ashley Yakeley, Seattle WA
|=20
|=20
| _______________________________________________
| Haskell mailing list
| Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell
|=20