singletons-base-3.5: tests/compile-and-dump/Singletons/EnumDeriving.golden
Singletons/EnumDeriving.hs:(0,0)-(0,0): Splicing declarations
singletons
[d| data Foo
= Bar | Baz | Bum
deriving Enum
data Quux = Q1 | Q2 |]
======>
data Foo
= Bar | Baz | Bum
deriving Enum
data Quux = Q1 | Q2
type BarSym0 :: Foo
type family BarSym0 :: Foo where
BarSym0 = Bar
type BazSym0 :: Foo
type family BazSym0 :: Foo where
BazSym0 = Baz
type BumSym0 :: Foo
type family BumSym0 :: Foo where
BumSym0 = Bum
type Q1Sym0 :: Quux
type family Q1Sym0 :: Quux where
Q1Sym0 = Q1
type Q2Sym0 :: Quux
type family Q2Sym0 :: Quux where
Q2Sym0 = Q2
type family LamCases_0123456789876543210 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_0123456789876543210 where
LamCases_0123456789876543210 n 'True = BumSym0
LamCases_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"
data LamCases_0123456789876543210Sym0 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_01234567898765432100123456789876543210
where
LamCases_0123456789876543210Sym0KindInference :: SameKind (Apply (LamCases_0123456789876543210Sym0 n0123456789876543210) arg) (LamCases_0123456789876543210Sym1 n0123456789876543210 arg) =>
LamCases_0123456789876543210Sym0 n0123456789876543210 a_01234567898765432100123456789876543210
type instance Apply @_ @_ (LamCases_0123456789876543210Sym0 n0123456789876543210) a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
instance SuppressUnusedWarnings (LamCases_0123456789876543210Sym0 n0123456789876543210) where
suppressUnusedWarnings
= snd ((,) LamCases_0123456789876543210Sym0KindInference ())
type family LamCases_0123456789876543210Sym1 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_01234567898765432100123456789876543210 where
LamCases_0123456789876543210Sym1 n0123456789876543210 a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
type family LamCases_0123456789876543210 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_0123456789876543210 where
LamCases_0123456789876543210 n 'True = BazSym0
LamCases_0123456789876543210 n 'False = Apply (LamCases_0123456789876543210Sym0 n) (Apply (Apply (==@#@$) n) (FromInteger 2))
data LamCases_0123456789876543210Sym0 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_01234567898765432100123456789876543210
where
LamCases_0123456789876543210Sym0KindInference :: SameKind (Apply (LamCases_0123456789876543210Sym0 n0123456789876543210) arg) (LamCases_0123456789876543210Sym1 n0123456789876543210 arg) =>
LamCases_0123456789876543210Sym0 n0123456789876543210 a_01234567898765432100123456789876543210
type instance Apply @_ @_ (LamCases_0123456789876543210Sym0 n0123456789876543210) a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
instance SuppressUnusedWarnings (LamCases_0123456789876543210Sym0 n0123456789876543210) where
suppressUnusedWarnings
= snd ((,) LamCases_0123456789876543210Sym0KindInference ())
type family LamCases_0123456789876543210Sym1 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_01234567898765432100123456789876543210 where
LamCases_0123456789876543210Sym1 n0123456789876543210 a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
type family LamCases_0123456789876543210 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_0123456789876543210 where
LamCases_0123456789876543210 n 'True = BarSym0
LamCases_0123456789876543210 n 'False = Apply (LamCases_0123456789876543210Sym0 n) (Apply (Apply (==@#@$) n) (FromInteger 1))
data LamCases_0123456789876543210Sym0 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_01234567898765432100123456789876543210
where
LamCases_0123456789876543210Sym0KindInference :: SameKind (Apply (LamCases_0123456789876543210Sym0 n0123456789876543210) arg) (LamCases_0123456789876543210Sym1 n0123456789876543210 arg) =>
LamCases_0123456789876543210Sym0 n0123456789876543210 a_01234567898765432100123456789876543210
type instance Apply @_ @_ (LamCases_0123456789876543210Sym0 n0123456789876543210) a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
instance SuppressUnusedWarnings (LamCases_0123456789876543210Sym0 n0123456789876543210) where
suppressUnusedWarnings
= snd ((,) LamCases_0123456789876543210Sym0KindInference ())
type family LamCases_0123456789876543210Sym1 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_01234567898765432100123456789876543210 where
LamCases_0123456789876543210Sym1 n0123456789876543210 a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
type ToEnum_0123456789876543210 :: GHC.Num.Natural.Natural -> Foo
type family ToEnum_0123456789876543210 (a :: GHC.Num.Natural.Natural) :: Foo where
ToEnum_0123456789876543210 n = Apply (LamCases_0123456789876543210Sym0 n) (Apply (Apply (==@#@$) n) (FromInteger 0))
type FromEnum_0123456789876543210 :: Foo -> GHC.Num.Natural.Natural
type family FromEnum_0123456789876543210 (a :: Foo) :: GHC.Num.Natural.Natural where
FromEnum_0123456789876543210 Bar = FromInteger 0
FromEnum_0123456789876543210 Baz = FromInteger 1
FromEnum_0123456789876543210 Bum = FromInteger 2
instance PEnum Foo where
type ToEnum a = ToEnum_0123456789876543210 a
type FromEnum a = FromEnum_0123456789876543210 a
data SFoo :: Foo -> Type
where
SBar :: SFoo (Bar :: Foo)
SBaz :: SFoo (Baz :: Foo)
SBum :: SFoo (Bum :: Foo)
type instance Sing @Foo = SFoo
instance SingKind Foo where
type Demote Foo = Foo
fromSing SBar = Bar
fromSing SBaz = Baz
fromSing SBum = Bum
toSing Bar = SomeSing SBar
toSing Baz = SomeSing SBaz
toSing Bum = SomeSing SBum
data SQuux :: Quux -> Type
where
SQ1 :: SQuux (Q1 :: Quux)
SQ2 :: SQuux (Q2 :: Quux)
type instance Sing @Quux = SQuux
instance SingKind Quux where
type Demote Quux = Quux
fromSing SQ1 = Q1
fromSing SQ2 = Q2
toSing Q1 = SomeSing SQ1
toSing Q2 = SomeSing SQ2
instance SEnum Foo where
sToEnum (sN :: Sing n)
= applySing
(singFun1
@(LamCases_0123456789876543210Sym0 n)
(\cases
STrue -> SBar
SFalse
-> applySing
(singFun1
@(LamCases_0123456789876543210Sym0 n)
(\cases
STrue -> SBaz
SFalse
-> applySing
(singFun1
@(LamCases_0123456789876543210Sym0 n)
(\cases
STrue -> SBum
SFalse
-> applySing
(singFun1 @ErrorSym0 sError)
(sing :: Sing "toEnum: bad argument")))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sN)
(sFromInteger (sing :: Sing 2)))))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sN)
(sFromInteger (sing :: Sing 1)))))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sN)
(sFromInteger (sing :: Sing 0)))
sFromEnum SBar = sFromInteger (sing :: Sing 0)
sFromEnum SBaz = sFromInteger (sing :: Sing 1)
sFromEnum SBum = sFromInteger (sing :: Sing 2)
instance SingI Bar where
sing = SBar
instance SingI Baz where
sing = SBaz
instance SingI Bum where
sing = SBum
instance SingI Q1 where
sing = SQ1
instance SingI Q2 where
sing = SQ2
Singletons/EnumDeriving.hs:0:0:: Splicing declarations
singEnumInstance ''Quux
======>
type family LamCases_0123456789876543210 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_0123456789876543210 where
LamCases_0123456789876543210 n 'True = Q2Sym0
LamCases_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"
data LamCases_0123456789876543210Sym0 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_01234567898765432100123456789876543210
where
LamCases_0123456789876543210Sym0KindInference :: SameKind (Apply (LamCases_0123456789876543210Sym0 n0123456789876543210) arg) (LamCases_0123456789876543210Sym1 n0123456789876543210 arg) =>
LamCases_0123456789876543210Sym0 n0123456789876543210 a_01234567898765432100123456789876543210
type instance Apply @_ @_ (LamCases_0123456789876543210Sym0 n0123456789876543210) a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
instance SuppressUnusedWarnings (LamCases_0123456789876543210Sym0 n0123456789876543210) where
suppressUnusedWarnings
= snd ((,) LamCases_0123456789876543210Sym0KindInference ())
type family LamCases_0123456789876543210Sym1 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_01234567898765432100123456789876543210 where
LamCases_0123456789876543210Sym1 n0123456789876543210 a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
type family LamCases_0123456789876543210 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_0123456789876543210 where
LamCases_0123456789876543210 n 'True = Q1Sym0
LamCases_0123456789876543210 n 'False = Apply (LamCases_0123456789876543210Sym0 n) (Apply (Apply (==@#@$) n) (FromInteger 1))
data LamCases_0123456789876543210Sym0 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_01234567898765432100123456789876543210
where
LamCases_0123456789876543210Sym0KindInference :: SameKind (Apply (LamCases_0123456789876543210Sym0 n0123456789876543210) arg) (LamCases_0123456789876543210Sym1 n0123456789876543210 arg) =>
LamCases_0123456789876543210Sym0 n0123456789876543210 a_01234567898765432100123456789876543210
type instance Apply @_ @_ (LamCases_0123456789876543210Sym0 n0123456789876543210) a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
instance SuppressUnusedWarnings (LamCases_0123456789876543210Sym0 n0123456789876543210) where
suppressUnusedWarnings
= snd ((,) LamCases_0123456789876543210Sym0KindInference ())
type family LamCases_0123456789876543210Sym1 (n0123456789876543210 :: GHC.Num.Natural.Natural) a_01234567898765432100123456789876543210 where
LamCases_0123456789876543210Sym1 n0123456789876543210 a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
type ToEnum_0123456789876543210 :: GHC.Num.Natural.Natural -> Quux
type family ToEnum_0123456789876543210 (a :: GHC.Num.Natural.Natural) :: Quux where
ToEnum_0123456789876543210 n = Apply (LamCases_0123456789876543210Sym0 n) (Apply (Apply (==@#@$) n) (FromInteger 0))
type FromEnum_0123456789876543210 :: Quux
-> GHC.Num.Natural.Natural
type family FromEnum_0123456789876543210 (a :: Quux) :: GHC.Num.Natural.Natural where
FromEnum_0123456789876543210 'Q1 = FromInteger 0
FromEnum_0123456789876543210 'Q2 = FromInteger 1
instance PEnum Quux where
type ToEnum a = ToEnum_0123456789876543210 a
type FromEnum a = FromEnum_0123456789876543210 a
instance SEnum Quux where
sToEnum (sN :: Sing n)
= applySing
(singFun1
@(LamCases_0123456789876543210Sym0 n)
(\cases
STrue -> SQ1
SFalse
-> applySing
(singFun1
@(LamCases_0123456789876543210Sym0 n)
(\cases
STrue -> SQ2
SFalse
-> applySing
(singFun1 @ErrorSym0 sError)
(sing :: Sing "toEnum: bad argument")))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sN)
(sFromInteger (sing :: Sing 1)))))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sN)
(sFromInteger (sing :: Sing 0)))
sFromEnum SQ1 = sFromInteger (sing :: Sing 0)
sFromEnum SQ2 = sFromInteger (sing :: Sing 1)