packages feed

singletons-base-3.5.1: 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.Internal.Bignum.Natural.Natural) a_0123456789876543210 where
      LamCases_0123456789876543210 n 'True = BumSym0
      LamCases_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"
    data LamCases_0123456789876543210Sym0 (n0123456789876543210 :: GHC.Internal.Bignum.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.Internal.Bignum.Natural.Natural) a_01234567898765432100123456789876543210 where
      LamCases_0123456789876543210Sym1 n0123456789876543210 a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
    type family LamCases_0123456789876543210 (n0123456789876543210 :: GHC.Internal.Bignum.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.Internal.Bignum.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.Internal.Bignum.Natural.Natural) a_01234567898765432100123456789876543210 where
      LamCases_0123456789876543210Sym1 n0123456789876543210 a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
    type family LamCases_0123456789876543210 (n0123456789876543210 :: GHC.Internal.Bignum.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.Internal.Bignum.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.Internal.Bignum.Natural.Natural) a_01234567898765432100123456789876543210 where
      LamCases_0123456789876543210Sym1 n0123456789876543210 a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
    type ToEnum_0123456789876543210 :: GHC.Internal.Bignum.Natural.Natural
                                       -> Foo
    type family ToEnum_0123456789876543210 (a :: GHC.Internal.Bignum.Natural.Natural) :: Foo where
      ToEnum_0123456789876543210 n = Apply (LamCases_0123456789876543210Sym0 n) (Apply (Apply (==@#@$) n) (FromInteger 0))
    type FromEnum_0123456789876543210 :: Foo
                                         -> GHC.Internal.Bignum.Natural.Natural
    type family FromEnum_0123456789876543210 (a :: Foo) :: GHC.Internal.Bignum.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.Internal.Bignum.Natural.Natural) a_0123456789876543210 where
      LamCases_0123456789876543210 n 'True = Q2Sym0
      LamCases_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"
    data LamCases_0123456789876543210Sym0 (n0123456789876543210 :: GHC.Internal.Bignum.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.Internal.Bignum.Natural.Natural) a_01234567898765432100123456789876543210 where
      LamCases_0123456789876543210Sym1 n0123456789876543210 a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
    type family LamCases_0123456789876543210 (n0123456789876543210 :: GHC.Internal.Bignum.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.Internal.Bignum.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.Internal.Bignum.Natural.Natural) a_01234567898765432100123456789876543210 where
      LamCases_0123456789876543210Sym1 n0123456789876543210 a_01234567898765432100123456789876543210 = LamCases_0123456789876543210 n0123456789876543210 a_01234567898765432100123456789876543210
    type ToEnum_0123456789876543210 :: GHC.Internal.Bignum.Natural.Natural
                                       -> Quux
    type family ToEnum_0123456789876543210 (a :: GHC.Internal.Bignum.Natural.Natural) :: Quux where
      ToEnum_0123456789876543210 n = Apply (LamCases_0123456789876543210Sym0 n) (Apply (Apply (==@#@$) n) (FromInteger 0))
    type FromEnum_0123456789876543210 :: Quux
                                         -> GHC.Internal.Bignum.Natural.Natural
    type family FromEnum_0123456789876543210 (a :: Quux) :: GHC.Internal.Bignum.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)