singletons-base-3.3: tests/compile-and-dump/Singletons/OrdDeriving.golden
Singletons/OrdDeriving.hs:(0,0)-(0,0): Splicing declarations
singletons
[d| data Nat
= Zero | Succ Nat
deriving (Eq, Ord)
data Foo a b c d
= A a b c d |
B a b c d |
C a b c d |
D a b c d |
E a b c d |
F a b c d
deriving (Eq, Ord) |]
======>
data Nat
= Zero | Succ Nat
deriving (Eq, Ord)
data Foo a b c d
= A a b c d |
B a b c d |
C a b c d |
D a b c d |
E a b c d |
F a b c d
deriving (Eq, Ord)
type ZeroSym0 :: Nat
type family ZeroSym0 :: Nat where
ZeroSym0 = Zero
type SuccSym0 :: (~>) Nat Nat
data SuccSym0 :: (~>) Nat Nat
where
SuccSym0KindInference :: SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>
SuccSym0 a0123456789876543210
type instance Apply SuccSym0 a0123456789876543210 = Succ a0123456789876543210
instance SuppressUnusedWarnings SuccSym0 where
suppressUnusedWarnings = snd ((,) SuccSym0KindInference ())
type SuccSym1 :: Nat -> Nat
type family SuccSym1 (a0123456789876543210 :: Nat) :: Nat where
SuccSym1 a0123456789876543210 = Succ a0123456789876543210
type ASym0 :: forall a
b
c
d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
data ASym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
where
ASym0KindInference :: SameKind (Apply ASym0 arg) (ASym1 arg) =>
ASym0 a0123456789876543210
type instance Apply ASym0 a0123456789876543210 = ASym1 a0123456789876543210
instance SuppressUnusedWarnings ASym0 where
suppressUnusedWarnings = snd ((,) ASym0KindInference ())
type ASym1 :: forall a b c d. a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))
data ASym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))
where
ASym1KindInference :: SameKind (Apply (ASym1 a0123456789876543210) arg) (ASym2 a0123456789876543210 arg) =>
ASym1 a0123456789876543210 a0123456789876543210
type instance Apply (ASym1 a0123456789876543210) a0123456789876543210 = ASym2 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (ASym1 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) ASym1KindInference ())
type ASym2 :: forall a b c d. a
-> b -> (~>) c ((~>) d (Foo a b c d))
data ASym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))
where
ASym2KindInference :: SameKind (Apply (ASym2 a0123456789876543210 a0123456789876543210) arg) (ASym3 a0123456789876543210 a0123456789876543210 arg) =>
ASym2 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (ASym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ASym3 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (ASym2 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) ASym2KindInference ())
type ASym3 :: forall a b c d. a -> b -> c -> (~>) d (Foo a b c d)
data ASym3 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) :: (~>) d (Foo a b c d)
where
ASym3KindInference :: SameKind (Apply (ASym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) arg) (ASym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 arg) =>
ASym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (ASym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) a0123456789876543210 = A a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (ASym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) ASym3KindInference ())
type ASym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d
type family ASym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where
ASym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = A a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type BSym0 :: forall a
b
c
d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
data BSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
where
BSym0KindInference :: SameKind (Apply BSym0 arg) (BSym1 arg) =>
BSym0 a0123456789876543210
type instance Apply BSym0 a0123456789876543210 = BSym1 a0123456789876543210
instance SuppressUnusedWarnings BSym0 where
suppressUnusedWarnings = snd ((,) BSym0KindInference ())
type BSym1 :: forall a b c d. a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))
data BSym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))
where
BSym1KindInference :: SameKind (Apply (BSym1 a0123456789876543210) arg) (BSym2 a0123456789876543210 arg) =>
BSym1 a0123456789876543210 a0123456789876543210
type instance Apply (BSym1 a0123456789876543210) a0123456789876543210 = BSym2 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (BSym1 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) BSym1KindInference ())
type BSym2 :: forall a b c d. a
-> b -> (~>) c ((~>) d (Foo a b c d))
data BSym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))
where
BSym2KindInference :: SameKind (Apply (BSym2 a0123456789876543210 a0123456789876543210) arg) (BSym3 a0123456789876543210 a0123456789876543210 arg) =>
BSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (BSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = BSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (BSym2 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) BSym2KindInference ())
type BSym3 :: forall a b c d. a -> b -> c -> (~>) d (Foo a b c d)
data BSym3 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) :: (~>) d (Foo a b c d)
where
BSym3KindInference :: SameKind (Apply (BSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) arg) (BSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 arg) =>
BSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (BSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) a0123456789876543210 = B a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (BSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) BSym3KindInference ())
type BSym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d
type family BSym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where
BSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = B a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type CSym0 :: forall a
b
c
d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
data CSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
where
CSym0KindInference :: SameKind (Apply CSym0 arg) (CSym1 arg) =>
CSym0 a0123456789876543210
type instance Apply CSym0 a0123456789876543210 = CSym1 a0123456789876543210
instance SuppressUnusedWarnings CSym0 where
suppressUnusedWarnings = snd ((,) CSym0KindInference ())
type CSym1 :: forall a b c d. a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))
data CSym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))
where
CSym1KindInference :: SameKind (Apply (CSym1 a0123456789876543210) arg) (CSym2 a0123456789876543210 arg) =>
CSym1 a0123456789876543210 a0123456789876543210
type instance Apply (CSym1 a0123456789876543210) a0123456789876543210 = CSym2 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (CSym1 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) CSym1KindInference ())
type CSym2 :: forall a b c d. a
-> b -> (~>) c ((~>) d (Foo a b c d))
data CSym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))
where
CSym2KindInference :: SameKind (Apply (CSym2 a0123456789876543210 a0123456789876543210) arg) (CSym3 a0123456789876543210 a0123456789876543210 arg) =>
CSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (CSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = CSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (CSym2 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) CSym2KindInference ())
type CSym3 :: forall a b c d. a -> b -> c -> (~>) d (Foo a b c d)
data CSym3 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) :: (~>) d (Foo a b c d)
where
CSym3KindInference :: SameKind (Apply (CSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) arg) (CSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 arg) =>
CSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (CSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) a0123456789876543210 = C a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (CSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) CSym3KindInference ())
type CSym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d
type family CSym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where
CSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = C a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type DSym0 :: forall a
b
c
d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
data DSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
where
DSym0KindInference :: SameKind (Apply DSym0 arg) (DSym1 arg) =>
DSym0 a0123456789876543210
type instance Apply DSym0 a0123456789876543210 = DSym1 a0123456789876543210
instance SuppressUnusedWarnings DSym0 where
suppressUnusedWarnings = snd ((,) DSym0KindInference ())
type DSym1 :: forall a b c d. a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))
data DSym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))
where
DSym1KindInference :: SameKind (Apply (DSym1 a0123456789876543210) arg) (DSym2 a0123456789876543210 arg) =>
DSym1 a0123456789876543210 a0123456789876543210
type instance Apply (DSym1 a0123456789876543210) a0123456789876543210 = DSym2 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (DSym1 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) DSym1KindInference ())
type DSym2 :: forall a b c d. a
-> b -> (~>) c ((~>) d (Foo a b c d))
data DSym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))
where
DSym2KindInference :: SameKind (Apply (DSym2 a0123456789876543210 a0123456789876543210) arg) (DSym3 a0123456789876543210 a0123456789876543210 arg) =>
DSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (DSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = DSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (DSym2 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) DSym2KindInference ())
type DSym3 :: forall a b c d. a -> b -> c -> (~>) d (Foo a b c d)
data DSym3 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) :: (~>) d (Foo a b c d)
where
DSym3KindInference :: SameKind (Apply (DSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) arg) (DSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 arg) =>
DSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (DSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) a0123456789876543210 = D a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (DSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) DSym3KindInference ())
type DSym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d
type family DSym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where
DSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = D a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type ESym0 :: forall a
b
c
d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
data ESym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
where
ESym0KindInference :: SameKind (Apply ESym0 arg) (ESym1 arg) =>
ESym0 a0123456789876543210
type instance Apply ESym0 a0123456789876543210 = ESym1 a0123456789876543210
instance SuppressUnusedWarnings ESym0 where
suppressUnusedWarnings = snd ((,) ESym0KindInference ())
type ESym1 :: forall a b c d. a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))
data ESym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))
where
ESym1KindInference :: SameKind (Apply (ESym1 a0123456789876543210) arg) (ESym2 a0123456789876543210 arg) =>
ESym1 a0123456789876543210 a0123456789876543210
type instance Apply (ESym1 a0123456789876543210) a0123456789876543210 = ESym2 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (ESym1 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) ESym1KindInference ())
type ESym2 :: forall a b c d. a
-> b -> (~>) c ((~>) d (Foo a b c d))
data ESym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))
where
ESym2KindInference :: SameKind (Apply (ESym2 a0123456789876543210 a0123456789876543210) arg) (ESym3 a0123456789876543210 a0123456789876543210 arg) =>
ESym2 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (ESym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ESym3 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (ESym2 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) ESym2KindInference ())
type ESym3 :: forall a b c d. a -> b -> c -> (~>) d (Foo a b c d)
data ESym3 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) :: (~>) d (Foo a b c d)
where
ESym3KindInference :: SameKind (Apply (ESym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) arg) (ESym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 arg) =>
ESym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (ESym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) a0123456789876543210 = E a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (ESym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) ESym3KindInference ())
type ESym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d
type family ESym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where
ESym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = E a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type FSym0 :: forall a
b
c
d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
data FSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))
where
FSym0KindInference :: SameKind (Apply FSym0 arg) (FSym1 arg) =>
FSym0 a0123456789876543210
type instance Apply FSym0 a0123456789876543210 = FSym1 a0123456789876543210
instance SuppressUnusedWarnings FSym0 where
suppressUnusedWarnings = snd ((,) FSym0KindInference ())
type FSym1 :: forall a b c d. a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))
data FSym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))
where
FSym1KindInference :: SameKind (Apply (FSym1 a0123456789876543210) arg) (FSym2 a0123456789876543210 arg) =>
FSym1 a0123456789876543210 a0123456789876543210
type instance Apply (FSym1 a0123456789876543210) a0123456789876543210 = FSym2 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (FSym1 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) FSym1KindInference ())
type FSym2 :: forall a b c d. a
-> b -> (~>) c ((~>) d (Foo a b c d))
data FSym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))
where
FSym2KindInference :: SameKind (Apply (FSym2 a0123456789876543210 a0123456789876543210) arg) (FSym3 a0123456789876543210 a0123456789876543210 arg) =>
FSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (FSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = FSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (FSym2 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) FSym2KindInference ())
type FSym3 :: forall a b c d. a -> b -> c -> (~>) d (Foo a b c d)
data FSym3 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) :: (~>) d (Foo a b c d)
where
FSym3KindInference :: SameKind (Apply (FSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) arg) (FSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 arg) =>
FSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type instance Apply (FSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) a0123456789876543210 = F a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (FSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) where
suppressUnusedWarnings = snd ((,) FSym3KindInference ())
type FSym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d
type family FSym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where
FSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = F a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210
type TFHelper_0123456789876543210 :: Nat -> Nat -> Bool
type family TFHelper_0123456789876543210 (a :: Nat) (a :: Nat) :: Bool where
TFHelper_0123456789876543210 Zero Zero = TrueSym0
TFHelper_0123456789876543210 Zero (Succ _) = FalseSym0
TFHelper_0123456789876543210 (Succ _) Zero = FalseSym0
TFHelper_0123456789876543210 (Succ a_0123456789876543210) (Succ b_0123456789876543210) = Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210
type TFHelper_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Bool)
data TFHelper_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Bool)
where
TFHelper_0123456789876543210Sym0KindInference :: SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>
TFHelper_0123456789876543210Sym0 a0123456789876543210
type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210
instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where
suppressUnusedWarnings
= snd ((,) TFHelper_0123456789876543210Sym0KindInference ())
type TFHelper_0123456789876543210Sym1 :: Nat -> (~>) Nat Bool
data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Nat Bool
where
TFHelper_0123456789876543210Sym1KindInference :: SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>
TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210
type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where
suppressUnusedWarnings
= snd ((,) TFHelper_0123456789876543210Sym1KindInference ())
type TFHelper_0123456789876543210Sym2 :: Nat -> Nat -> Bool
type family TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) :: Bool where
TFHelper_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210
instance PEq Nat where
type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a
type Compare_0123456789876543210 :: Nat -> Nat -> Ordering
type family Compare_0123456789876543210 (a :: Nat) (a :: Nat) :: Ordering where
Compare_0123456789876543210 Zero Zero = Apply (Apply (Apply FoldlSym0 (<>@#@$)) EQSym0) NilSym0
Compare_0123456789876543210 (Succ a_0123456789876543210) (Succ b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 (<>@#@$)) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) NilSym0)
Compare_0123456789876543210 Zero (Succ _) = LTSym0
Compare_0123456789876543210 (Succ _) Zero = GTSym0
type Compare_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Ordering)
data Compare_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Ordering)
where
Compare_0123456789876543210Sym0KindInference :: SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>
Compare_0123456789876543210Sym0 a0123456789876543210
type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210
instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where
suppressUnusedWarnings
= snd ((,) Compare_0123456789876543210Sym0KindInference ())
type Compare_0123456789876543210Sym1 :: Nat -> (~>) Nat Ordering
data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Nat Ordering
where
Compare_0123456789876543210Sym1KindInference :: SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>
Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210
type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where
suppressUnusedWarnings
= snd ((,) Compare_0123456789876543210Sym1KindInference ())
type Compare_0123456789876543210Sym2 :: Nat -> Nat -> Ordering
type family Compare_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) :: Ordering where
Compare_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210
instance POrd Nat where
type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a
type TFHelper_0123456789876543210 :: Foo a b c d
-> Foo a b c d -> Bool
type family TFHelper_0123456789876543210 (a :: Foo a b c d) (a :: Foo a b c d) :: Bool where
TFHelper_0123456789876543210 (A a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (A b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)))
TFHelper_0123456789876543210 (A _ _ _ _) (B _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (A _ _ _ _) (C _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (A _ _ _ _) (D _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (A _ _ _ _) (E _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (A _ _ _ _) (F _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (B _ _ _ _) (A _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (B a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (B b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)))
TFHelper_0123456789876543210 (B _ _ _ _) (C _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (B _ _ _ _) (D _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (B _ _ _ _) (E _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (B _ _ _ _) (F _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (C _ _ _ _) (A _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (C _ _ _ _) (B _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (C a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (C b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)))
TFHelper_0123456789876543210 (C _ _ _ _) (D _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (C _ _ _ _) (E _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (C _ _ _ _) (F _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (D _ _ _ _) (A _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (D _ _ _ _) (B _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (D _ _ _ _) (C _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (D a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (D b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)))
TFHelper_0123456789876543210 (D _ _ _ _) (E _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (D _ _ _ _) (F _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (E _ _ _ _) (A _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (E _ _ _ _) (B _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (E _ _ _ _) (C _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (E _ _ _ _) (D _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (E a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (E b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)))
TFHelper_0123456789876543210 (E _ _ _ _) (F _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (F _ _ _ _) (A _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (F _ _ _ _) (B _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (F _ _ _ _) (C _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (F _ _ _ _) (D _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (F _ _ _ _) (E _ _ _ _) = FalseSym0
TFHelper_0123456789876543210 (F a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (F b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)))
type TFHelper_0123456789876543210Sym0 :: (~>) (Foo a b c d) ((~>) (Foo a b c d) Bool)
data TFHelper_0123456789876543210Sym0 :: (~>) (Foo a b c d) ((~>) (Foo a b c d) Bool)
where
TFHelper_0123456789876543210Sym0KindInference :: SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>
TFHelper_0123456789876543210Sym0 a0123456789876543210
type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210
instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where
suppressUnusedWarnings
= snd ((,) TFHelper_0123456789876543210Sym0KindInference ())
type TFHelper_0123456789876543210Sym1 :: Foo a b c d
-> (~>) (Foo a b c d) Bool
data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: Foo a b c d) :: (~>) (Foo a b c d) Bool
where
TFHelper_0123456789876543210Sym1KindInference :: SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>
TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210
type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where
suppressUnusedWarnings
= snd ((,) TFHelper_0123456789876543210Sym1KindInference ())
type TFHelper_0123456789876543210Sym2 :: Foo a b c d
-> Foo a b c d -> Bool
type family TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: Foo a b c d) (a0123456789876543210 :: Foo a b c d) :: Bool where
TFHelper_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210
instance PEq (Foo a b c d) where
type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a
type Compare_0123456789876543210 :: Foo a b c d
-> Foo a b c d -> Ordering
type family Compare_0123456789876543210 (a :: Foo a b c d) (a :: Foo a b c d) :: Ordering where
Compare_0123456789876543210 (A a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (A b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 (<>@#@$)) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) NilSym0))))
Compare_0123456789876543210 (B a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (B b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 (<>@#@$)) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) NilSym0))))
Compare_0123456789876543210 (C a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (C b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 (<>@#@$)) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) NilSym0))))
Compare_0123456789876543210 (D a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (D b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 (<>@#@$)) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) NilSym0))))
Compare_0123456789876543210 (E a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (E b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 (<>@#@$)) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) NilSym0))))
Compare_0123456789876543210 (F a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (F b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 (<>@#@$)) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) NilSym0))))
Compare_0123456789876543210 (A _ _ _ _) (B _ _ _ _) = LTSym0
Compare_0123456789876543210 (A _ _ _ _) (C _ _ _ _) = LTSym0
Compare_0123456789876543210 (A _ _ _ _) (D _ _ _ _) = LTSym0
Compare_0123456789876543210 (A _ _ _ _) (E _ _ _ _) = LTSym0
Compare_0123456789876543210 (A _ _ _ _) (F _ _ _ _) = LTSym0
Compare_0123456789876543210 (B _ _ _ _) (A _ _ _ _) = GTSym0
Compare_0123456789876543210 (B _ _ _ _) (C _ _ _ _) = LTSym0
Compare_0123456789876543210 (B _ _ _ _) (D _ _ _ _) = LTSym0
Compare_0123456789876543210 (B _ _ _ _) (E _ _ _ _) = LTSym0
Compare_0123456789876543210 (B _ _ _ _) (F _ _ _ _) = LTSym0
Compare_0123456789876543210 (C _ _ _ _) (A _ _ _ _) = GTSym0
Compare_0123456789876543210 (C _ _ _ _) (B _ _ _ _) = GTSym0
Compare_0123456789876543210 (C _ _ _ _) (D _ _ _ _) = LTSym0
Compare_0123456789876543210 (C _ _ _ _) (E _ _ _ _) = LTSym0
Compare_0123456789876543210 (C _ _ _ _) (F _ _ _ _) = LTSym0
Compare_0123456789876543210 (D _ _ _ _) (A _ _ _ _) = GTSym0
Compare_0123456789876543210 (D _ _ _ _) (B _ _ _ _) = GTSym0
Compare_0123456789876543210 (D _ _ _ _) (C _ _ _ _) = GTSym0
Compare_0123456789876543210 (D _ _ _ _) (E _ _ _ _) = LTSym0
Compare_0123456789876543210 (D _ _ _ _) (F _ _ _ _) = LTSym0
Compare_0123456789876543210 (E _ _ _ _) (A _ _ _ _) = GTSym0
Compare_0123456789876543210 (E _ _ _ _) (B _ _ _ _) = GTSym0
Compare_0123456789876543210 (E _ _ _ _) (C _ _ _ _) = GTSym0
Compare_0123456789876543210 (E _ _ _ _) (D _ _ _ _) = GTSym0
Compare_0123456789876543210 (E _ _ _ _) (F _ _ _ _) = LTSym0
Compare_0123456789876543210 (F _ _ _ _) (A _ _ _ _) = GTSym0
Compare_0123456789876543210 (F _ _ _ _) (B _ _ _ _) = GTSym0
Compare_0123456789876543210 (F _ _ _ _) (C _ _ _ _) = GTSym0
Compare_0123456789876543210 (F _ _ _ _) (D _ _ _ _) = GTSym0
Compare_0123456789876543210 (F _ _ _ _) (E _ _ _ _) = GTSym0
type Compare_0123456789876543210Sym0 :: (~>) (Foo a b c d) ((~>) (Foo a b c d) Ordering)
data Compare_0123456789876543210Sym0 :: (~>) (Foo a b c d) ((~>) (Foo a b c d) Ordering)
where
Compare_0123456789876543210Sym0KindInference :: SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>
Compare_0123456789876543210Sym0 a0123456789876543210
type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210
instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where
suppressUnusedWarnings
= snd ((,) Compare_0123456789876543210Sym0KindInference ())
type Compare_0123456789876543210Sym1 :: Foo a b c d
-> (~>) (Foo a b c d) Ordering
data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Foo a b c d) :: (~>) (Foo a b c d) Ordering
where
Compare_0123456789876543210Sym1KindInference :: SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>
Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210
type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210
instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where
suppressUnusedWarnings
= snd ((,) Compare_0123456789876543210Sym1KindInference ())
type Compare_0123456789876543210Sym2 :: Foo a b c d
-> Foo a b c d -> Ordering
type family Compare_0123456789876543210Sym2 (a0123456789876543210 :: Foo a b c d) (a0123456789876543210 :: Foo a b c d) :: Ordering where
Compare_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210
instance POrd (Foo a b c d) where
type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a
data SNat :: Nat -> Type
where
SZero :: SNat (Zero :: Nat)
SSucc :: forall (n :: Nat). (Sing n) -> SNat (Succ n :: Nat)
type instance Sing @Nat = SNat
instance SingKind Nat where
type Demote Nat = Nat
fromSing SZero = Zero
fromSing (SSucc b) = Succ (fromSing b)
toSing Zero = SomeSing SZero
toSing (Succ (b :: Demote Nat))
= case toSing b :: SomeSing Nat of SomeSing c -> SomeSing (SSucc c)
data SFoo :: forall a b c d. Foo a b c d -> Type
where
SA :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).
(Sing n) ->
(Sing n) ->
(Sing n) ->
(Sing n) ->
SFoo (A n n n n :: Foo a b c d)
SB :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).
(Sing n) ->
(Sing n) ->
(Sing n) ->
(Sing n) ->
SFoo (B n n n n :: Foo a b c d)
SC :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).
(Sing n) ->
(Sing n) ->
(Sing n) ->
(Sing n) ->
SFoo (C n n n n :: Foo a b c d)
SD :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).
(Sing n) ->
(Sing n) ->
(Sing n) ->
(Sing n) ->
SFoo (D n n n n :: Foo a b c d)
SE :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).
(Sing n) ->
(Sing n) ->
(Sing n) ->
(Sing n) ->
SFoo (E n n n n :: Foo a b c d)
SF :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).
(Sing n) ->
(Sing n) ->
(Sing n) ->
(Sing n) ->
SFoo (F n n n n :: Foo a b c d)
type instance Sing @(Foo a b c d) = SFoo
instance (SingKind a, SingKind b, SingKind c, SingKind d) =>
SingKind (Foo a b c d) where
type Demote (Foo a b c d) = Foo (Demote a) (Demote b) (Demote c) (Demote d)
fromSing (SA b b b b)
= A (fromSing b) (fromSing b) (fromSing b) (fromSing b)
fromSing (SB b b b b)
= B (fromSing b) (fromSing b) (fromSing b) (fromSing b)
fromSing (SC b b b b)
= C (fromSing b) (fromSing b) (fromSing b) (fromSing b)
fromSing (SD b b b b)
= D (fromSing b) (fromSing b) (fromSing b) (fromSing b)
fromSing (SE b b b b)
= E (fromSing b) (fromSing b) (fromSing b) (fromSing b)
fromSing (SF b b b b)
= F (fromSing b) (fromSing b) (fromSing b) (fromSing b)
toSing
(A (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))
= case
(,,,)
(toSing b :: SomeSing a) (toSing b :: SomeSing b)
(toSing b :: SomeSing c) (toSing b :: SomeSing d)
of
(,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)
-> SomeSing (SA c c c c)
toSing
(B (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))
= case
(,,,)
(toSing b :: SomeSing a) (toSing b :: SomeSing b)
(toSing b :: SomeSing c) (toSing b :: SomeSing d)
of
(,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)
-> SomeSing (SB c c c c)
toSing
(C (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))
= case
(,,,)
(toSing b :: SomeSing a) (toSing b :: SomeSing b)
(toSing b :: SomeSing c) (toSing b :: SomeSing d)
of
(,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)
-> SomeSing (SC c c c c)
toSing
(D (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))
= case
(,,,)
(toSing b :: SomeSing a) (toSing b :: SomeSing b)
(toSing b :: SomeSing c) (toSing b :: SomeSing d)
of
(,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)
-> SomeSing (SD c c c c)
toSing
(E (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))
= case
(,,,)
(toSing b :: SomeSing a) (toSing b :: SomeSing b)
(toSing b :: SomeSing c) (toSing b :: SomeSing d)
of
(,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)
-> SomeSing (SE c c c c)
toSing
(F (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))
= case
(,,,)
(toSing b :: SomeSing a) (toSing b :: SomeSing b)
(toSing b :: SomeSing c) (toSing b :: SomeSing d)
of
(,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)
-> SomeSing (SF c c c c)
instance SEq Nat => SEq Nat where
(%==) ::
forall (t1 :: Nat) (t2 :: Nat). Sing t1
-> Sing t2
-> Sing (Apply (Apply ((==@#@$) :: TyFun Nat ((~>) Nat Bool)
-> Type) t1) t2)
(%==) SZero SZero = STrue
(%==) SZero (SSucc _) = SFalse
(%==) (SSucc _) SZero = SFalse
(%==)
(SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))
(SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210
instance SOrd Nat => SOrd Nat where
sCompare ::
forall (t1 :: Nat) (t2 :: Nat). Sing t1
-> Sing t2
-> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)
-> Type) t1) t2)
sCompare SZero SZero
= applySing
(applySing
(applySing (singFun3 @FoldlSym0 sFoldl) (singFun2 @(<>@#@$) (%<>)))
SEQ)
SNil
sCompare
(SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))
(SSucc (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)
sCompare SZero (SSucc _) = SLT
sCompare (SSucc _) SZero = SGT
instance (SEq a, SEq b, SEq c, SEq d) => SEq (Foo a b c d) where
(%==) ::
forall (t1 :: Foo a b c d) (t2 :: Foo a b c d). Sing t1
-> Sing t2
-> Sing (Apply (Apply ((==@#@$) :: TyFun (Foo a b c d) ((~>) (Foo a b c d) Bool)
-> Type) t1) t2)
(%==)
(SA (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SA (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210)))
(%==) (SA _ _ _ _) (SB _ _ _ _) = SFalse
(%==) (SA _ _ _ _) (SC _ _ _ _) = SFalse
(%==) (SA _ _ _ _) (SD _ _ _ _) = SFalse
(%==) (SA _ _ _ _) (SE _ _ _ _) = SFalse
(%==) (SA _ _ _ _) (SF _ _ _ _) = SFalse
(%==) (SB _ _ _ _) (SA _ _ _ _) = SFalse
(%==)
(SB (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SB (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210)))
(%==) (SB _ _ _ _) (SC _ _ _ _) = SFalse
(%==) (SB _ _ _ _) (SD _ _ _ _) = SFalse
(%==) (SB _ _ _ _) (SE _ _ _ _) = SFalse
(%==) (SB _ _ _ _) (SF _ _ _ _) = SFalse
(%==) (SC _ _ _ _) (SA _ _ _ _) = SFalse
(%==) (SC _ _ _ _) (SB _ _ _ _) = SFalse
(%==)
(SC (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SC (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210)))
(%==) (SC _ _ _ _) (SD _ _ _ _) = SFalse
(%==) (SC _ _ _ _) (SE _ _ _ _) = SFalse
(%==) (SC _ _ _ _) (SF _ _ _ _) = SFalse
(%==) (SD _ _ _ _) (SA _ _ _ _) = SFalse
(%==) (SD _ _ _ _) (SB _ _ _ _) = SFalse
(%==) (SD _ _ _ _) (SC _ _ _ _) = SFalse
(%==)
(SD (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SD (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210)))
(%==) (SD _ _ _ _) (SE _ _ _ _) = SFalse
(%==) (SD _ _ _ _) (SF _ _ _ _) = SFalse
(%==) (SE _ _ _ _) (SA _ _ _ _) = SFalse
(%==) (SE _ _ _ _) (SB _ _ _ _) = SFalse
(%==) (SE _ _ _ _) (SC _ _ _ _) = SFalse
(%==) (SE _ _ _ _) (SD _ _ _ _) = SFalse
(%==)
(SE (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SE (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210)))
(%==) (SE _ _ _ _) (SF _ _ _ _) = SFalse
(%==) (SF _ _ _ _) (SA _ _ _ _) = SFalse
(%==) (SF _ _ _ _) (SB _ _ _ _) = SFalse
(%==) (SF _ _ _ _) (SC _ _ _ _) = SFalse
(%==) (SF _ _ _ _) (SD _ _ _ _) = SFalse
(%==) (SF _ _ _ _) (SE _ _ _ _) = SFalse
(%==)
(SF (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SF (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210))
= applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(&&@#@$) (%&&))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing (singFun2 @(==@#@$) (%==)) sA_0123456789876543210)
sB_0123456789876543210)))
instance (SOrd a, SOrd b, SOrd c, SOrd d) =>
SOrd (Foo a b c d) where
sCompare ::
forall (t1 :: Foo a b c d) (t2 :: Foo a b c d). Sing t1
-> Sing t2
-> Sing (Apply (Apply (CompareSym0 :: TyFun (Foo a b c d) ((~>) (Foo a b c d) Ordering)
-> Type) t1) t2)
sCompare
(SA (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SA (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(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))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
SNil))))
sCompare
(SB (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SB (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(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))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
SNil))))
sCompare
(SC (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SC (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(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))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
SNil))))
sCompare
(SD (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SD (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(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))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
SNil))))
sCompare
(SE (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SE (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(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))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
SNil))))
sCompare
(SF (sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210)
(sA_0123456789876543210 :: Sing a_0123456789876543210))
(SF (sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(sB_0123456789876543210 :: Sing b_0123456789876543210)
(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))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
(applySing
(applySing
(singFun2 @(:@#@$) SCons)
(applySing
(applySing (singFun2 @CompareSym0 sCompare) sA_0123456789876543210)
sB_0123456789876543210))
SNil))))
sCompare (SA _ _ _ _) (SB _ _ _ _) = SLT
sCompare (SA _ _ _ _) (SC _ _ _ _) = SLT
sCompare (SA _ _ _ _) (SD _ _ _ _) = SLT
sCompare (SA _ _ _ _) (SE _ _ _ _) = SLT
sCompare (SA _ _ _ _) (SF _ _ _ _) = SLT
sCompare (SB _ _ _ _) (SA _ _ _ _) = SGT
sCompare (SB _ _ _ _) (SC _ _ _ _) = SLT
sCompare (SB _ _ _ _) (SD _ _ _ _) = SLT
sCompare (SB _ _ _ _) (SE _ _ _ _) = SLT
sCompare (SB _ _ _ _) (SF _ _ _ _) = SLT
sCompare (SC _ _ _ _) (SA _ _ _ _) = SGT
sCompare (SC _ _ _ _) (SB _ _ _ _) = SGT
sCompare (SC _ _ _ _) (SD _ _ _ _) = SLT
sCompare (SC _ _ _ _) (SE _ _ _ _) = SLT
sCompare (SC _ _ _ _) (SF _ _ _ _) = SLT
sCompare (SD _ _ _ _) (SA _ _ _ _) = SGT
sCompare (SD _ _ _ _) (SB _ _ _ _) = SGT
sCompare (SD _ _ _ _) (SC _ _ _ _) = SGT
sCompare (SD _ _ _ _) (SE _ _ _ _) = SLT
sCompare (SD _ _ _ _) (SF _ _ _ _) = SLT
sCompare (SE _ _ _ _) (SA _ _ _ _) = SGT
sCompare (SE _ _ _ _) (SB _ _ _ _) = SGT
sCompare (SE _ _ _ _) (SC _ _ _ _) = SGT
sCompare (SE _ _ _ _) (SD _ _ _ _) = SGT
sCompare (SE _ _ _ _) (SF _ _ _ _) = SLT
sCompare (SF _ _ _ _) (SA _ _ _ _) = SGT
sCompare (SF _ _ _ _) (SB _ _ _ _) = SGT
sCompare (SF _ _ _ _) (SC _ _ _ _) = SGT
sCompare (SF _ _ _ _) (SD _ _ _ _) = SGT
sCompare (SF _ _ _ _) (SE _ _ _ _) = SGT
instance SDecide Nat => SDecide Nat where
(%~) SZero SZero = Proved Refl
(%~) SZero (SSucc _) = Disproved (\ x -> case x of {})
(%~) (SSucc _) SZero = Disproved (\ x -> case x of {})
(%~) (SSucc a) (SSucc b)
= case (%~) a b of
Proved Refl -> Proved Refl
Disproved contra
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
instance Eq (SNat (z :: Nat)) where
(==) _ _ = True
instance SDecide Nat =>
Data.Type.Equality.TestEquality (SNat :: Nat -> Type) where
Data.Type.Equality.testEquality
= Data.Singletons.Decide.decideEquality
instance SDecide Nat =>
Data.Type.Coercion.TestCoercion (SNat :: Nat -> Type) where
Data.Type.Coercion.testCoercion
= Data.Singletons.Decide.decideCoercion
instance (SDecide a, SDecide b, SDecide c, SDecide d) =>
SDecide (Foo a b c d) where
(%~) (SA a a a a) (SA b b b b)
= case (,,,) ((%~) a b) ((%~) a b) ((%~) a b) ((%~) a b) of
(,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)
-> Proved Refl
(,,,) (Disproved contra) _ _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ (Disproved contra) _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ (Disproved contra) _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ _ (Disproved contra)
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(%~) (SA _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SA _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SA _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SA _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SA _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SB _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SB a a a a) (SB b b b b)
= case (,,,) ((%~) a b) ((%~) a b) ((%~) a b) ((%~) a b) of
(,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)
-> Proved Refl
(,,,) (Disproved contra) _ _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ (Disproved contra) _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ (Disproved contra) _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ _ (Disproved contra)
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(%~) (SB _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SB _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SB _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SB _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SC _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SC _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SC a a a a) (SC b b b b)
= case (,,,) ((%~) a b) ((%~) a b) ((%~) a b) ((%~) a b) of
(,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)
-> Proved Refl
(,,,) (Disproved contra) _ _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ (Disproved contra) _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ (Disproved contra) _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ _ (Disproved contra)
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(%~) (SC _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SC _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SC _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SD _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SD _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SD _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SD a a a a) (SD b b b b)
= case (,,,) ((%~) a b) ((%~) a b) ((%~) a b) ((%~) a b) of
(,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)
-> Proved Refl
(,,,) (Disproved contra) _ _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ (Disproved contra) _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ (Disproved contra) _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ _ (Disproved contra)
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(%~) (SD _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SD _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SE _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SE _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SE _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SE _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SE a a a a) (SE b b b b)
= case (,,,) ((%~) a b) ((%~) a b) ((%~) a b) ((%~) a b) of
(,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)
-> Proved Refl
(,,,) (Disproved contra) _ _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ (Disproved contra) _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ (Disproved contra) _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ _ (Disproved contra)
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(%~) (SE _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SF _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SF _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SF _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SF _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SF _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of {})
(%~) (SF a a a a) (SF b b b b)
= case (,,,) ((%~) a b) ((%~) a b) ((%~) a b) ((%~) a b) of
(,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)
-> Proved Refl
(,,,) (Disproved contra) _ _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ (Disproved contra) _ _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ (Disproved contra) _
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
(,,,) _ _ _ (Disproved contra)
-> Disproved (\ refl -> case refl of Refl -> contra Refl)
instance Eq (SFoo (z :: Foo a b c d)) where
(==) _ _ = True
instance (SDecide a, SDecide b, SDecide c, SDecide d) =>
Data.Type.Equality.TestEquality (SFoo :: Foo a b c d -> Type) where
Data.Type.Equality.testEquality
= Data.Singletons.Decide.decideEquality
instance (SDecide a, SDecide b, SDecide c, SDecide d) =>
Data.Type.Coercion.TestCoercion (SFoo :: Foo a b c d -> Type) where
Data.Type.Coercion.testCoercion
= Data.Singletons.Decide.decideCoercion
instance Ord (SNat (z :: Nat)) where
compare _ _ = EQ
instance Ord (SFoo (z :: Foo a b c d)) where
compare _ _ = EQ
instance SingI Zero where
sing = SZero
instance SingI n => SingI (Succ (n :: Nat)) where
sing = SSucc sing
instance SingI1 Succ where
liftSing = SSucc
instance SingI (SuccSym0 :: (~>) Nat Nat) where
sing = singFun1 @SuccSym0 SSucc
instance (SingI n, SingI n, SingI n, SingI n) =>
SingI (A (n :: a) (n :: b) (n :: c) (n :: d)) where
sing = SA sing sing sing sing
instance (SingI n, SingI n, SingI n) =>
SingI1 (A (n :: a) (n :: b) (n :: c)) where
liftSing = SA sing sing sing
instance (SingI n, SingI n) => SingI2 (A (n :: a) (n :: b)) where
liftSing2 = SA sing sing
instance SingI (ASym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where
sing = singFun4 @ASym0 SA
instance SingI d =>
SingI (ASym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
sing = singFun3 @(ASym1 (d :: a)) (SA (sing @d))
instance SingI1 (ASym1 :: a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
liftSing (s :: Sing (d :: a)) = singFun3 @(ASym1 (d :: a)) (SA s)
instance (SingI d, SingI d) =>
SingI (ASym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where
sing = singFun2 @(ASym2 (d :: a) (d :: b)) (SA (sing @d) (sing @d))
instance SingI d =>
SingI1 (ASym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing (s :: Sing (d :: b))
= singFun2 @(ASym2 (d :: a) (d :: b)) (SA (sing @d) s)
instance SingI2 (ASym2 :: a
-> b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))
= singFun2 @(ASym2 (d :: a) (d :: b)) (SA s s)
instance (SingI d, SingI d, SingI d) =>
SingI (ASym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where
sing
= singFun1
@(ASym3 (d :: a) (d :: b) (d :: c))
(SA (sing @d) (sing @d) (sing @d))
instance (SingI d, SingI d) =>
SingI1 (ASym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where
liftSing (s :: Sing (d :: c))
= singFun1
@(ASym3 (d :: a) (d :: b) (d :: c)) (SA (sing @d) (sing @d) s)
instance SingI d =>
SingI2 (ASym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where
liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))
= singFun1 @(ASym3 (d :: a) (d :: b) (d :: c)) (SA (sing @d) s s)
instance (SingI n, SingI n, SingI n, SingI n) =>
SingI (B (n :: a) (n :: b) (n :: c) (n :: d)) where
sing = SB sing sing sing sing
instance (SingI n, SingI n, SingI n) =>
SingI1 (B (n :: a) (n :: b) (n :: c)) where
liftSing = SB sing sing sing
instance (SingI n, SingI n) => SingI2 (B (n :: a) (n :: b)) where
liftSing2 = SB sing sing
instance SingI (BSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where
sing = singFun4 @BSym0 SB
instance SingI d =>
SingI (BSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
sing = singFun3 @(BSym1 (d :: a)) (SB (sing @d))
instance SingI1 (BSym1 :: a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
liftSing (s :: Sing (d :: a)) = singFun3 @(BSym1 (d :: a)) (SB s)
instance (SingI d, SingI d) =>
SingI (BSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where
sing = singFun2 @(BSym2 (d :: a) (d :: b)) (SB (sing @d) (sing @d))
instance SingI d =>
SingI1 (BSym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing (s :: Sing (d :: b))
= singFun2 @(BSym2 (d :: a) (d :: b)) (SB (sing @d) s)
instance SingI2 (BSym2 :: a
-> b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))
= singFun2 @(BSym2 (d :: a) (d :: b)) (SB s s)
instance (SingI d, SingI d, SingI d) =>
SingI (BSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where
sing
= singFun1
@(BSym3 (d :: a) (d :: b) (d :: c))
(SB (sing @d) (sing @d) (sing @d))
instance (SingI d, SingI d) =>
SingI1 (BSym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where
liftSing (s :: Sing (d :: c))
= singFun1
@(BSym3 (d :: a) (d :: b) (d :: c)) (SB (sing @d) (sing @d) s)
instance SingI d =>
SingI2 (BSym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where
liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))
= singFun1 @(BSym3 (d :: a) (d :: b) (d :: c)) (SB (sing @d) s s)
instance (SingI n, SingI n, SingI n, SingI n) =>
SingI (C (n :: a) (n :: b) (n :: c) (n :: d)) where
sing = SC sing sing sing sing
instance (SingI n, SingI n, SingI n) =>
SingI1 (C (n :: a) (n :: b) (n :: c)) where
liftSing = SC sing sing sing
instance (SingI n, SingI n) => SingI2 (C (n :: a) (n :: b)) where
liftSing2 = SC sing sing
instance SingI (CSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where
sing = singFun4 @CSym0 SC
instance SingI d =>
SingI (CSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
sing = singFun3 @(CSym1 (d :: a)) (SC (sing @d))
instance SingI1 (CSym1 :: a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
liftSing (s :: Sing (d :: a)) = singFun3 @(CSym1 (d :: a)) (SC s)
instance (SingI d, SingI d) =>
SingI (CSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where
sing = singFun2 @(CSym2 (d :: a) (d :: b)) (SC (sing @d) (sing @d))
instance SingI d =>
SingI1 (CSym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing (s :: Sing (d :: b))
= singFun2 @(CSym2 (d :: a) (d :: b)) (SC (sing @d) s)
instance SingI2 (CSym2 :: a
-> b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))
= singFun2 @(CSym2 (d :: a) (d :: b)) (SC s s)
instance (SingI d, SingI d, SingI d) =>
SingI (CSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where
sing
= singFun1
@(CSym3 (d :: a) (d :: b) (d :: c))
(SC (sing @d) (sing @d) (sing @d))
instance (SingI d, SingI d) =>
SingI1 (CSym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where
liftSing (s :: Sing (d :: c))
= singFun1
@(CSym3 (d :: a) (d :: b) (d :: c)) (SC (sing @d) (sing @d) s)
instance SingI d =>
SingI2 (CSym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where
liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))
= singFun1 @(CSym3 (d :: a) (d :: b) (d :: c)) (SC (sing @d) s s)
instance (SingI n, SingI n, SingI n, SingI n) =>
SingI (D (n :: a) (n :: b) (n :: c) (n :: d)) where
sing = SD sing sing sing sing
instance (SingI n, SingI n, SingI n) =>
SingI1 (D (n :: a) (n :: b) (n :: c)) where
liftSing = SD sing sing sing
instance (SingI n, SingI n) => SingI2 (D (n :: a) (n :: b)) where
liftSing2 = SD sing sing
instance SingI (DSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where
sing = singFun4 @DSym0 SD
instance SingI d =>
SingI (DSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
sing = singFun3 @(DSym1 (d :: a)) (SD (sing @d))
instance SingI1 (DSym1 :: a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
liftSing (s :: Sing (d :: a)) = singFun3 @(DSym1 (d :: a)) (SD s)
instance (SingI d, SingI d) =>
SingI (DSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where
sing = singFun2 @(DSym2 (d :: a) (d :: b)) (SD (sing @d) (sing @d))
instance SingI d =>
SingI1 (DSym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing (s :: Sing (d :: b))
= singFun2 @(DSym2 (d :: a) (d :: b)) (SD (sing @d) s)
instance SingI2 (DSym2 :: a
-> b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))
= singFun2 @(DSym2 (d :: a) (d :: b)) (SD s s)
instance (SingI d, SingI d, SingI d) =>
SingI (DSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where
sing
= singFun1
@(DSym3 (d :: a) (d :: b) (d :: c))
(SD (sing @d) (sing @d) (sing @d))
instance (SingI d, SingI d) =>
SingI1 (DSym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where
liftSing (s :: Sing (d :: c))
= singFun1
@(DSym3 (d :: a) (d :: b) (d :: c)) (SD (sing @d) (sing @d) s)
instance SingI d =>
SingI2 (DSym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where
liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))
= singFun1 @(DSym3 (d :: a) (d :: b) (d :: c)) (SD (sing @d) s s)
instance (SingI n, SingI n, SingI n, SingI n) =>
SingI (E (n :: a) (n :: b) (n :: c) (n :: d)) where
sing = SE sing sing sing sing
instance (SingI n, SingI n, SingI n) =>
SingI1 (E (n :: a) (n :: b) (n :: c)) where
liftSing = SE sing sing sing
instance (SingI n, SingI n) => SingI2 (E (n :: a) (n :: b)) where
liftSing2 = SE sing sing
instance SingI (ESym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where
sing = singFun4 @ESym0 SE
instance SingI d =>
SingI (ESym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
sing = singFun3 @(ESym1 (d :: a)) (SE (sing @d))
instance SingI1 (ESym1 :: a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
liftSing (s :: Sing (d :: a)) = singFun3 @(ESym1 (d :: a)) (SE s)
instance (SingI d, SingI d) =>
SingI (ESym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where
sing = singFun2 @(ESym2 (d :: a) (d :: b)) (SE (sing @d) (sing @d))
instance SingI d =>
SingI1 (ESym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing (s :: Sing (d :: b))
= singFun2 @(ESym2 (d :: a) (d :: b)) (SE (sing @d) s)
instance SingI2 (ESym2 :: a
-> b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))
= singFun2 @(ESym2 (d :: a) (d :: b)) (SE s s)
instance (SingI d, SingI d, SingI d) =>
SingI (ESym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where
sing
= singFun1
@(ESym3 (d :: a) (d :: b) (d :: c))
(SE (sing @d) (sing @d) (sing @d))
instance (SingI d, SingI d) =>
SingI1 (ESym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where
liftSing (s :: Sing (d :: c))
= singFun1
@(ESym3 (d :: a) (d :: b) (d :: c)) (SE (sing @d) (sing @d) s)
instance SingI d =>
SingI2 (ESym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where
liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))
= singFun1 @(ESym3 (d :: a) (d :: b) (d :: c)) (SE (sing @d) s s)
instance (SingI n, SingI n, SingI n, SingI n) =>
SingI (F (n :: a) (n :: b) (n :: c) (n :: d)) where
sing = SF sing sing sing sing
instance (SingI n, SingI n, SingI n) =>
SingI1 (F (n :: a) (n :: b) (n :: c)) where
liftSing = SF sing sing sing
instance (SingI n, SingI n) => SingI2 (F (n :: a) (n :: b)) where
liftSing2 = SF sing sing
instance SingI (FSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where
sing = singFun4 @FSym0 SF
instance SingI d =>
SingI (FSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
sing = singFun3 @(FSym1 (d :: a)) (SF (sing @d))
instance SingI1 (FSym1 :: a
-> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where
liftSing (s :: Sing (d :: a)) = singFun3 @(FSym1 (d :: a)) (SF s)
instance (SingI d, SingI d) =>
SingI (FSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where
sing = singFun2 @(FSym2 (d :: a) (d :: b)) (SF (sing @d) (sing @d))
instance SingI d =>
SingI1 (FSym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing (s :: Sing (d :: b))
= singFun2 @(FSym2 (d :: a) (d :: b)) (SF (sing @d) s)
instance SingI2 (FSym2 :: a
-> b -> (~>) c ((~>) d (Foo a b c d))) where
liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))
= singFun2 @(FSym2 (d :: a) (d :: b)) (SF s s)
instance (SingI d, SingI d, SingI d) =>
SingI (FSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where
sing
= singFun1
@(FSym3 (d :: a) (d :: b) (d :: c))
(SF (sing @d) (sing @d) (sing @d))
instance (SingI d, SingI d) =>
SingI1 (FSym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where
liftSing (s :: Sing (d :: c))
= singFun1
@(FSym3 (d :: a) (d :: b) (d :: c)) (SF (sing @d) (sing @d) s)
instance SingI d =>
SingI2 (FSym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where
liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))
= singFun1 @(FSym3 (d :: a) (d :: b) (d :: c)) (SF (sing @d) s s)