packages feed

singletons-base-3.2: tests/compile-and-dump/Singletons/T89.golden

Singletons/T89.hs:0:0:: Splicing declarations
    singletons
      [d| data Foo
            = Foo
            deriving (Enum) |]
  ======>
    data Foo
      = Foo
      deriving Enum
    type FooSym0 :: Foo
    type family FooSym0 :: Foo where
      FooSym0 = Foo
    type family Case_0123456789876543210 n t where
      Case_0123456789876543210 n 'True = FooSym0
      Case_0123456789876543210 n 'False = Apply ErrorSym0 (FromString "toEnum: bad argument")
    type ToEnum_0123456789876543210 :: GHC.Num.Natural.Natural -> Foo
    type family ToEnum_0123456789876543210 (a :: GHC.Num.Natural.Natural) :: Foo where
      ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0))
    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural Foo
    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural Foo
      where
        ToEnum_0123456789876543210Sym0KindInference :: SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>
                                                       ToEnum_0123456789876543210Sym0 a0123456789876543210
    type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210
    instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where
      suppressUnusedWarnings
        = snd ((,) ToEnum_0123456789876543210Sym0KindInference ())
    type ToEnum_0123456789876543210Sym1 :: GHC.Num.Natural.Natural
                                           -> Foo
    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: Foo where
      ToEnum_0123456789876543210Sym1 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210
    type FromEnum_0123456789876543210 :: Foo -> GHC.Num.Natural.Natural
    type family FromEnum_0123456789876543210 (a :: Foo) :: GHC.Num.Natural.Natural where
      FromEnum_0123456789876543210 Foo = FromInteger 0
    type FromEnum_0123456789876543210Sym0 :: (~>) Foo GHC.Num.Natural.Natural
    data FromEnum_0123456789876543210Sym0 :: (~>) Foo GHC.Num.Natural.Natural
      where
        FromEnum_0123456789876543210Sym0KindInference :: SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>
                                                         FromEnum_0123456789876543210Sym0 a0123456789876543210
    type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210
    instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where
      suppressUnusedWarnings
        = snd ((,) FromEnum_0123456789876543210Sym0KindInference ())
    type FromEnum_0123456789876543210Sym1 :: Foo
                                             -> GHC.Num.Natural.Natural
    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Foo) :: GHC.Num.Natural.Natural where
      FromEnum_0123456789876543210Sym1 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210
    instance PEnum Foo where
      type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a
      type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a
    data SFoo :: Foo -> Type where SFoo :: SFoo (Foo :: Foo)
    type instance Sing @Foo = SFoo
    instance SingKind Foo where
      type Demote Foo = Foo
      fromSing SFoo = Foo
      toSing Foo = SomeSing SFoo
    instance SEnum Foo where
      sToEnum ::
        forall (t :: GHC.Num.Natural.Natural). Sing t
                                               -> Sing (Apply (Data.Singletons.Base.Enum.ToEnumSym0 :: TyFun GHC.Num.Natural.Natural Foo
                                                                                                       -> Type) t)
      sFromEnum ::
        forall (t :: Foo). Sing t
                           -> Sing (Apply (Data.Singletons.Base.Enum.FromEnumSym0 :: TyFun Foo GHC.Num.Natural.Natural
                                                                                     -> Type) t)
      sToEnum (sN :: Sing n)
        = id
            @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0))))
            (case
                 applySing
                   (applySing (singFun2 @(==@#@$) (%==)) sN)
                   (sFromInteger (sing :: Sing 0))
             of
               STrue -> SFoo
               SFalse
                 -> sError (sFromString (sing :: Sing "toEnum: bad argument")))
      sFromEnum SFoo = sFromInteger (sing :: Sing 0)
    instance SingI Foo where
      sing = SFoo