Border case type families/type equality coercions cause the impossible to happen
A few border case problems with type equality coercions with type variables only occurring in the constraints part of the type. The code says it all.
{-# LANGUAGE TypeFamilies #-}
module Weird where
{- Compiles fine, but in GHCi:
Prelude Weird> :t x
*** Exception: No match in record selector Var.tcTyVarDetails
-}
x :: (a ~ b, Num b) => b
x = undefined
{- Same in GHCi, but when compiling:
% /tmp/ghc-6.8/bin/ghc --make Weird.hs
[1 of 1] Compiling Weird ( Weird.hs, Weird.o )
ghc-6.8.0.20071002: panic! (the 'impossible' happened)
(GHC version 6.8.0.20071002 for i386-unknown-linux):
initC: srt_lbl
*Weird> plus 0 0
ghc-6.8.0.20071002: panic! (the 'impossible' happened)
(GHC version 6.8.0.20071002 for i386-unknown-linux):
nameModule $dNum{v arP}
-}
plus :: (a ~ b, b ~ c, c ~ d, Num b) => b -> c -> d
plus x y = x + y
{- This one only works when plus is commented out, otherwise:
*Weird> y
ghc-6.8.0.20071002: panic! (the 'impossible' happened)
(GHC version 6.8.0.20071002 for i386-unknown-linux):
nameModule $dNum{v arY}
-}
y :: (a ~ a) => ()
y = ()
Trac metadata
Trac field | Value |
---|---|
Version | 6.8 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | rturk@science.uva.nl |
Operating system | |
Architecture | Unknown |