[Haskell-cafe] Control.Monad.Cont fun

Thomas Jäger thjaeger at gmail.com
Tue Jul 26 08:37:51 EDT 2005


Basically, the pre-ghc6.4 way of doing scoped type variables breaks
down for higher-rank functions. For example

  foo :: (forall a. a -> b) -> b
  foo (f :: forall a. a -> b) = f undefined :: b

is accepted by ghc-6.2 but rejected by the current ghc with an error message
  Couldn't match `forall a. a -> b' against `forall a. a -> b'

Of course, in ghc-6.4 we don't need f's type annotation so this will work fine:

  bar :: forall b. (forall a. a -> b) -> b
  bar f = f undefined :: b

But I'm not aware of anything that will work simulateously for both versions.

Thomas

On 7/26/05, Simon Peyton-Jones <simonpj at microsoft.com> wrote:
> Andrew, Thomas
> 
> Can you send me a self-contained module that elicits the mysterious message (I agree that it is a strange one)?    Can you also include the variant that does work.
> 
> Then I'll look into it.
> 
> Thanks
> 
> Simon



More information about the Glasgow-haskell-bugs mailing list