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 = Bar type BazSym0 = Baz type BumSym0 = Bum type Q1Sym0 = Q1 type Q2Sym0 = Q2 type family Case_0123456789876543210 n t where Case_0123456789876543210 n 'True = BumSym0 Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument" type family Case_0123456789876543210 n t where Case_0123456789876543210 n 'True = BazSym0 Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 2)) type family Case_0123456789876543210 n t where Case_0123456789876543210 n 'True = BarSym0 Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1)) type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: Foo where ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0)) type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) = ToEnum_0123456789876543210 a0123456789876543210 instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where suppressUnusedWarnings = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ()) data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat Foo where ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210 arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) => ToEnum_0123456789876543210Sym0 a0123456789876543210 type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210 type family FromEnum_0123456789876543210 (a :: Foo) :: GHC.Types.Nat where FromEnum_0123456789876543210 Bar = Data.Singletons.Prelude.Num.FromInteger 0 FromEnum_0123456789876543210 Baz = Data.Singletons.Prelude.Num.FromInteger 1 FromEnum_0123456789876543210 Bum = Data.Singletons.Prelude.Num.FromInteger 2 type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Foo) = FromEnum_0123456789876543210 a0123456789876543210 instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where suppressUnusedWarnings = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ()) data FromEnum_0123456789876543210Sym0 :: (~>) Foo GHC.Types.Nat where FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210 arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) => FromEnum_0123456789876543210Sym0 a0123456789876543210 type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210 instance PEnum Foo where type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a data instance Sing :: Foo -> GHC.Types.Type where SBar :: Sing Bar SBaz :: Sing Baz SBum :: Sing Bum type SFoo = (Sing :: Foo -> GHC.Types.Type) 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 instance Sing :: Quux -> GHC.Types.Type where SQ1 :: Sing Q1 SQ2 :: Sing Q2 type SQuux = (Sing :: Quux -> GHC.Types.Type) 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 :: forall (t :: GHC.Types.Nat). Sing t -> Sing (Apply (Data.Singletons.Prelude.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat Foo -> GHC.Types.Type) t) sFromEnum :: forall (t :: Foo). Sing t -> Sing (Apply (Data.Singletons.Prelude.Enum.FromEnumSym0 :: TyFun Foo GHC.Types.Nat -> GHC.Types.Type) t) sToEnum (sN :: Sing n) = (case (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN)) (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0)) of STrue -> SBar SFalse -> (case (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN)) (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1)) of STrue -> SBaz SFalse -> (case (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN)) (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 2)) of STrue -> SBum SFalse -> sError (sing :: Sing "toEnum: bad argument")) :: Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 2)))) :: Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1)))) :: Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0))) sFromEnum SBar = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0) sFromEnum SBaz = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1) sFromEnum SBum = Data.Singletons.Prelude.Num.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 Case_0123456789876543210 n t where Case_0123456789876543210 n 'True = Q2Sym0 Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument" type family Case_0123456789876543210 n t where Case_0123456789876543210 n 'True = Q1Sym0 Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1)) type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: Quux where ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0)) type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) = ToEnum_0123456789876543210 a0123456789876543210 instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where suppressUnusedWarnings = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ()) data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat Quux where ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210 arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) => ToEnum_0123456789876543210Sym0 a0123456789876543210 type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210 type family FromEnum_0123456789876543210 (a :: Quux) :: GHC.Types.Nat where FromEnum_0123456789876543210 'Q1 = Data.Singletons.Prelude.Num.FromInteger 0 FromEnum_0123456789876543210 'Q2 = Data.Singletons.Prelude.Num.FromInteger 1 type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Quux) = FromEnum_0123456789876543210 a0123456789876543210 instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where suppressUnusedWarnings = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ()) data FromEnum_0123456789876543210Sym0 :: (~>) Quux GHC.Types.Nat where FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210 arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) => FromEnum_0123456789876543210Sym0 a0123456789876543210 type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210 instance PEnum Quux where type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a instance SEnum Quux where sToEnum :: forall (t :: GHC.Types.Nat). Sing t -> Sing (Apply (Data.Singletons.Prelude.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat Quux -> GHC.Types.Type) t) sFromEnum :: forall (t :: Quux). Sing t -> Sing (Apply (Data.Singletons.Prelude.Enum.FromEnumSym0 :: TyFun Quux GHC.Types.Nat -> GHC.Types.Type) t) sToEnum (sN :: Sing n) = (case (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN)) (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0)) of STrue -> SQ1 SFalse -> (case (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN)) (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1)) of STrue -> SQ2 SFalse -> sError (sing :: Sing "toEnum: bad argument")) :: Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1)))) :: Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0))) sFromEnum SQ1 = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0) sFromEnum SQ2 = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1)