It's a poor error message, but GHC's entire handling of impredicative 
polymorphism is poor at the moment.  Indeed, I'm seriously considering removing 
it altogether until we can come up with a more robust story.  (So don't rely on 
it!)

The error happens because you are trying to use the type (forall a. a) in a 
context that requires a monotype (one with no foralls).  I have not stared at 
the typing rules (in our papers) to convince myself that your program does 
transgress them; indeed, I regard the necessity to do so as evidence that the 
approach is not robust.

Simon

| -----Original Message-----
| From: haskell-cafe-boun...@haskell.org 
[mailto:haskell-cafe-boun...@haskell.org] On
| Behalf Of Martijn van Steenbergen
| Sent: 14 October 2009 19:35
| To: Haskell Cafe
| Subject: [Haskell-cafe] Monotype error
| 
| Dear café,
| 
| > {-# LANGUAGE Rank2Types #-}
| > {-# LANGUAGE ImpredicativeTypes #-}
| >
| > type Void = forall a. a
| >
| > newtype Mono a = Mono { runMono :: [Void] }
| >
| > beep :: Mono a -> Mono a
| > beep (Mono vs) = Mono (map undefined vs)
| 
| Compiling this with GHC results in:
| 
| > Monotype.hs:9:28:
| >     Cannot match a monotype with `Void'
| >       Expected type: Void
| >       Inferred type: a
| 
| What does this error mean and why does the code not compile?
| 
| Thanks!
| 
| Martijn.
| _______________________________________________
| Haskell-Cafe mailing list
| Haskell-Cafe@haskell.org
| http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to