singletons-base-3.5: tests/compile-and-dump/Singletons/T271.golden
Singletons/T271.hs:(0,0)-(0,0): Splicing declarations
singletons
[d| newtype Constant (a :: Type) (b :: Type)
= Constant a
deriving (Eq, Ord)
data Identity :: Type -> Type
where Identity :: a -> Identity a
deriving (Eq, Ord) |]
======>
newtype Constant (a :: Type) (b :: Type)
= Constant a
deriving (Eq, Ord)
data Identity :: Type -> Type
where Identity :: a -> Identity a
deriving (Eq, Ord)
type ConstantSym0 :: forall (a :: Type)
(b :: Type). (~>) a (Constant a b)
data ConstantSym0 :: (~>) a (Constant a b)
where
ConstantSym0KindInference :: SameKind (Apply ConstantSym0 arg) (ConstantSym1 arg) =>
ConstantSym0 a0123456789876543210
type instance Apply @a @(Constant a b) ConstantSym0 a0123456789876543210 = Constant a0123456789876543210
instance SuppressUnusedWarnings ConstantSym0 where
suppressUnusedWarnings = snd ((,) ConstantSym0KindInference ())
type ConstantSym1 :: forall (a :: Type) (b :: Type). a
-> Constant a b
type family ConstantSym1 @(a :: Type) @(b :: Type) (a0123456789876543210 :: a) :: Constant a b where
ConstantSym1 a0123456789876543210 = Constant a0123456789876543210
type IdentitySym0 :: (~>) a (Identity a)
data IdentitySym0 :: (~>) a (Identity a)
where
IdentitySym0KindInference :: SameKind (Apply IdentitySym0 arg) (IdentitySym1 arg) =>
IdentitySym0 a0123456789876543210
type instance Apply @a @(Identity a) IdentitySym0 a0123456789876543210 = Identity a0123456789876543210
instance SuppressUnusedWarnings IdentitySym0 where
suppressUnusedWarnings = snd ((,) IdentitySym0KindInference ())
type IdentitySym1 :: a -> Identity a
type family IdentitySym1 @a (a0123456789876543210 :: a) :: Identity a where
IdentitySym1 a0123456789876543210 = Identity a0123456789876543210
type TFHelper_0123456789876543210 :: forall a b. Constant a b
-> Constant a b -> Bool
type family TFHelper_0123456789876543210 @a @b (a :: Constant a b) (a :: Constant a b) :: Bool where
TFHelper_0123456789876543210 @a @b (Constant a_0123456789876543210 :: Constant a b) (Constant b_0123456789876543210 :: Constant a b) = Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210
instance PEq (Constant a b) where
type (==) a a = TFHelper_0123456789876543210 a a
type Compare_0123456789876543210 :: forall a b. Constant a b
-> Constant a b -> Ordering
type family Compare_0123456789876543210 @a @b (a :: Constant a b) (a :: Constant a b) :: Ordering where
Compare_0123456789876543210 @a @b (Constant a_0123456789876543210 :: Constant a b) (Constant b_0123456789876543210 :: Constant a b) = Apply (Apply (Apply FoldlSym0 (<>@#@$)) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) NilSym0)
instance POrd (Constant a b) where
type Compare a a = Compare_0123456789876543210 a a
type TFHelper_0123456789876543210 :: forall a. Identity a
-> Identity a -> Bool
type family TFHelper_0123456789876543210 @a (a :: Identity a) (a :: Identity a) :: Bool where
TFHelper_0123456789876543210 @a (Identity a_0123456789876543210 :: Identity a) (Identity b_0123456789876543210 :: Identity a) = Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210
instance PEq (Identity a) where
type (==) a a = TFHelper_0123456789876543210 a a
type Compare_0123456789876543210 :: forall a. Identity a
-> Identity a -> Ordering
type family Compare_0123456789876543210 @a (a :: Identity a) (a :: Identity a) :: Ordering where
Compare_0123456789876543210 @a (Identity a_0123456789876543210 :: Identity a) (Identity b_0123456789876543210 :: Identity a) = Apply (Apply (Apply FoldlSym0 (<>@#@$)) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) NilSym0)
instance POrd (Identity a) where
type Compare a a = Compare_0123456789876543210 a a
data SConstant :: forall (a :: Type) (b :: Type).
Constant a b -> Type
where
SConstant :: forall (a :: Type) (b :: Type) (n :: a).
(Sing n) -> SConstant (Constant n :: Constant a b)
type instance Sing @(Constant a b) = SConstant
instance (SingKind a, SingKind b) => SingKind (Constant a b) where
type Demote (Constant a b) = Constant (Demote a) (Demote b)
fromSing (SConstant b) = Constant (fromSing b)
toSing (Constant (b :: Demote a))
= (\cases (SomeSing c) -> SomeSing (SConstant c))
(toSing b :: SomeSing a)
data SIdentity :: forall (a :: Type). Identity a -> Type
where
SIdentity :: forall a (n :: a).
(Sing n) -> SIdentity (Identity n :: Identity a)
type instance Sing @(Identity a) = SIdentity
instance SingKind a => SingKind (Identity a) where
type Demote (Identity a) = Identity (Demote a)
fromSing (SIdentity b) = Identity (fromSing b)
toSing (Identity (b :: Demote a))
= (\cases (SomeSing c) -> SomeSing (SIdentity c))
(toSing b :: SomeSing a)
instance SEq a => SEq (Constant a b) where
(%==)
(SConstant (sA_0123456789876543210 :: Sing a_0123456789876543210))
(SConstant (sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210
instance SOrd a => SOrd (Constant a b) where
sCompare
(SConstant (sA_0123456789876543210 :: Sing a_0123456789876543210))
(SConstant (sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing
(applySing (singFun3 @FoldlSym0 sFoldl) (singFun2 @(<>@#@$) (%<>)))
SEQ)
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
SNil)
instance SEq a => SEq (Identity a) where
(%==)
(SIdentity (sA_0123456789876543210 :: Sing a_0123456789876543210))
(SIdentity (sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210
instance SOrd a => SOrd (Identity a) where
sCompare
(SIdentity (sA_0123456789876543210 :: Sing a_0123456789876543210))
(SIdentity (sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing
(applySing (singFun3 @FoldlSym0 sFoldl) (singFun2 @(<>@#@$) (%<>)))
SEQ)
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
SNil)
instance SDecide a => SDecide (Constant a b) where
(%~) (SConstant a) (SConstant b)
= (\cases
(Proved Refl) -> Proved Refl
(Disproved contra) -> Disproved (\cases Refl -> contra Refl))
((%~) a b)
instance Eq (SConstant (z :: Constant a b)) where
(==) _ _ = True
instance SDecide a =>
GHC.Internal.Data.Type.Equality.TestEquality (SConstant :: Constant a b
-> Type) where
GHC.Internal.Data.Type.Equality.testEquality
= Data.Singletons.Decide.decideEquality
instance SDecide a =>
GHC.Internal.Data.Type.Coercion.TestCoercion (SConstant :: Constant a b
-> Type) where
GHC.Internal.Data.Type.Coercion.testCoercion
= Data.Singletons.Decide.decideCoercion
instance SDecide a => SDecide (Identity a) where
(%~) (SIdentity a) (SIdentity b)
= (\cases
(Proved Refl) -> Proved Refl
(Disproved contra) -> Disproved (\cases Refl -> contra Refl))
((%~) a b)
instance Eq (SIdentity (z :: Identity a)) where
(==) _ _ = True
instance SDecide a =>
GHC.Internal.Data.Type.Equality.TestEquality (SIdentity :: Identity a
-> Type) where
GHC.Internal.Data.Type.Equality.testEquality
= Data.Singletons.Decide.decideEquality
instance SDecide a =>
GHC.Internal.Data.Type.Coercion.TestCoercion (SIdentity :: Identity a
-> Type) where
GHC.Internal.Data.Type.Coercion.testCoercion
= Data.Singletons.Decide.decideCoercion
instance Ord (SConstant (z :: Constant a b)) where
compare _ _ = EQ
instance Ord (SIdentity (z :: Identity a)) where
compare _ _ = EQ
instance SingI n => SingI (Constant (n :: a)) where
sing = SConstant sing
instance SingI1 Constant where
liftSing = SConstant
instance SingI (ConstantSym0 :: (~>) a (Constant a b)) where
sing = singFun1 @ConstantSym0 SConstant
instance SingI n => SingI (Identity (n :: a)) where
sing = SIdentity sing
instance SingI1 Identity where
liftSing = SIdentity
instance SingI (IdentitySym0 :: (~>) a (Identity a)) where
sing = singFun1 @IdentitySym0 SIdentity