singletons-2.7: tests/compile-and-dump/Singletons/TopLevelPatterns.golden
Singletons/TopLevelPatterns.hs:(0,0)-(0,0): Splicing declarations
singletons
[d| data Bool = False | True
data Foo = Bar Bool Bool |]
======>
data Bool = False | True
data Foo = Bar Bool Bool
type FalseSym0 = False :: Bool
type TrueSym0 = True :: Bool
type BarSym0 :: (~>) Bool ((~>) Bool Foo)
data BarSym0 a0123456789876543210
where
BarSym0KindInference :: SameKind (Apply BarSym0 arg) (BarSym1 arg) =>
BarSym0 a0123456789876543210
type instance Apply BarSym0 a0123456789876543210 = BarSym1 a0123456789876543210
instance SuppressUnusedWarnings BarSym0 where
suppressUnusedWarnings
= Data.Tuple.snd (((,) BarSym0KindInference) ())
type BarSym1 :: Bool -> (~>) Bool Foo
data BarSym1 a0123456789876543210 a0123456789876543210
where
BarSym1KindInference :: SameKind (Apply (BarSym1 a0123456789876543210) arg) (BarSym2 a0123456789876543210 arg) =>
BarSym1 a0123456789876543210 a0123456789876543210
type instance Apply (BarSym1 a0123456789876543210) a0123456789876543210 = BarSym2 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (BarSym1 a0123456789876543210) where
suppressUnusedWarnings
= Data.Tuple.snd (((,) BarSym1KindInference) ())
type BarSym2 (a0123456789876543210 :: Bool) (a0123456789876543210 :: Bool) =
Bar a0123456789876543210 a0123456789876543210 :: Foo
data SBool :: Bool -> GHC.Types.Type
where
SFalse :: SBool (False :: Bool)
STrue :: SBool (True :: Bool)
type instance Sing @Bool = SBool
instance SingKind Bool where
type Demote Bool = Bool
fromSing SFalse = False
fromSing STrue = True
toSing False = SomeSing SFalse
toSing True = SomeSing STrue
data SFoo :: Foo -> GHC.Types.Type
where
SBar :: forall (n :: Bool) (n :: Bool).
(Sing n) -> (Sing n) -> SFoo (Bar n n :: Foo)
type instance Sing @Foo = SFoo
instance SingKind Foo where
type Demote Foo = Foo
fromSing (SBar b b) = (Bar (fromSing b)) (fromSing b)
toSing (Bar (b :: Demote Bool) (b :: Demote Bool))
= case
((,) (toSing b :: SomeSing Bool)) (toSing b :: SomeSing Bool)
of {
(,) (SomeSing c) (SomeSing c) -> SomeSing ((SBar c) c) }
instance SingI False where
sing = SFalse
instance SingI True where
sing = STrue
instance (SingI n, SingI n) =>
SingI (Bar (n :: Bool) (n :: Bool)) where
sing = (SBar sing) sing
instance SingI (BarSym0 :: (~>) Bool ((~>) Bool Foo)) where
sing = (singFun2 @BarSym0) SBar
instance SingI d =>
SingI (BarSym1 (d :: Bool) :: (~>) Bool Foo) where
sing = (singFun1 @(BarSym1 (d :: Bool))) (SBar (sing @d))
Singletons/TopLevelPatterns.hs:(0,0)-(0,0): Splicing declarations
singletons
[d| otherwise :: Bool
otherwise = True
id :: a -> a
id x = x
not :: Bool -> Bool
not True = False
not False = True
false_ = False
f, g :: Bool -> Bool
[f, g] = [not, id]
h, i :: Bool -> Bool
(h, i) = (f, g)
j, k :: Bool
(Bar j k) = Bar True (h False)
l, m :: Bool
[l, m] = [not True, id False] |]
======>
otherwise :: Bool
otherwise = True
id :: a -> a
id x = x
not :: Bool -> Bool
not True = False
not False = True
false_ = False
f :: Bool -> Bool
g :: Bool -> Bool
[f, g] = [not, id]
h :: Bool -> Bool
i :: Bool -> Bool
(h, i) = (f, g)
j :: Bool
k :: Bool
Bar j k = (Bar True) (h False)
l :: Bool
m :: Bool
[l, m] = [not True, id False]
type family Case_0123456789876543210 t where
Case_0123456789876543210 '[_,
y_0123456789876543210] = y_0123456789876543210
type family Case_0123456789876543210 t where
Case_0123456789876543210 '[y_0123456789876543210,
_] = y_0123456789876543210
type family Case_0123456789876543210 t where
Case_0123456789876543210 ('Bar _ y_0123456789876543210) = y_0123456789876543210
type family Case_0123456789876543210 t where
Case_0123456789876543210 ('Bar y_0123456789876543210 _) = y_0123456789876543210
type family Case_0123456789876543210 a_0123456789876543210 t where
Case_0123456789876543210 a_0123456789876543210 '(_,
y_0123456789876543210) = y_0123456789876543210
type family Case_0123456789876543210 a_0123456789876543210 t where
Case_0123456789876543210 a_0123456789876543210 '(y_0123456789876543210,
_) = y_0123456789876543210
type family Case_0123456789876543210 a_0123456789876543210 t where
Case_0123456789876543210 a_0123456789876543210 '[_,
y_0123456789876543210] = y_0123456789876543210
type family Case_0123456789876543210 a_0123456789876543210 t where
Case_0123456789876543210 a_0123456789876543210 '[y_0123456789876543210,
_] = y_0123456789876543210
type MSym0 = M :: Bool
type LSym0 = L :: Bool
type X_0123456789876543210Sym0 = X_0123456789876543210
type KSym0 = K :: Bool
type JSym0 = J :: Bool
type X_0123456789876543210Sym0 = X_0123456789876543210
type ISym0 :: (~>) Bool Bool
data ISym0 a0123456789876543210
where
ISym0KindInference :: SameKind (Apply ISym0 arg) (ISym1 arg) =>
ISym0 a0123456789876543210
type instance Apply ISym0 a0123456789876543210 = ISym1 a0123456789876543210
instance SuppressUnusedWarnings ISym0 where
suppressUnusedWarnings
= Data.Tuple.snd (((,) ISym0KindInference) ())
type ISym1 (a0123456789876543210 :: Bool) =
I a0123456789876543210 :: Bool
type HSym0 :: (~>) Bool Bool
data HSym0 a0123456789876543210
where
HSym0KindInference :: SameKind (Apply HSym0 arg) (HSym1 arg) =>
HSym0 a0123456789876543210
type instance Apply HSym0 a0123456789876543210 = HSym1 a0123456789876543210
instance SuppressUnusedWarnings HSym0 where
suppressUnusedWarnings
= Data.Tuple.snd (((,) HSym0KindInference) ())
type HSym1 (a0123456789876543210 :: Bool) =
H a0123456789876543210 :: Bool
type X_0123456789876543210Sym0 = X_0123456789876543210
type GSym0 :: (~>) Bool Bool
data GSym0 a0123456789876543210
where
GSym0KindInference :: SameKind (Apply GSym0 arg) (GSym1 arg) =>
GSym0 a0123456789876543210
type instance Apply GSym0 a0123456789876543210 = GSym1 a0123456789876543210
instance SuppressUnusedWarnings GSym0 where
suppressUnusedWarnings
= Data.Tuple.snd (((,) GSym0KindInference) ())
type GSym1 (a0123456789876543210 :: Bool) =
G a0123456789876543210 :: Bool
type FSym0 :: (~>) Bool Bool
data FSym0 a0123456789876543210
where
FSym0KindInference :: SameKind (Apply FSym0 arg) (FSym1 arg) =>
FSym0 a0123456789876543210
type instance Apply FSym0 a0123456789876543210 = FSym1 a0123456789876543210
instance SuppressUnusedWarnings FSym0 where
suppressUnusedWarnings
= Data.Tuple.snd (((,) FSym0KindInference) ())
type FSym1 (a0123456789876543210 :: Bool) =
F a0123456789876543210 :: Bool
type X_0123456789876543210Sym0 = X_0123456789876543210
type False_Sym0 = False_
type NotSym0 :: (~>) Bool Bool
data NotSym0 a0123456789876543210
where
NotSym0KindInference :: SameKind (Apply NotSym0 arg) (NotSym1 arg) =>
NotSym0 a0123456789876543210
type instance Apply NotSym0 a0123456789876543210 = NotSym1 a0123456789876543210
instance SuppressUnusedWarnings NotSym0 where
suppressUnusedWarnings
= Data.Tuple.snd (((,) NotSym0KindInference) ())
type NotSym1 (a0123456789876543210 :: Bool) =
Not a0123456789876543210 :: Bool
type IdSym0 :: (~>) a a
data IdSym0 a0123456789876543210
where
IdSym0KindInference :: SameKind (Apply IdSym0 arg) (IdSym1 arg) =>
IdSym0 a0123456789876543210
type instance Apply IdSym0 a0123456789876543210 = IdSym1 a0123456789876543210
instance SuppressUnusedWarnings IdSym0 where
suppressUnusedWarnings
= Data.Tuple.snd (((,) IdSym0KindInference) ())
type IdSym1 (a0123456789876543210 :: a) =
Id a0123456789876543210 :: a
type OtherwiseSym0 = Otherwise :: Bool
type M :: Bool
type family M where
M = Case_0123456789876543210 X_0123456789876543210Sym0
type L :: Bool
type family L where
L = Case_0123456789876543210 X_0123456789876543210Sym0
type family X_0123456789876543210 where
X_0123456789876543210 = Apply (Apply (:@#@$) (Apply NotSym0 TrueSym0)) (Apply (Apply (:@#@$) (Apply IdSym0 FalseSym0)) NilSym0)
type K :: Bool
type family K where
K = Case_0123456789876543210 X_0123456789876543210Sym0
type J :: Bool
type family J where
J = Case_0123456789876543210 X_0123456789876543210Sym0
type family X_0123456789876543210 where
X_0123456789876543210 = Apply (Apply BarSym0 TrueSym0) (Apply HSym0 FalseSym0)
type I :: Bool -> Bool
type family I a where
I a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210
type H :: Bool -> Bool
type family H a where
H a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210
type family X_0123456789876543210 where
X_0123456789876543210 = Apply (Apply Tuple2Sym0 FSym0) GSym0
type G :: Bool -> Bool
type family G a where
G a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210
type F :: Bool -> Bool
type family F a where
F a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210
type family X_0123456789876543210 where
X_0123456789876543210 = Apply (Apply (:@#@$) NotSym0) (Apply (Apply (:@#@$) IdSym0) NilSym0)
type family False_ where
False_ = FalseSym0
type Not :: Bool -> Bool
type family Not a where
Not 'True = FalseSym0
Not 'False = TrueSym0
type Id :: a -> a
type family Id a where
Id x = x
type Otherwise :: Bool
type family Otherwise where
Otherwise = TrueSym0
sM :: Sing (MSym0 :: Bool)
sL :: Sing (LSym0 :: Bool)
sX_0123456789876543210 :: Sing @_ X_0123456789876543210Sym0
sK :: Sing (KSym0 :: Bool)
sJ :: Sing (JSym0 :: Bool)
sX_0123456789876543210 :: Sing @_ X_0123456789876543210Sym0
sI :: forall (t :: Bool). Sing t -> Sing (Apply ISym0 t :: Bool)
sH :: forall (t :: Bool). Sing t -> Sing (Apply HSym0 t :: Bool)
sX_0123456789876543210 :: Sing @_ X_0123456789876543210Sym0
sG :: forall (t :: Bool). Sing t -> Sing (Apply GSym0 t :: Bool)
sF :: forall (t :: Bool). Sing t -> Sing (Apply FSym0 t :: Bool)
sX_0123456789876543210 :: Sing @_ X_0123456789876543210Sym0
sFalse_ :: Sing @_ False_Sym0
sNot ::
forall (t :: Bool). Sing t -> Sing (Apply NotSym0 t :: Bool)
sId :: forall a (t :: a). Sing t -> Sing (Apply IdSym0 t :: a)
sOtherwise :: Sing (OtherwiseSym0 :: Bool)
sM
= (GHC.Base.id
@(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))
(case sX_0123456789876543210 of {
SCons _
(SCons (sY_0123456789876543210 :: Sing y_0123456789876543210) SNil)
-> sY_0123456789876543210 })
sL
= (GHC.Base.id
@(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))
(case sX_0123456789876543210 of {
SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)
(SCons _ SNil)
-> sY_0123456789876543210 })
sX_0123456789876543210
= (applySing
((applySing ((singFun2 @(:@#@$)) SCons))
((applySing ((singFun1 @NotSym0) sNot)) STrue)))
((applySing
((applySing ((singFun2 @(:@#@$)) SCons))
((applySing ((singFun1 @IdSym0) sId)) SFalse)))
SNil)
sK
= (GHC.Base.id
@(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))
(case sX_0123456789876543210 of {
SBar _ (sY_0123456789876543210 :: Sing y_0123456789876543210)
-> sY_0123456789876543210 })
sJ
= (GHC.Base.id
@(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))
(case sX_0123456789876543210 of {
SBar (sY_0123456789876543210 :: Sing y_0123456789876543210) _
-> sY_0123456789876543210 })
sX_0123456789876543210
= (applySing ((applySing ((singFun2 @BarSym0) SBar)) STrue))
((applySing ((singFun1 @HSym0) sH)) SFalse)
sI (sA_0123456789876543210 :: Sing a_0123456789876543210)
= (applySing
((GHC.Base.id
@(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))
(case sX_0123456789876543210 of {
STuple2 _ (sY_0123456789876543210 :: Sing y_0123456789876543210)
-> sY_0123456789876543210 })))
sA_0123456789876543210
sH (sA_0123456789876543210 :: Sing a_0123456789876543210)
= (applySing
((GHC.Base.id
@(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))
(case sX_0123456789876543210 of {
STuple2 (sY_0123456789876543210 :: Sing y_0123456789876543210) _
-> sY_0123456789876543210 })))
sA_0123456789876543210
sX_0123456789876543210
= (applySing
((applySing ((singFun2 @Tuple2Sym0) STuple2))
((singFun1 @FSym0) sF)))
((singFun1 @GSym0) sG)
sG (sA_0123456789876543210 :: Sing a_0123456789876543210)
= (applySing
((GHC.Base.id
@(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))
(case sX_0123456789876543210 of {
SCons _
(SCons (sY_0123456789876543210 :: Sing y_0123456789876543210) SNil)
-> sY_0123456789876543210 })))
sA_0123456789876543210
sF (sA_0123456789876543210 :: Sing a_0123456789876543210)
= (applySing
((GHC.Base.id
@(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))
(case sX_0123456789876543210 of {
SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)
(SCons _ SNil)
-> sY_0123456789876543210 })))
sA_0123456789876543210
sX_0123456789876543210
= (applySing
((applySing ((singFun2 @(:@#@$)) SCons))
((singFun1 @NotSym0) sNot)))
((applySing
((applySing ((singFun2 @(:@#@$)) SCons)) ((singFun1 @IdSym0) sId)))
SNil)
sFalse_ = SFalse
sNot STrue = SFalse
sNot SFalse = STrue
sId (sX :: Sing x) = sX
sOtherwise = STrue
instance SingI (ISym0 :: (~>) Bool Bool) where
sing = (singFun1 @ISym0) sI
instance SingI (HSym0 :: (~>) Bool Bool) where
sing = (singFun1 @HSym0) sH
instance SingI (GSym0 :: (~>) Bool Bool) where
sing = (singFun1 @GSym0) sG
instance SingI (FSym0 :: (~>) Bool Bool) where
sing = (singFun1 @FSym0) sF
instance SingI (NotSym0 :: (~>) Bool Bool) where
sing = (singFun1 @NotSym0) sNot
instance SingI (IdSym0 :: (~>) a a) where
sing = (singFun1 @IdSym0) sId