singletons-base-3.3: tests/compile-and-dump/Singletons/T487.golden
Singletons/T487.hs:(0,0)-(0,0): Splicing declarations
singletonsOnly
[d| exprEx :: Char
exprEx = 'a'
consEx :: Char -> Symbol
consEx x = consSymbol x "bc"
unconsEx :: Maybe (Char, Symbol)
unconsEx = unconsSymbol "abc"
natToCharEx :: Char
natToCharEx = natToChar 97
charToNatEx :: Natural
charToNatEx = charToNat 'a' |]
======>
type CharToNatExSym0 :: Natural
type family CharToNatExSym0 :: Natural where
CharToNatExSym0 = CharToNatEx
type NatToCharExSym0 :: Char
type family NatToCharExSym0 :: Char where
NatToCharExSym0 = NatToCharEx
type UnconsExSym0 :: Maybe (Char, Symbol)
type family UnconsExSym0 :: Maybe (Char, Symbol) where
UnconsExSym0 = UnconsEx
type ConsExSym0 :: (~>) Char Symbol
data ConsExSym0 :: (~>) Char Symbol
where
ConsExSym0KindInference :: SameKind (Apply ConsExSym0 arg) (ConsExSym1 arg) =>
ConsExSym0 a0123456789876543210
type instance Apply ConsExSym0 a0123456789876543210 = ConsEx a0123456789876543210
instance SuppressUnusedWarnings ConsExSym0 where
suppressUnusedWarnings = snd ((,) ConsExSym0KindInference ())
type ConsExSym1 :: Char -> Symbol
type family ConsExSym1 (a0123456789876543210 :: Char) :: Symbol where
ConsExSym1 a0123456789876543210 = ConsEx a0123456789876543210
type ExprExSym0 :: Char
type family ExprExSym0 :: Char where
ExprExSym0 = ExprEx
type CharToNatEx :: Natural
type family CharToNatEx :: Natural where
CharToNatEx = Apply CharToNatSym0 'a'
type NatToCharEx :: Char
type family NatToCharEx :: Char where
NatToCharEx = Apply NatToCharSym0 (FromInteger 97)
type UnconsEx :: Maybe (Char, Symbol)
type family UnconsEx :: Maybe (Char, Symbol) where
UnconsEx = Apply UnconsSymbolSym0 "abc"
type ConsEx :: Char -> Symbol
type family ConsEx (a :: Char) :: Symbol where
ConsEx x = Apply (Apply ConsSymbolSym0 x) "bc"
type ExprEx :: Char
type family ExprEx :: Char where
ExprEx = 'a'
sCharToNatEx :: (Sing (CharToNatExSym0 :: Natural) :: Type)
sNatToCharEx :: (Sing (NatToCharExSym0 :: Char) :: Type)
sUnconsEx :: (Sing (UnconsExSym0 :: Maybe (Char, Symbol)) :: Type)
sConsEx ::
(forall (t :: Char).
Sing t -> Sing (Apply ConsExSym0 t :: Symbol) :: Type)
sExprEx :: (Sing (ExprExSym0 :: Char) :: Type)
sCharToNatEx
= applySing (singFun1 @CharToNatSym0 sCharToNat) (sing :: Sing 'a')
sNatToCharEx
= applySing
(singFun1 @NatToCharSym0 sNatToChar)
(sFromInteger (sing :: Sing 97))
sUnconsEx
= applySing
(singFun1 @UnconsSymbolSym0 sUnconsSymbol) (sing :: Sing "abc")
sConsEx (sX :: Sing x)
= applySing
(applySing (singFun2 @ConsSymbolSym0 sConsSymbol) sX)
(sing :: Sing "bc")
sExprEx = sing :: Sing 'a'
instance SingI (ConsExSym0 :: (~>) Char Symbol) where
sing = singFun1 @ConsExSym0 sConsEx