Impredicative types error

Simon Peyton-Jones simonpj at microsoft.com
Wed Feb 1 13:54:24 CET 2012


John

Impredicative polymorphism has always been a soggy area of GHC -- the mixture of type inference and impredicativity is a genuinely difficult problem as you'll see from reading the papers.  GHC 7 is less ambitious than GHC 6, and does a bit less.  

Tim Sheard, Dimitrios Vytiniotis and I are working on a solid story.   But meanwhile GHC's current implementation is a bit unpredictable, frankly.

My advice: use a newtype to wrap up the polymorphism:

newtype Denamer = MkD (forall n. Denamable n => n -> n)

getDeName :: Tc Denamer

Simon

| -----Original Message-----
| From: glasgow-haskell-users-bounces at haskell.org [mailto:glasgow-haskell-
| users-bounces at haskell.org] On Behalf Of John Meacham
| Sent: 31 January 2012 20:58
| To: glasgow-haskell-users at haskell.org
| Subject: Impredicative types error
| 
| Hi, I am running into an issue where some code that compiled and
| worked under 6.12 is failing under 7.0, the offending code is
| 
| class DeNameable a where
|     deName :: Module -> a -> a
| 
| getDeName :: Tc (DeNameable n => n -> n)
| getDeName = do
|     mn <- asks (tcInfoModName . tcInfo)
|     return (\n -> deName mn n)
| 
| Tc is a plain typechecking monad and this returns a generic denaming
| function that can be used to turn haskell names back into human
| readable form before printing errors in jhc.
| 
| I have the ImpredicativeTypes LANGUAGE feature turned on.
| 
| the error I get under 7.0 is
| 
| src/FrontEnd/Tc/Monad.hs:131:29:
|     Couldn't match expected type `n -> n'
|                 with actual type `DeNameable n'
|     In the second argument of `deName', namely `n'
|     In the expression: deName mn n
|     In the first argument of `return', namely `(\ n -> deName mn n)'
| 
|     John
| 
| _______________________________________________
| Glasgow-haskell-users mailing list
| Glasgow-haskell-users at haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-users





More information about the Glasgow-haskell-users mailing list