[GHC] #12698: GHC panic on pattern synonym
GHC
ghc-devs at haskell.org
Thu Oct 13 19:42:57 UTC 2016
#12698: GHC panic on pattern synonym
-------------------------------------+-------------------------------------
Reporter: Iceland_jack | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.1
Keywords: | Operating System: Unknown/Multiple
PatternSynonyms |
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
{{{#!hs
{-# Language ViewPatterns, TypeOperators, KindSignatures, PolyKinds,
TypeInType, StandaloneDeriving, GADTs, RebindableSyntax, RankNTypes,
LambdaCase, PatternSynonyms, TypeApplications #-}
import GHC.Types
import Prelude hiding ( fromInteger )
import Data.Type.Equality
import Data.Kind
import qualified Prelude
class Ty (a :: k) where ty :: T a
instance Ty Int where ty = TI
instance Ty Bool where ty = TB
instance Ty a => Ty [a] where ty = TA TL ty
instance Ty [] where ty = TL
instance Ty (,) where ty = TP
data AppResult (t :: k) where
App :: T a -> T b -> AppResult (a b)
data T :: forall k. k -> Type where
TI :: T Int
TB :: T Bool
TL :: T []
TP :: T (,)
TA :: T f -> T x -> T (f x)
deriving instance Show (T a)
splitApp :: T a -> Maybe (AppResult a)
splitApp = \case
TI -> Nothing
TB -> Nothing
TL -> Nothing
TP -> Nothing
TA f x -> Just (App f x)
data (a :: k1) :~~: (b :: k2) where
HRefl :: a :~~: a
eqT :: T a -> T b -> Maybe (a :~~: b)
eqT a b =
case (a, b) of
(TI, TI) -> Just HRefl
(TB, TB) -> Just HRefl
(TL, TL) -> Just HRefl
(TP, TP) -> Just HRefl
pattern List :: () => [] ~~ b => T b
pattern List <- (eqT (ty @(Type -> Type) @[]) -> Just HRefl)
where List = ty
pattern Int :: () => Int ~~ b => T b
pattern Int <- (eqT (ty @Type @Int) -> Just HRefl)
where Int = ty
pattern (:<->:) :: () => fx ~ f x => T f -> T x -> T fx
pattern f :<->: x <- (splitApp -> Just (App f x))
where f :<->: x = TA f x
pattern Foo <- List :<->: Int
}}}
Using GHCi version 8.1.20160930:
{{{
G$ ./ghc-stage2 -ignore-dot-ghci --interactive /tmp/td2W.hs
GHCi, version 8.1.20160930: http://www.haskell.org/ghc/ :? for help
[1 of 1] Compiling Main ( /tmp/td2W.hs, interpreted )
ghc-stage2: panic! (the 'impossible' happened)
(GHC version 8.1.20160930 for x86_64-unknown-linux):
ASSERT failed!
k1_a2mO
k1_a2mO
[TCvSubst
In scope: InScope {k_a2mM fx_a2mN f_a2mP x_a2mQ rep_a2ny r_a2nz
scrut_a2nB $cshowsPrec_a2ob $cshow_a2p1
$cshowList_a2p8 $cty_a2pi
$cty_a2po $cty_a2pw $cty_a2pJ $cty_a2pP splitApp
eqT $fTy(->)(,)
$fTy(->)[] $fTyTYPE[] $fTyTYPEBool $fTyTYPEInt
$fShowT $mList
$bList $mInt $bInt $m:<->: $b:<->:}
Type env: [a2mN :-> fx_a2mN, a2mP :-> f_a2mP, a2mQ :-> x_a2mQ,
a2nz :-> r_a2nz]
Co env: []]
Call stack:
CallStack (from HasCallStack):
prettyCurrentCallStack, called at
compiler/utils/Outputable.hs:1076:58 in ghc:Outputable
callStackDoc, called at compiler/utils/Outputable.hs:1125:22 in
ghc:Outputable
assertPprPanic, called at compiler/types/TyCoRep.hs:2318:46 in
ghc:TyCoRep
Call stack:
CallStack (from HasCallStack):
prettyCurrentCallStack, called at
compiler/utils/Outputable.hs:1076:58 in ghc:Outputable
callStackDoc, called at compiler/utils/Outputable.hs:1080:37 in
ghc:Outputable
pprPanic, called at compiler/utils/Outputable.hs:1123:5 in
ghc:Outputable
assertPprPanic, called at compiler/types/TyCoRep.hs:2318:46 in
ghc:TyCoRep
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
>
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12698>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list