[GHC] #14185: Non-local bug reporting around levity polymorphism
GHC
ghc-devs at haskell.org
Mon Sep 4 23:05:54 UTC 2017
#14185: Non-local bug reporting around levity polymorphism
-------------------------------------+-------------------------------------
Reporter: goldfire | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.3
Keywords: | Operating System: Unknown/Multiple
LevityPolymorphism, |
TypeErrorMessages |
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
From comment:12:ticket:13105.
In HEAD (or, at least, my version, on the `wip/rae` branch), this code
{{{#!hs
class Unbox (t :: *) (r :: TYPE k) | t -> r, r -> t where
unbox :: t -> r
box :: r -> t
instance Unbox Int Int# where
unbox (I# i) = i
box i = I# i
instance Unbox Char Char# where
unbox (C# c) = c
box c = C# c
instance (Unbox a a', Unbox b b') => Unbox (a,b) (# a', b' #) where
unbox (a,b) = (# unbox a, unbox b #)
box (# a, b #) = (box a, box b)
testInt :: Int
testInt = box (unbox 1)
testTup :: (Int, Char)
testTup = box (unbox (1, 'a'))
}}}
fails with
{{{
Bug.hs:27:11: error:
• Couldn't match a lifted type with an unlifted type
When matching types
a' :: *
Int# :: TYPE 'IntRep
• In the expression: box (unbox 1)
In an equation for ‘testInt’: testInt = box (unbox 1)
|
27 | testInt = box (unbox 1)
| ^^^^^^^^^^^^^
Bug.hs:27:16: error:
• Couldn't match a lifted type with an unlifted type
When matching types
a' :: *
Int# :: TYPE 'IntRep
• In the first argument of ‘box’, namely ‘(unbox 1)’
In the expression: box (unbox 1)
In an equation for ‘testInt’: testInt = box (unbox 1)
|
27 | testInt = box (unbox 1)
| ^^^^^^^
Bug.hs:42:11: error:
• Couldn't match a lifted type with an unlifted type
When matching types
a' :: *
Int# :: TYPE 'IntRep
• In the expression: box (unbox (1, 'a'))
In an equation for ‘testTup’: testTup = box (unbox (1, 'a'))
|
42 | testTup = box (unbox (1, 'a'))
| ^^^^^^^^^^^^^^^^^^^^
}}}
I think it should succeed. Worse, when I comment out the `testTup`
definition, the file succeeds... but note that two of the errors above are
in `testInt`, which compiles fine on its own.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14185>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list