RE: [Haskell-cafe] Monotype error

2009-10-15 Thread Simon Peyton-Jones
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


Re: [Haskell-cafe] Monotype error

2009-10-15 Thread Vladimir Reshetnikov
See our previous discussion on this topic here:
http://www.nabble.com/Fwd:-Unification-for-rank-N-types-td23942179.html

Thanks,
Vladimir

On Wed, Oct 14, 2009 at 10:35 PM, Martijn van Steenbergen 
mart...@van.steenbergen.nl wrote:

 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


[Haskell-cafe] Monotype error

2009-10-14 Thread Martijn van Steenbergen

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


Re: [Haskell-cafe] Monotype error

2009-10-14 Thread Roman Cheplyaka
* Martijn van Steenbergen mart...@van.steenbergen.nl [2009-10-14 
20:35:06+0200]
 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?

It works if you annotate the type of undefined:

beep (Mono vs) = Mono (map (undefined :: Void - Void) vs)

-- 
Roman I. Cheplyaka :: http://ro-che.info/
Don't let school get in the way of your education. - Mark Twain
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe