singletons-2.6: tests/compile-and-dump/Singletons/AsPattern.ghc88.template
Singletons/AsPattern.hs:(0,0)-(0,0): Splicing declarations
singletons
[d| maybePlus :: Maybe Nat -> Maybe Nat
maybePlus (Just n) = Just (plus (Succ Zero) n)
maybePlus p@Nothing = p
bar :: Maybe Nat -> Maybe Nat
bar x@(Just _) = x
bar Nothing = Nothing
baz_ :: Maybe Baz -> Maybe Baz
baz_ p@Nothing = p
baz_ p@(Just (Baz _ _ _)) = p
tup :: (Nat, Nat) -> (Nat, Nat)
tup p@(_, _) = p
foo :: [Nat] -> [Nat]
foo p@[] = p
foo p@[_] = p
foo p@(_ : _ : _) = p
data Baz = Baz Nat Nat Nat |]
======>
maybePlus :: Maybe Nat -> Maybe Nat
maybePlus (Just n) = Just ((plus (Succ Zero)) n)
maybePlus p@Nothing = p
bar :: Maybe Nat -> Maybe Nat
bar x@(Just _) = x
bar Nothing = Nothing
data Baz = Baz Nat Nat Nat
baz_ :: Maybe Baz -> Maybe Baz
baz_ p@Nothing = p
baz_ p@(Just (Baz _ _ _)) = p
tup :: (Nat, Nat) -> (Nat, Nat)
tup p@(_, _) = p
foo :: [Nat] -> [Nat]
foo p@[] = p
foo p@[_] = p
foo p@(_ : (_ : _)) = p
type BazSym3 (t0123456789876543210 :: Nat) (t0123456789876543210 :: Nat) (t0123456789876543210 :: Nat) =
Baz t0123456789876543210 t0123456789876543210 t0123456789876543210
instance SuppressUnusedWarnings (BazSym2 t0123456789876543210 t0123456789876543210) where
suppressUnusedWarnings = snd (((,) BazSym2KindInference) ())
data BazSym2 (t0123456789876543210 :: Nat) (t0123456789876543210 :: Nat) :: (~>) Nat Baz
where
BazSym2KindInference :: forall t0123456789876543210
t0123456789876543210
t0123456789876543210
arg. SameKind (Apply (BazSym2 t0123456789876543210 t0123456789876543210) arg) (BazSym3 t0123456789876543210 t0123456789876543210 arg) =>
BazSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210
type instance Apply (BazSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = Baz t0123456789876543210 t0123456789876543210 t0123456789876543210
instance SuppressUnusedWarnings (BazSym1 t0123456789876543210) where
suppressUnusedWarnings = snd (((,) BazSym1KindInference) ())
data BazSym1 (t0123456789876543210 :: Nat) :: (~>) Nat ((~>) Nat Baz)
where
BazSym1KindInference :: forall t0123456789876543210
t0123456789876543210
arg. SameKind (Apply (BazSym1 t0123456789876543210) arg) (BazSym2 t0123456789876543210 arg) =>
BazSym1 t0123456789876543210 t0123456789876543210
type instance Apply (BazSym1 t0123456789876543210) t0123456789876543210 = BazSym2 t0123456789876543210 t0123456789876543210
instance SuppressUnusedWarnings BazSym0 where
suppressUnusedWarnings = snd (((,) BazSym0KindInference) ())
data BazSym0 :: (~>) Nat ((~>) Nat ((~>) Nat Baz))
where
BazSym0KindInference :: forall t0123456789876543210
arg. SameKind (Apply BazSym0 arg) (BazSym1 arg) =>
BazSym0 t0123456789876543210
type instance Apply BazSym0 t0123456789876543210 = BazSym1 t0123456789876543210
type Let0123456789876543210PSym0 = Let0123456789876543210P
type family Let0123456789876543210P where
Let0123456789876543210P = '[]
type Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 =
Let0123456789876543210P wild_01234567898765432100123456789876543210
instance SuppressUnusedWarnings Let0123456789876543210PSym0 where
suppressUnusedWarnings
= snd (((,) Let0123456789876543210PSym0KindInference) ())
data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210
where
Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210
arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>
Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210
type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210
type family Let0123456789876543210P wild_0123456789876543210 where
Let0123456789876543210P wild_0123456789876543210 = Apply (Apply (:@#@$) wild_0123456789876543210) '[]
type Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 =
Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
instance SuppressUnusedWarnings (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) where
suppressUnusedWarnings
= snd (((,) Let0123456789876543210PSym2KindInference) ())
data Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
where
Let0123456789876543210PSym2KindInference :: forall wild_01234567898765432100123456789876543210
wild_01234567898765432100123456789876543210
wild_01234567898765432100123456789876543210
arg. SameKind (Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 arg) =>
Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
type instance Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
instance SuppressUnusedWarnings (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) where
suppressUnusedWarnings
= snd (((,) Let0123456789876543210PSym1KindInference) ())
data Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
where
Let0123456789876543210PSym1KindInference :: forall wild_01234567898765432100123456789876543210
wild_01234567898765432100123456789876543210
arg. SameKind (Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 arg) =>
Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
type instance Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
instance SuppressUnusedWarnings Let0123456789876543210PSym0 where
suppressUnusedWarnings
= snd (((,) Let0123456789876543210PSym0KindInference) ())
data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210
where
Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210
arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>
Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210
type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210
type family Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 where
Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 = Apply (Apply (:@#@$) wild_0123456789876543210) (Apply (Apply (:@#@$) wild_0123456789876543210) wild_0123456789876543210)
type Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 =
Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
instance SuppressUnusedWarnings (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) where
suppressUnusedWarnings
= snd (((,) Let0123456789876543210PSym1KindInference) ())
data Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
where
Let0123456789876543210PSym1KindInference :: forall wild_01234567898765432100123456789876543210
wild_01234567898765432100123456789876543210
arg. SameKind (Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 arg) =>
Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
type instance Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
instance SuppressUnusedWarnings Let0123456789876543210PSym0 where
suppressUnusedWarnings
= snd (((,) Let0123456789876543210PSym0KindInference) ())
data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210
where
Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210
arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>
Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210
type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210
type family Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 where
Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 = Apply (Apply Tuple2Sym0 wild_0123456789876543210) wild_0123456789876543210
type Let0123456789876543210PSym0 = Let0123456789876543210P
type family Let0123456789876543210P where
Let0123456789876543210P = NothingSym0
type Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 =
Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
instance SuppressUnusedWarnings (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) where
suppressUnusedWarnings
= snd (((,) Let0123456789876543210PSym2KindInference) ())
data Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
where
Let0123456789876543210PSym2KindInference :: forall wild_01234567898765432100123456789876543210
wild_01234567898765432100123456789876543210
wild_01234567898765432100123456789876543210
arg. SameKind (Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 arg) =>
Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
type instance Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
instance SuppressUnusedWarnings (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) where
suppressUnusedWarnings
= snd (((,) Let0123456789876543210PSym1KindInference) ())
data Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
where
Let0123456789876543210PSym1KindInference :: forall wild_01234567898765432100123456789876543210
wild_01234567898765432100123456789876543210
arg. SameKind (Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 arg) =>
Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
type instance Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210
instance SuppressUnusedWarnings Let0123456789876543210PSym0 where
suppressUnusedWarnings
= snd (((,) Let0123456789876543210PSym0KindInference) ())
data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210
where
Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210
arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>
Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210
type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210
type family Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 where
Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 = Apply JustSym0 (Apply (Apply (Apply BazSym0 wild_0123456789876543210) wild_0123456789876543210) wild_0123456789876543210)
type Let0123456789876543210XSym1 wild_01234567898765432100123456789876543210 =
Let0123456789876543210X wild_01234567898765432100123456789876543210
instance SuppressUnusedWarnings Let0123456789876543210XSym0 where
suppressUnusedWarnings
= snd (((,) Let0123456789876543210XSym0KindInference) ())
data Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210
where
Let0123456789876543210XSym0KindInference :: forall wild_01234567898765432100123456789876543210
arg. SameKind (Apply Let0123456789876543210XSym0 arg) (Let0123456789876543210XSym1 arg) =>
Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210
type instance Apply Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210X wild_01234567898765432100123456789876543210
type family Let0123456789876543210X wild_0123456789876543210 where
Let0123456789876543210X wild_0123456789876543210 = Apply JustSym0 wild_0123456789876543210
type Let0123456789876543210PSym0 = Let0123456789876543210P
type family Let0123456789876543210P where
Let0123456789876543210P = NothingSym0
type FooSym1 (a0123456789876543210 :: [Nat]) =
Foo a0123456789876543210
instance SuppressUnusedWarnings FooSym0 where
suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())
data FooSym0 :: (~>) [Nat] [Nat]
where
FooSym0KindInference :: forall a0123456789876543210
arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>
FooSym0 a0123456789876543210
type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210
type TupSym1 (a0123456789876543210 :: (Nat, Nat)) =
Tup a0123456789876543210
instance SuppressUnusedWarnings TupSym0 where
suppressUnusedWarnings = snd (((,) TupSym0KindInference) ())
data TupSym0 :: (~>) (Nat, Nat) (Nat, Nat)
where
TupSym0KindInference :: forall a0123456789876543210
arg. SameKind (Apply TupSym0 arg) (TupSym1 arg) =>
TupSym0 a0123456789876543210
type instance Apply TupSym0 a0123456789876543210 = Tup a0123456789876543210
type Baz_Sym1 (a0123456789876543210 :: Maybe Baz) =
Baz_ a0123456789876543210
instance SuppressUnusedWarnings Baz_Sym0 where
suppressUnusedWarnings = snd (((,) Baz_Sym0KindInference) ())
data Baz_Sym0 :: (~>) (Maybe Baz) (Maybe Baz)
where
Baz_Sym0KindInference :: forall a0123456789876543210
arg. SameKind (Apply Baz_Sym0 arg) (Baz_Sym1 arg) =>
Baz_Sym0 a0123456789876543210
type instance Apply Baz_Sym0 a0123456789876543210 = Baz_ a0123456789876543210
type BarSym1 (a0123456789876543210 :: Maybe Nat) =
Bar a0123456789876543210
instance SuppressUnusedWarnings BarSym0 where
suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())
data BarSym0 :: (~>) (Maybe Nat) (Maybe Nat)
where
BarSym0KindInference :: forall a0123456789876543210
arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>
BarSym0 a0123456789876543210
type instance Apply BarSym0 a0123456789876543210 = Bar a0123456789876543210
type MaybePlusSym1 (a0123456789876543210 :: Maybe Nat) =
MaybePlus a0123456789876543210
instance SuppressUnusedWarnings MaybePlusSym0 where
suppressUnusedWarnings = snd (((,) MaybePlusSym0KindInference) ())
data MaybePlusSym0 :: (~>) (Maybe Nat) (Maybe Nat)
where
MaybePlusSym0KindInference :: forall a0123456789876543210
arg. SameKind (Apply MaybePlusSym0 arg) (MaybePlusSym1 arg) =>
MaybePlusSym0 a0123456789876543210
type instance Apply MaybePlusSym0 a0123456789876543210 = MaybePlus a0123456789876543210
type family Foo (a :: [Nat]) :: [Nat] where
Foo '[] = Let0123456789876543210PSym0
Foo '[wild_0123456789876543210] = Let0123456789876543210PSym1 wild_0123456789876543210
Foo ('(:) wild_0123456789876543210 ('(:) wild_0123456789876543210 wild_0123456789876543210)) = Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210
type family Tup (a :: (Nat, Nat)) :: (Nat, Nat) where
Tup '(wild_0123456789876543210,
wild_0123456789876543210) = Let0123456789876543210PSym2 wild_0123456789876543210 wild_0123456789876543210
type family Baz_ (a :: Maybe Baz) :: Maybe Baz where
Baz_ 'Nothing = Let0123456789876543210PSym0
Baz_ ('Just (Baz wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210)) = Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210
type family Bar (a :: Maybe Nat) :: Maybe Nat where
Bar ('Just wild_0123456789876543210) = Let0123456789876543210XSym1 wild_0123456789876543210
Bar 'Nothing = NothingSym0
type family MaybePlus (a :: Maybe Nat) :: Maybe Nat where
MaybePlus ('Just n) = Apply JustSym0 (Apply (Apply PlusSym0 (Apply SuccSym0 ZeroSym0)) n)
MaybePlus 'Nothing = Let0123456789876543210PSym0
sFoo ::
forall (t :: [Nat]). Sing t -> Sing (Apply FooSym0 t :: [Nat])
sTup ::
forall (t :: (Nat, Nat)).
Sing t -> Sing (Apply TupSym0 t :: (Nat, Nat))
sBaz_ ::
forall (t :: Maybe Baz).
Sing t -> Sing (Apply Baz_Sym0 t :: Maybe Baz)
sBar ::
forall (t :: Maybe Nat).
Sing t -> Sing (Apply BarSym0 t :: Maybe Nat)
sMaybePlus ::
forall (t :: Maybe Nat).
Sing t -> Sing (Apply MaybePlusSym0 t :: Maybe Nat)
sFoo SNil
= let
sP :: Sing Let0123456789876543210PSym0
sP = SNil
in sP
sFoo
(SCons (sWild_0123456789876543210 :: Sing wild_0123456789876543210)
SNil)
= let
sP :: Sing (Let0123456789876543210PSym1 wild_0123456789876543210)
sP
= (applySing
((applySing ((singFun2 @(:@#@$)) SCons))
sWild_0123456789876543210))
SNil
in sP
sFoo
(SCons (sWild_0123456789876543210 :: Sing wild_0123456789876543210)
(SCons (sWild_0123456789876543210 :: Sing wild_0123456789876543210)
(sWild_0123456789876543210 :: Sing wild_0123456789876543210)))
= let
sP ::
Sing (Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210)
sP
= (applySing
((applySing ((singFun2 @(:@#@$)) SCons))
sWild_0123456789876543210))
((applySing
((applySing ((singFun2 @(:@#@$)) SCons))
sWild_0123456789876543210))
sWild_0123456789876543210)
in sP
sTup
(STuple2 (sWild_0123456789876543210 :: Sing wild_0123456789876543210)
(sWild_0123456789876543210 :: Sing wild_0123456789876543210))
= let
sP ::
Sing (Let0123456789876543210PSym2 wild_0123456789876543210 wild_0123456789876543210)
sP
= (applySing
((applySing ((singFun2 @Tuple2Sym0) STuple2))
sWild_0123456789876543210))
sWild_0123456789876543210
in sP
sBaz_ SNothing
= let
sP :: Sing Let0123456789876543210PSym0
sP = SNothing
in sP
sBaz_
(SJust (SBaz (sWild_0123456789876543210 :: Sing wild_0123456789876543210)
(sWild_0123456789876543210 :: Sing wild_0123456789876543210)
(sWild_0123456789876543210 :: Sing wild_0123456789876543210)))
= let
sP ::
Sing (Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210)
sP
= (applySing ((singFun1 @JustSym0) SJust))
((applySing
((applySing
((applySing ((singFun3 @BazSym0) SBaz)) sWild_0123456789876543210))
sWild_0123456789876543210))
sWild_0123456789876543210)
in sP
sBar
(SJust (sWild_0123456789876543210 :: Sing wild_0123456789876543210))
= let
sX :: Sing (Let0123456789876543210XSym1 wild_0123456789876543210)
sX
= (applySing ((singFun1 @JustSym0) SJust))
sWild_0123456789876543210
in sX
sBar SNothing = SNothing
sMaybePlus (SJust (sN :: Sing n))
= (applySing ((singFun1 @JustSym0) SJust))
((applySing
((applySing ((singFun2 @PlusSym0) sPlus))
((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))
sN)
sMaybePlus SNothing
= let
sP :: Sing Let0123456789876543210PSym0
sP = SNothing
in sP
instance SingI (FooSym0 :: (~>) [Nat] [Nat]) where
sing = (singFun1 @FooSym0) sFoo
instance SingI (TupSym0 :: (~>) (Nat, Nat) (Nat, Nat)) where
sing = (singFun1 @TupSym0) sTup
instance SingI (Baz_Sym0 :: (~>) (Maybe Baz) (Maybe Baz)) where
sing = (singFun1 @Baz_Sym0) sBaz_
instance SingI (BarSym0 :: (~>) (Maybe Nat) (Maybe Nat)) where
sing = (singFun1 @BarSym0) sBar
instance SingI (MaybePlusSym0 :: (~>) (Maybe Nat) (Maybe Nat)) where
sing = (singFun1 @MaybePlusSym0) sMaybePlus
data SBaz :: Baz -> GHC.Types.Type
where
SBaz :: forall (n :: Nat) (n :: Nat) (n :: Nat).
(Sing (n :: Nat))
-> (Sing (n :: Nat)) -> (Sing (n :: Nat)) -> SBaz (Baz n n n)
type instance Sing @Baz = SBaz
instance SingKind Baz where
type Demote Baz = Baz
fromSing (SBaz b b b)
= ((Baz (fromSing b)) (fromSing b)) (fromSing b)
toSing (Baz (b :: Demote Nat) (b :: Demote Nat) (b :: Demote Nat))
= case
(((,,) (toSing b :: SomeSing Nat)) (toSing b :: SomeSing Nat))
(toSing b :: SomeSing Nat)
of {
(,,) (SomeSing c) (SomeSing c) (SomeSing c)
-> SomeSing (((SBaz c) c) c) }
instance (SingI n, SingI n, SingI n) =>
SingI (Baz (n :: Nat) (n :: Nat) (n :: Nat)) where
sing = ((SBaz sing) sing) sing
instance SingI (BazSym0 :: (~>) Nat ((~>) Nat ((~>) Nat Baz))) where
sing = (singFun3 @BazSym0) SBaz
instance SingI d =>
SingI (BazSym1 (d :: Nat) :: (~>) Nat ((~>) Nat Baz)) where
sing = (singFun2 @(BazSym1 (d :: Nat))) (SBaz (sing @d))
instance (SingI d, SingI d) =>
SingI (BazSym2 (d :: Nat) (d :: Nat) :: (~>) Nat Baz) where
sing
= (singFun1 @(BazSym2 (d :: Nat) (d :: Nat)))
((SBaz (sing @d)) (sing @d))