Panic from combining generalized list comprehensions and record wildcards
Combining record wild cards with generalized list comprehension grouping causes the type-checker to mis-infer the type of the list comprehension, potentially leading to a panic. For example
data Rec = Rec {a :: Int} deriving (Show)
recs :: [[Int]]
recs = [a | Rec {..} <- [Rec 1], then group by a]
results in a type error, because GHC thinks recs has type [Int]. On the other hand,
recs :: [[Int]]
recs = [a | Rec {a=a} <- [Rec 1], then group by a]
compiles, correctly.
If the type annotation is omitted from the first example, GHC panics with
ghc: panic! (the 'impossible' happened)
(GHC version 6.12.1 for x86_64-unknown-linux):
expectJust rnStmt
I've attached a test file that demonstrates the bug.
Trac metadata
Trac field | Value |
---|---|
Version | 6.12.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |