"ghc: panic! (the 'impossible' happened)" only when compiled with "-O"
On Debian GNU/Linux x86, GHC 8.0.1 crashes compiling the attached code, but only when "-O1" is given. Without optimization, it compiles fine.
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}
module Main where
import Prelude hiding
(
(.)
, (+)
, (*)
)
import qualified Prelude
main :: IO ()
main = return ()
x :: Int
x = 42
f a b c = (c * (a + b)) == ((c * a) + (c * b))
g = f x x x
newtype Sum a = Sum { getSum :: a }
newtype Product a = Product { getProduct :: a }
type family CatParam t :: *
class Semigroupoid p where
type CatSrc p t :: *
type CatDest p t :: *
type CatT p a b :: *
(.) ::
(
p ~ CatParam catAB,
p ~ CatParam catBC,
p ~ CatParam catAC,
a ~ CatSrc p catAB,
b ~ CatSrc p catBC,
a ~ CatSrc p catAC,
b ~ CatDest p catAB,
c ~ CatDest p catBC,
c ~ CatDest p catAC,
catAB ~ CatT p a b,
catBC ~ CatT p b c,
catAC ~ CatT p a c
) => catBC -> catAB -> catAC
data BasicSumSemigroup (t :: *) :: *
type instance CatParam (Sum Int) = BasicSumSemigroup Int
instance (Num t) => Semigroupoid (BasicSumSemigroup t) where
type CatSrc (BasicSumSemigroup _) _ = ()
type CatDest (BasicSumSemigroup _) _ = ()
type CatT (BasicSumSemigroup t) _ _ = Sum t
(Sum x) . (Sum y) = Sum ((Prelude.+) x y)
data BasicProductSemigroup (t :: *) :: *
type instance CatParam (Product Int) = BasicProductSemigroup Int
instance (Num t) => Semigroupoid (BasicProductSemigroup t) where
type CatSrc (BasicProductSemigroup _) _ = ()
type CatDest (BasicProductSemigroup _) _ = ()
type CatT (BasicProductSemigroup t) _ _ = Product t
(Product x) . (Product y) = Product ((Prelude.*) x y)
type family RingParamFromSum p :: *
type family RingParamFromProduct p :: *
class NearRingWithoutId t where
type SumP t
type ProdP t
type LeftDistrib t origLeftCat rightArg
type RightDistrib t origLeftCat leftArg
(+) ::
(
t ~ RingParamFromSum sumP,
Semigroupoid sumP,
p ~ sumP,
p ~ CatParam catAB,
p ~ CatParam catBC,
p ~ CatParam catAC,
a ~ CatSrc p catAB,
b ~ CatSrc p catBC,
a ~ CatSrc p catAC,
b ~ CatDest p catAB,
c ~ CatDest p catBC,
c ~ CatDest p catAC,
catAB ~ CatT p a b,
catBC ~ CatT p b c,
catAC ~ CatT p a c,
catAB ~ Sum noSumCatAB,
catBC ~ Sum noSumCatBC,
catAC ~ Sum noSumCatAC
) => noSumCatBC -> noSumCatAB -> noSumCatAC
(+) x y = getSum ((Sum x) . (Sum y))
(*) ::
(
t ~ RingParamFromProduct prodP,
Semigroupoid prodP,
p ~ prodP,
p ~ CatParam catAB,
p ~ CatParam catBC,
p ~ CatParam catAC,
a ~ CatSrc p catAB,
b ~ CatSrc p catBC,
a ~ CatSrc p catAC,
b ~ CatDest p catAB,
c ~ CatDest p catBC,
c ~ CatDest p catAC,
catAB ~ CatT p a b,
catBC ~ CatT p b c,
catAC ~ CatT p a c,
catAB ~ Product noProdCatAB,
catBC ~ Product noProdCatBC,
catAC ~ Product noProdCatAC,
sumCatAB ~ Sum noProdCatAB,
sumCatBC ~ Sum noProdCatBC,
sumCatAC ~ Sum noProdCatAC,
ps ~ sumP,
ps ~ CatParam sumCatAB,
ps ~ CatParam sumCatBC,
ps ~ CatParam sumCatAC,
sumABSrc ~ CatSrc p sumCatAB,
sumBCSrc ~ CatSrc p sumCatBC,
sumACSrc ~ CatSrc p sumCatAC,
sumABDest ~ CatDest p sumCatAB,
sumBCDest ~ CatDest p sumCatBC,
sumACDest ~ CatDest p sumCatAC,
sumACSrc ~ LeftDistrib t sumBCSrc noProdCatAB,
sumACSrc ~ RightDistrib t sumACSrc noProdCatBC,
sumACDest ~ LeftDistrib t sumBCDest noProdCatAB,
sumACDest ~ RightDistrib t sumACDest noProdCatBC
) => noProdCatBC -> noProdCatAB -> noProdCatAC
(*) x y = getProduct ((Product x) . (Product y))
data TestInt
type instance RingParamFromSum (BasicSumSemigroup Int) = TestInt
type instance RingParamFromProduct (BasicProductSemigroup Int) = TestInt
instance NearRingWithoutId TestInt where
type SumP TestInt = BasicSumSemigroup Int
type ProdP TestInt = BasicProductSemigroup Int
type LeftDistrib TestInt _ _ = ()
type RightDistrib TestInt _ _ = ()
The following error results:
ghc: panic! (the 'impossible' happened)
(GHC version 8.0.1 for x86_64-unknown-linux):
Template variable unbound in rewrite rule
Variable: cobox_s3PM
Rule "SPEC f @ Int @ Int @ Int @ Int @ Int @ Int @ Int"
Rule bndrs: [cobox_s3PM, cobox_s3PN, cobox_s3PO, cobox_s3PP,
cobox_s3PQ, cobox_s3PR, cobox_s3PS, cobox_s3PT, cobox_s3PU,
cobox_s3PV, cobox_s3PW, cobox_s3PX, cobox_s3PY, cobox_s3PZ,
cobox_s3Q0, cobox_s3Q1, cobox_s3Q2, cobox_s3Q3, cobox_s3Q4,
cobox_s3Q5, cobox_s3Q6, cobox_s3Q7, cobox_s3Q8, cobox_s3Q9,
cobox_s3Qa, cobox_s3Qb, cobox_s3Qc, cobox_s3Qd, cobox_s3Qe,
cobox_s3Qf, cobox_s3Qg, cobox_s3Qh, cobox_s3Qi, cobox_s3Qj,
cobox_s3Qk, cobox_s3Ql, cobox_s3Qm, cobox_s3Qn, cobox_s3Qo,
cobox_s3Qp, cobox_s3Qq, cobox_s3Qr, cobox_s3Qs, cobox_s3Qt,
cobox_s3Qu, cobox_s3Qv, cobox_s3Qw, cobox_s3Qx, cobox_s3Qy,
cobox_s3Qz, cobox_s3QA, cobox_s3QB, $dSemigroupoid_X3SC,
$dSemigroupoid_X3SE, $dNearRingWithoutId_s3QE,
$dNearRingWithoutId_s3QF, $dEq_s3QG]
LHS args: [TYPE: Int, TYPE: Int, TYPE: Int, TYPE: Int, TYPE: Int,
TYPE: Int, TYPE: Int,
CO: <CatDest (CatParam (Product Int)) (Product Int)>_N,
CO: <CatDest (CatParam (Sum Int)) (Sum Int)>_N,
CO: <CatDest (CatParam (Product Int)) (Product Int)>_N,
CO: cobox_s3PP, CO: cobox_s3PQ, CO: cobox_s3PR, CO: cobox_s3PS,
CO: cobox_s3PT, CO: cobox_s3PU, CO: cobox_s3PV, CO: cobox_s3PW,
CO: cobox_s3PX, CO: cobox_s3PY,
CO: <CatDest (CatParam (Product Int)) (Product Int)>_N,
CO: cobox_s3Q0, CO: <CatParam (Product Int)>_N, CO: cobox_s3Q2,
CO: <CatDest (CatParam (Product Int)) (Product Int)>_N,
CO: <CatSrc (CatParam (Product Int)) (Product Int)>_N,
CO: <CatParam (Product Int)>_N, CO: cobox_s3Q6, CO: cobox_s3Q7,
CO: cobox_s3Q8, CO: cobox_s3Q9, CO: cobox_s3Qa, CO: cobox_s3Qb,
CO: cobox_s3Qc, CO: cobox_s3Qd, CO: cobox_s3Qe,
CO: <CatParam (Product Int)>_N, CO: cobox_s3Qg,
CO: <CatSrc (CatParam (Product Int)) (Product Int)>_N,
CO: <CatParam (Product Int)>_N, CO: <CatParam (Sum Int)>_N,
CO: cobox_s3Qk, CO: cobox_s3Ql, CO: cobox_s3Qm,
CO: <CatDest (CatParam (Sum Int)) (Sum Int)>_N,
CO: <CatSrc (CatParam (Sum Int)) (Sum Int)>_N,
CO: <CatParam (Sum Int)>_N, CO: <CatParam (Sum Int)>_N,
CO: <CatParam (Sum Int)>_N, CO: cobox_s3Qs,
CO: <CatParam (Sum Int)>_N, CO: cobox_s3Qu,
CO: <CatSrc (CatParam (Sum Int)) (Sum Int)>_N,
CO: <CatParam (Sum Int)>_N,
CO: <CatDest (CatParam (Product Int)) (Product Int)>_N,
CO: <CatParam (Product Int)>_N, CO: cobox_s3Qz,
CO: <CatSrc (CatParam (Product Int)) (Product Int)>_N,
CO: <CatParam (Product Int)>_N, $dSemigroupoid_X3SC,
$dSemigroupoid_X3SE, $dNearRingWithoutId_s3QE,
$dNearRingWithoutId_s3QF, $dEq_s3QG]
Actual args: [TYPE: Int, TYPE: Int, TYPE: Int, TYPE: Int,
TYPE: Int, TYPE: Int, TYPE: Int,
CO: <CatDest (CatParam (Product Int)) (Product Int)>_N,
CO: <CatDest (CatParam (Sum Int)) (Sum Int)>_N,
CO: <CatDest (CatParam (Product Int)) (Product Int)>_N,
CO: (CatT
D:R:CatParamProduct[0]
((CatSrc D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Product Int>_N)
((CatDest D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Product Int>_N))_N
; D:R:CatTBasicProductSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: (CatT
D:R:CatParamProduct[0]
((CatSrc D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Product Int>_N)
((CatDest D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Product Int>_N))_N
; D:R:CatTBasicProductSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: (CatT
D:R:CatParamSum[0]
((CatSrc D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatSrcBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N)
((CatDest D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatDestBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N))_N
; D:R:CatTBasicSumSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: (CatT
D:R:CatParamSum[0]
((CatSrc D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatSrcBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N)
((CatDest D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatDestBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N))_N
; D:R:CatTBasicSumSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: (CatT
D:R:CatParamProduct[0]
((CatSrc D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Product Int>_N)
((CatDest D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Product Int>_N))_N
; D:R:CatTBasicProductSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: (CatSrc D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatSrcBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N
; Sym (D:R:CatDestBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatDest (Sym D:R:CatParamSum[0]) <Sum Int>_N)_N,
CO: (RightDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((LeftDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((CatDest D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
<Int>_N)_N
; D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
<Int>_N)_N
; D:R:RightDistribTestInt__1[0] <()>_N <Int>_N
; Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatDest (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N,
CO: (CatDest D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N
; Sym (D:R:RightDistribTestInt__1[0] <()>_N <Int>_N)
; (RightDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatDest (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N)
<Int>_N)_N,
CO: (RightDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((LeftDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((CatSrc D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
<Int>_N)_N
; D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
<Int>_N)_N
; D:R:RightDistribTestInt__1[0] <()>_N <Int>_N
; Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatSrc (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N,
CO: (CatSrc D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N
; Sym (D:R:RightDistribTestInt__1[0] <()>_N <Int>_N)
; (RightDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatSrc (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N)
<Int>_N)_N,
CO: <CatDest (CatParam (Product Int)) (Product Int)>_N,
CO: (CatSrc D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Product Int>_N
; Sym
(D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Product Int>_N)
; (CatDest (Sym D:R:CatParamProduct[0]) <Product Int>_N)_N,
CO: <CatParam (Product Int)>_N,
CO: (CatT
D:R:CatParamProduct[0]
((CatSrc D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Product Int>_N)
((CatDest D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Product Int>_N))_N
; D:R:CatTBasicProductSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: <CatDest (CatParam (Product Int)) (Product Int)>_N,
CO: <CatSrc (CatParam (Product Int)) (Product Int)>_N,
CO: <CatParam (Product Int)>_N,
CO: (RightDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((LeftDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((CatDest D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
<Int>_N)_N
; D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
<Int>_N)_N
; D:R:RightDistribTestInt__1[0] <()>_N <Int>_N
; Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatDest (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N,
CO: (CatDest D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N
; Sym (D:R:RightDistribTestInt__1[0] <()>_N <Int>_N)
; (RightDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatDest (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N)
<Int>_N)_N,
CO: (RightDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((LeftDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((CatSrc D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
<Int>_N)_N
; D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
<Int>_N)_N
; D:R:RightDistribTestInt__1[0] <()>_N <Int>_N
; Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatSrc (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N,
CO: (CatSrc D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N
; Sym (D:R:RightDistribTestInt__1[0] <()>_N <Int>_N)
; (RightDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatSrc (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N)
<Int>_N)_N,
CO: (RightDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((LeftDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((CatDest D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
<Int>_N)_N
; D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
<Int>_N)_N
; D:R:RightDistribTestInt__1[0] <()>_N <Int>_N
; Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatDest (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N,
CO: (CatDest D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N
; Sym (D:R:RightDistribTestInt__1[0] <()>_N <Int>_N)
; (RightDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatDest (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N)
<Int>_N)_N,
CO: (RightDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((LeftDistrib
((RingParamFromProduct D:R:CatParamProduct[0])_N
; D:R:RingParamFromProductBasicProductSemigroup[0])
((CatSrc D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
<Int>_N)_N
; D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
<Int>_N)_N
; D:R:RightDistribTestInt__1[0] <()>_N <Int>_N
; Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatSrc (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N,
CO: (CatSrc D:R:CatParamProduct[0] <Sum Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N
; Sym (D:R:RightDistribTestInt__1[0] <()>_N <Int>_N)
; (RightDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:LeftDistribTestInt__1[0] <()>_N <Int>_N)
; (LeftDistrib
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N)
(Sym (D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatSrc (Sym D:R:CatParamProduct[0]) <Sum Int>_N)_N)
<Int>_N)_N)
<Int>_N)_N,
CO: (CatT
D:R:CatParamProduct[0]
((CatDest D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Product Int>_N)
((CatDest D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Product Int>_N))_N
; D:R:CatTBasicProductSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: <CatParam (Product Int)>_N,
CO: (CatT
D:R:CatParamProduct[0]
((CatSrc D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Product Int>_N)
((CatDest D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Product Int>_N))_N
; D:R:CatTBasicProductSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: <CatSrc (CatParam (Product Int)) (Product Int)>_N,
CO: <CatParam (Product Int)>_N, CO: <CatParam (Sum Int)>_N,
CO: (CatT
D:R:CatParamSum[0]
((CatDest D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatDestBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N)
((CatDest D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatDestBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N))_N
; D:R:CatTBasicSumSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: (CatSrc D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatSrcBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N
; Sym (D:R:CatDestBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N)
; (CatDest (Sym D:R:CatParamSum[0]) <Sum Int>_N)_N,
CO: (CatT
D:R:CatParamSum[0]
((CatSrc D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatSrcBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N)
((CatDest D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatDestBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N))_N
; D:R:CatTBasicSumSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: <CatDest (CatParam (Sum Int)) (Sum Int)>_N,
CO: <CatSrc (CatParam (Sum Int)) (Sum Int)>_N,
CO: <CatParam (Sum Int)>_N, CO: <CatParam (Sum Int)>_N,
CO: <CatParam (Sum Int)>_N,
CO: (CatT
D:R:CatParamSum[0]
((CatDest D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatDestBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N)
((CatDest D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatDestBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N))_N
; D:R:CatTBasicSumSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: <CatParam (Sum Int)>_N,
CO: (CatT
D:R:CatParamSum[0]
((CatSrc D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatSrcBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N)
((CatDest D:R:CatParamSum[0] <Sum Int>_N)_N
; D:R:CatDestBasicSumSemigroup_1[0] <Int>_N <Sum Int>_N))_N
; D:R:CatTBasicSumSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: <CatSrc (CatParam (Sum Int)) (Sum Int)>_N,
CO: <CatParam (Sum Int)>_N,
CO: <CatDest (CatParam (Product Int)) (Product Int)>_N,
CO: <CatParam (Product Int)>_N,
CO: (CatT
D:R:CatParamProduct[0]
((CatSrc D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatSrcBasicProductSemigroup_1[0] <Int>_N <Product Int>_N)
((CatDest D:R:CatParamProduct[0] <Product Int>_N)_N
; D:R:CatDestBasicProductSemigroup_1[0] <Int>_N <Product Int>_N))_N
; D:R:CatTBasicProductSemigroup__1[0] <Int>_N <()>_N <()>_N,
CO: <CatSrc (CatParam (Product Int)) (Product Int)>_N,
CO: <CatParam (Product Int)>_N,
($c._a32V @ Int $fNumInt)
`cast` (Sym (N:Semigroupoid[0] <BasicSumSemigroup Int>_N)
; (Semigroupoid (Sym D:R:CatParamSum[0]))_R
:: ((forall catAB_awI[sk] catBC_awJ[sk] catAC_awK[sk] a_awL[sk] b_awM[sk] c_awN[sk].
((BasicSumSemigroup Int :: *) ~ (CatParam catAB_awI[sk] :: *),
(BasicSumSemigroup Int :: *) ~ (CatParam catBC_awJ[sk] :: *),
(BasicSumSemigroup Int :: *) ~ (CatParam catAC_awK[sk] :: *),
(a_awL[sk] :: *)
~
(CatSrc (BasicSumSemigroup Int) catAB_awI[sk] :: *),
(b_awM[sk] :: *)
~
(CatSrc (BasicSumSemigroup Int) catBC_awJ[sk] :: *),
(a_awL[sk] :: *)
~
(CatSrc (BasicSumSemigroup Int) catAC_awK[sk] :: *),
(b_awM[sk] :: *)
~
(CatDest (BasicSumSemigroup Int) catAB_awI[sk] :: *),
(c_awN[sk] :: *)
~
(CatDest (BasicSumSemigroup Int) catBC_awJ[sk] :: *),
(c_awN[sk] :: *)
~
(CatDest (BasicSumSemigroup Int) catAC_awK[sk] :: *),
(catAB_awI[sk] :: *)
~
(CatT (BasicSumSemigroup Int) a_awL[sk] b_awM[sk] :: *),
(catBC_awJ[sk] :: *)
~
(CatT (BasicSumSemigroup Int) b_awM[sk] c_awN[sk] :: *),
(catAC_awK[sk] :: *)
~
(CatT (BasicSumSemigroup Int) a_awL[sk] c_awN[sk] :: *)) =>
catBC_awJ[sk] -> catAB_awI[sk] -> catAC_awK[sk]) :: *)
~R#
(Semigroupoid (CatParam (Sum Int)) :: Constraint)),
($c._a32m @ Int $fNumInt)
`cast` (Sym (N:Semigroupoid[0] <BasicProductSemigroup Int>_N)
; (Semigroupoid (Sym D:R:CatParamProduct[0]))_R
:: ((forall catAB_awI[sk] catBC_awJ[sk] catAC_awK[sk] a_awL[sk] b_awM[sk] c_awN[sk].
((BasicProductSemigroup Int :: *) ~ (CatParam catAB_awI[sk] :: *),
(BasicProductSemigroup Int :: *) ~ (CatParam catBC_awJ[sk] :: *),
(BasicProductSemigroup Int :: *) ~ (CatParam catAC_awK[sk] :: *),
(a_awL[sk] :: *)
~
(CatSrc (BasicProductSemigroup Int) catAB_awI[sk] :: *),
(b_awM[sk] :: *)
~
(CatSrc (BasicProductSemigroup Int) catBC_awJ[sk] :: *),
(a_awL[sk] :: *)
~
(CatSrc (BasicProductSemigroup Int) catAC_awK[sk] :: *),
(b_awM[sk] :: *)
~
(CatDest (BasicProductSemigroup Int) catAB_awI[sk] :: *),
(c_awN[sk] :: *)
~
(CatDest (BasicProductSemigroup Int) catBC_awJ[sk] :: *),
(c_awN[sk] :: *)
~
(CatDest (BasicProductSemigroup Int) catAC_awK[sk] :: *),
(catAB_awI[sk] :: *)
~
(CatT (BasicProductSemigroup Int) a_awL[sk] b_awM[sk] :: *),
(catBC_awJ[sk] :: *)
~
(CatT (BasicProductSemigroup Int) b_awM[sk] c_awN[sk] :: *),
(catAC_awK[sk] :: *)
~
(CatT (BasicProductSemigroup Int) a_awL[sk] c_awN[sk] :: *)) =>
catBC_awJ[sk] -> catAB_awI[sk] -> catAC_awK[sk]) :: *)
~R#
(Semigroupoid (CatParam (Product Int)) :: Constraint)),
$fNearRingWithoutIdTestInt
`cast` ((NearRingWithoutId
(Sym D:R:RingParamFromSumBasicSumSemigroup[0]
; (RingParamFromSum (Sym D:R:CatParamSum[0]))_N))_R
:: (NearRingWithoutId TestInt :: Constraint)
~R#
(NearRingWithoutId
(RingParamFromSum (CatParam (Sum Int))) :: Constraint)),
$fNearRingWithoutIdTestInt
`cast` ((NearRingWithoutId
(Sym D:R:RingParamFromProductBasicProductSemigroup[0]
; (RingParamFromProduct (Sym D:R:CatParamProduct[0]))_N))_R
:: (NearRingWithoutId TestInt :: Constraint)
~R#
(NearRingWithoutId
(RingParamFromProduct (CatParam (Product Int))) :: Constraint)),
$fEqInt, x, x, x]
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
Trac metadata
Trac field | Value |
---|---|
Version | 8.0.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |