diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,11 @@
 Changelog for singletons project
 ================================
 
+1.1.1
+-----
+
+Update testsuite to work with th-desugar-1.5.2. No functional changes.
+
 1.1
 ---
 
diff --git a/singletons.cabal b/singletons.cabal
--- a/singletons.cabal
+++ b/singletons.cabal
@@ -1,5 +1,5 @@
 name:           singletons
-version:        1.1
+version:        1.1.1
                 -- Remember to bump version in the Makefile as well
 cabal-version:  >= 1.10
 synopsis:       A framework for generating singleton types
@@ -16,10 +16,6 @@
                     tests/compile-and-dump/InsertionSort/*.hs,
                     tests/compile-and-dump/Promote/*.hs,
                     tests/compile-and-dump/Singletons/*.hs
-                    tests/compile-and-dump/GradingClient/*.ghc76.template,
-                    tests/compile-and-dump/InsertionSort/*.ghc76.template,
-                    tests/compile-and-dump/Promote/*.ghc76.template,
-                    tests/compile-and-dump/Singletons/*.ghc76.template,
                     tests/compile-and-dump/GradingClient/*.ghc78.template,
                     tests/compile-and-dump/InsertionSort/*.ghc78.template,
                     tests/compile-and-dump/Promote/*.ghc78.template,
@@ -35,14 +31,14 @@
     at the Haskell Symposium, 2012.
     (<http://www.cis.upenn.edu/~eir/papers/2012/singletons/paper.pdf>)
 
-    The Haddock documentation does not build with the Haddock distributed with
-    GHC 7.6.x, but it does build with 7.8.2. Please see links from the project
-    homepage to find the built documentation.
+    Version 1.0 and onwards works a lot harder to promote functions. See the
+    paper published at Haskell Symposium, 2014:
+    <http://www.cis.upenn.edu/~eir/papers/2014/promotion/promotion.pdf>.
 
 source-repository this
   type:     git
   location: https://github.com/goldfirere/singletons.git
-  tag:      v1.1
+  tag:      v1.1.1
 
 library
   hs-source-dirs:     src
@@ -50,7 +46,7 @@
                       mtl >= 2.1.1,
                       template-haskell,
                       containers >= 0.5,
-                      th-desugar >= 1.5 && < 1.6
+                      th-desugar >= 1.5.2 && < 1.6
   default-language:   Haskell2010
   default-extensions: TemplateHaskell
         -- TemplateHaskell must be listed in cabal file to work with
diff --git a/tests/compile-and-dump/GradingClient/Database.ghc76.template b/tests/compile-and-dump/GradingClient/Database.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/GradingClient/Database.ghc76.template
+++ /dev/null
@@ -1,4543 +0,0 @@
-GradingClient/Database.hs:0:0: Splicing declarations
-    singletons
-      [d| data Nat
-            = Zero | Succ Nat
-            deriving (Eq, Ord) |]
-  ======>
-    GradingClient/Database.hs:(0,0)-(0,0)
-    data Nat
-      = Zero | Succ Nat
-      deriving (Eq, Ord)
-    type instance (:==) Zero Zero = TrueSym0
-    type instance (:==) Zero (Succ b) = FalseSym0
-    type instance (:==) (Succ a) Zero = FalseSym0
-    type instance (:==) (Succ a) (Succ b) = :== a b
-    type NatTyCtor = Nat
-    type NatTyCtorSym0 = NatTyCtor
-    type ZeroSym0 = Zero
-    data SuccSym0 (k :: TyFun Nat Nat)
-    type instance Apply SuccSym0 a = Succ a
-    data instance Sing (z :: Nat)
-      = z ~ Zero => SZero |
-        forall (n :: Nat). z ~ Succ n => SSucc (Sing n)
-    type SNat (z :: Nat) = Sing z
-    instance SingKind (KProxy :: KProxy Nat) where
-      type instance DemoteRep (KProxy :: KProxy Nat) = Nat
-      fromSing SZero = Zero
-      fromSing (SSucc b) = Succ (fromSing b)
-      toSing Zero = SomeSing SZero
-      toSing (Succ b)
-        = case toSing b :: SomeSing (KProxy :: KProxy Nat) of {
-            SomeSing c -> SomeSing (SSucc c) }
-    instance SEq (KProxy :: KProxy Nat) where
-      %:== SZero SZero = STrue
-      %:== SZero (SSucc _) = SFalse
-      %:== (SSucc _) SZero = SFalse
-      %:== (SSucc a) (SSucc b) = (%:==) a b
-    instance SDecide (KProxy :: KProxy Nat) where
-      %~ SZero SZero = Proved Refl
-      %~ SZero (SSucc _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SSucc _) SZero
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SSucc a) (SSucc b)
-        = case (%~) a b of {
-            Proved Refl -> Proved Refl
-            Disproved contra -> Disproved (\ Refl -> contra Refl) }
-    instance SingI Zero where
-      sing = SZero
-    instance SingI n => SingI (Succ (n :: Nat)) where
-      sing = SSucc sing
-GradingClient/Database.hs:0:0: Splicing declarations
-    singletons
-      [d| append :: Schema -> Schema -> Schema
-          append (Sch s1) (Sch s2) = Sch (s1 ++ s2)
-          attrNotIn :: Attribute -> Schema -> Bool
-          attrNotIn _ (Sch []) = True
-          attrNotIn (Attr name u) (Sch ((Attr name' _) : t))
-            = (name /= name') && (attrNotIn (Attr name u) (Sch t))
-          disjoint :: Schema -> Schema -> Bool
-          disjoint (Sch []) _ = True
-          disjoint (Sch (h : t)) s = (attrNotIn h s) && (disjoint (Sch t) s)
-          occurs :: [AChar] -> Schema -> Bool
-          occurs _ (Sch []) = False
-          occurs name (Sch ((Attr name' _) : attrs))
-            = name == name' || occurs name (Sch attrs)
-          lookup :: [AChar] -> Schema -> U
-          lookup _ (Sch []) = undefined
-          lookup name (Sch ((Attr name' u) : attrs))
-            = if name == name' then u else lookup name (Sch attrs)
-          
-          data U
-            = BOOL | STRING | NAT | VEC U Nat
-            deriving (Read, Eq, Show)
-          data AChar
-            = CA |
-              CB |
-              CC |
-              CD |
-              CE |
-              CF |
-              CG |
-              CH |
-              CI |
-              CJ |
-              CK |
-              CL |
-              CM |
-              CN |
-              CO |
-              CP |
-              CQ |
-              CR |
-              CS |
-              CT |
-              CU |
-              CV |
-              CW |
-              CX |
-              CY |
-              CZ
-            deriving (Read, Show, Eq)
-          data Attribute = Attr [AChar] U
-          data Schema = Sch [Attribute] |]
-  ======>
-    GradingClient/Database.hs:(0,0)-(0,0)
-    data U
-      = BOOL | STRING | NAT | VEC U Nat
-      deriving (Read, Eq, Show)
-    data AChar
-      = CA |
-        CB |
-        CC |
-        CD |
-        CE |
-        CF |
-        CG |
-        CH |
-        CI |
-        CJ |
-        CK |
-        CL |
-        CM |
-        CN |
-        CO |
-        CP |
-        CQ |
-        CR |
-        CS |
-        CT |
-        CU |
-        CV |
-        CW |
-        CX |
-        CY |
-        CZ
-      deriving (Read, Show, Eq)
-    data Attribute = Attr [AChar] U
-    data Schema = Sch [Attribute]
-    append :: Schema -> Schema -> Schema
-    append (Sch s1) (Sch s2) = Sch (s1 ++ s2)
-    attrNotIn :: Attribute -> Schema -> Bool
-    attrNotIn _ (Sch GHC.Types.[]) = True
-    attrNotIn (Attr name u) (Sch ((Attr name' _) GHC.Types.: t))
-      = ((name /= name') && (attrNotIn (Attr name u) (Sch t)))
-    disjoint :: Schema -> Schema -> Bool
-    disjoint (Sch GHC.Types.[]) _ = True
-    disjoint (Sch (h GHC.Types.: t)) s
-      = ((attrNotIn h s) && (disjoint (Sch t) s))
-    occurs :: [AChar] -> Schema -> Bool
-    occurs _ (Sch GHC.Types.[]) = False
-    occurs name (Sch ((Attr name' _) GHC.Types.: attrs))
-      = ((name == name') || (occurs name (Sch attrs)))
-    lookup :: [AChar] -> Schema -> U
-    lookup _ (Sch GHC.Types.[]) = undefined
-    lookup name (Sch ((Attr name' u) GHC.Types.: attrs))
-      = if (name == name') then u else lookup name (Sch attrs)
-    type instance (:==) BOOL BOOL = TrueSym0
-    type instance (:==) BOOL STRING = FalseSym0
-    type instance (:==) BOOL NAT = FalseSym0
-    type instance (:==) BOOL (VEC b b) = FalseSym0
-    type instance (:==) STRING BOOL = FalseSym0
-    type instance (:==) STRING STRING = TrueSym0
-    type instance (:==) STRING NAT = FalseSym0
-    type instance (:==) STRING (VEC b b) = FalseSym0
-    type instance (:==) NAT BOOL = FalseSym0
-    type instance (:==) NAT STRING = FalseSym0
-    type instance (:==) NAT NAT = TrueSym0
-    type instance (:==) NAT (VEC b b) = FalseSym0
-    type instance (:==) (VEC a a) BOOL = FalseSym0
-    type instance (:==) (VEC a a) STRING = FalseSym0
-    type instance (:==) (VEC a a) NAT = FalseSym0
-    type instance (:==) (VEC a a) (VEC b b) = :&& (:== a b) (:== a b)
-    type UTyCtor = U
-    type UTyCtorSym0 = UTyCtor
-    type BOOLSym0 = BOOL
-    type STRINGSym0 = STRING
-    type NATSym0 = NAT
-    data VECSym1 (l :: U) (l :: TyFun Nat U)
-    data VECSym0 (k :: TyFun U (TyFun Nat U -> *))
-    type instance Apply (VECSym1 a) a = VEC a a
-    type instance Apply VECSym0 a = VECSym1 a
-    type instance (:==) CA CA = TrueSym0
-    type instance (:==) CA CB = FalseSym0
-    type instance (:==) CA CC = FalseSym0
-    type instance (:==) CA CD = FalseSym0
-    type instance (:==) CA CE = FalseSym0
-    type instance (:==) CA CF = FalseSym0
-    type instance (:==) CA CG = FalseSym0
-    type instance (:==) CA CH = FalseSym0
-    type instance (:==) CA CI = FalseSym0
-    type instance (:==) CA CJ = FalseSym0
-    type instance (:==) CA CK = FalseSym0
-    type instance (:==) CA CL = FalseSym0
-    type instance (:==) CA CM = FalseSym0
-    type instance (:==) CA CN = FalseSym0
-    type instance (:==) CA CO = FalseSym0
-    type instance (:==) CA CP = FalseSym0
-    type instance (:==) CA CQ = FalseSym0
-    type instance (:==) CA CR = FalseSym0
-    type instance (:==) CA CS = FalseSym0
-    type instance (:==) CA CT = FalseSym0
-    type instance (:==) CA CU = FalseSym0
-    type instance (:==) CA CV = FalseSym0
-    type instance (:==) CA CW = FalseSym0
-    type instance (:==) CA CX = FalseSym0
-    type instance (:==) CA CY = FalseSym0
-    type instance (:==) CA CZ = FalseSym0
-    type instance (:==) CB CA = FalseSym0
-    type instance (:==) CB CB = TrueSym0
-    type instance (:==) CB CC = FalseSym0
-    type instance (:==) CB CD = FalseSym0
-    type instance (:==) CB CE = FalseSym0
-    type instance (:==) CB CF = FalseSym0
-    type instance (:==) CB CG = FalseSym0
-    type instance (:==) CB CH = FalseSym0
-    type instance (:==) CB CI = FalseSym0
-    type instance (:==) CB CJ = FalseSym0
-    type instance (:==) CB CK = FalseSym0
-    type instance (:==) CB CL = FalseSym0
-    type instance (:==) CB CM = FalseSym0
-    type instance (:==) CB CN = FalseSym0
-    type instance (:==) CB CO = FalseSym0
-    type instance (:==) CB CP = FalseSym0
-    type instance (:==) CB CQ = FalseSym0
-    type instance (:==) CB CR = FalseSym0
-    type instance (:==) CB CS = FalseSym0
-    type instance (:==) CB CT = FalseSym0
-    type instance (:==) CB CU = FalseSym0
-    type instance (:==) CB CV = FalseSym0
-    type instance (:==) CB CW = FalseSym0
-    type instance (:==) CB CX = FalseSym0
-    type instance (:==) CB CY = FalseSym0
-    type instance (:==) CB CZ = FalseSym0
-    type instance (:==) CC CA = FalseSym0
-    type instance (:==) CC CB = FalseSym0
-    type instance (:==) CC CC = TrueSym0
-    type instance (:==) CC CD = FalseSym0
-    type instance (:==) CC CE = FalseSym0
-    type instance (:==) CC CF = FalseSym0
-    type instance (:==) CC CG = FalseSym0
-    type instance (:==) CC CH = FalseSym0
-    type instance (:==) CC CI = FalseSym0
-    type instance (:==) CC CJ = FalseSym0
-    type instance (:==) CC CK = FalseSym0
-    type instance (:==) CC CL = FalseSym0
-    type instance (:==) CC CM = FalseSym0
-    type instance (:==) CC CN = FalseSym0
-    type instance (:==) CC CO = FalseSym0
-    type instance (:==) CC CP = FalseSym0
-    type instance (:==) CC CQ = FalseSym0
-    type instance (:==) CC CR = FalseSym0
-    type instance (:==) CC CS = FalseSym0
-    type instance (:==) CC CT = FalseSym0
-    type instance (:==) CC CU = FalseSym0
-    type instance (:==) CC CV = FalseSym0
-    type instance (:==) CC CW = FalseSym0
-    type instance (:==) CC CX = FalseSym0
-    type instance (:==) CC CY = FalseSym0
-    type instance (:==) CC CZ = FalseSym0
-    type instance (:==) CD CA = FalseSym0
-    type instance (:==) CD CB = FalseSym0
-    type instance (:==) CD CC = FalseSym0
-    type instance (:==) CD CD = TrueSym0
-    type instance (:==) CD CE = FalseSym0
-    type instance (:==) CD CF = FalseSym0
-    type instance (:==) CD CG = FalseSym0
-    type instance (:==) CD CH = FalseSym0
-    type instance (:==) CD CI = FalseSym0
-    type instance (:==) CD CJ = FalseSym0
-    type instance (:==) CD CK = FalseSym0
-    type instance (:==) CD CL = FalseSym0
-    type instance (:==) CD CM = FalseSym0
-    type instance (:==) CD CN = FalseSym0
-    type instance (:==) CD CO = FalseSym0
-    type instance (:==) CD CP = FalseSym0
-    type instance (:==) CD CQ = FalseSym0
-    type instance (:==) CD CR = FalseSym0
-    type instance (:==) CD CS = FalseSym0
-    type instance (:==) CD CT = FalseSym0
-    type instance (:==) CD CU = FalseSym0
-    type instance (:==) CD CV = FalseSym0
-    type instance (:==) CD CW = FalseSym0
-    type instance (:==) CD CX = FalseSym0
-    type instance (:==) CD CY = FalseSym0
-    type instance (:==) CD CZ = FalseSym0
-    type instance (:==) CE CA = FalseSym0
-    type instance (:==) CE CB = FalseSym0
-    type instance (:==) CE CC = FalseSym0
-    type instance (:==) CE CD = FalseSym0
-    type instance (:==) CE CE = TrueSym0
-    type instance (:==) CE CF = FalseSym0
-    type instance (:==) CE CG = FalseSym0
-    type instance (:==) CE CH = FalseSym0
-    type instance (:==) CE CI = FalseSym0
-    type instance (:==) CE CJ = FalseSym0
-    type instance (:==) CE CK = FalseSym0
-    type instance (:==) CE CL = FalseSym0
-    type instance (:==) CE CM = FalseSym0
-    type instance (:==) CE CN = FalseSym0
-    type instance (:==) CE CO = FalseSym0
-    type instance (:==) CE CP = FalseSym0
-    type instance (:==) CE CQ = FalseSym0
-    type instance (:==) CE CR = FalseSym0
-    type instance (:==) CE CS = FalseSym0
-    type instance (:==) CE CT = FalseSym0
-    type instance (:==) CE CU = FalseSym0
-    type instance (:==) CE CV = FalseSym0
-    type instance (:==) CE CW = FalseSym0
-    type instance (:==) CE CX = FalseSym0
-    type instance (:==) CE CY = FalseSym0
-    type instance (:==) CE CZ = FalseSym0
-    type instance (:==) CF CA = FalseSym0
-    type instance (:==) CF CB = FalseSym0
-    type instance (:==) CF CC = FalseSym0
-    type instance (:==) CF CD = FalseSym0
-    type instance (:==) CF CE = FalseSym0
-    type instance (:==) CF CF = TrueSym0
-    type instance (:==) CF CG = FalseSym0
-    type instance (:==) CF CH = FalseSym0
-    type instance (:==) CF CI = FalseSym0
-    type instance (:==) CF CJ = FalseSym0
-    type instance (:==) CF CK = FalseSym0
-    type instance (:==) CF CL = FalseSym0
-    type instance (:==) CF CM = FalseSym0
-    type instance (:==) CF CN = FalseSym0
-    type instance (:==) CF CO = FalseSym0
-    type instance (:==) CF CP = FalseSym0
-    type instance (:==) CF CQ = FalseSym0
-    type instance (:==) CF CR = FalseSym0
-    type instance (:==) CF CS = FalseSym0
-    type instance (:==) CF CT = FalseSym0
-    type instance (:==) CF CU = FalseSym0
-    type instance (:==) CF CV = FalseSym0
-    type instance (:==) CF CW = FalseSym0
-    type instance (:==) CF CX = FalseSym0
-    type instance (:==) CF CY = FalseSym0
-    type instance (:==) CF CZ = FalseSym0
-    type instance (:==) CG CA = FalseSym0
-    type instance (:==) CG CB = FalseSym0
-    type instance (:==) CG CC = FalseSym0
-    type instance (:==) CG CD = FalseSym0
-    type instance (:==) CG CE = FalseSym0
-    type instance (:==) CG CF = FalseSym0
-    type instance (:==) CG CG = TrueSym0
-    type instance (:==) CG CH = FalseSym0
-    type instance (:==) CG CI = FalseSym0
-    type instance (:==) CG CJ = FalseSym0
-    type instance (:==) CG CK = FalseSym0
-    type instance (:==) CG CL = FalseSym0
-    type instance (:==) CG CM = FalseSym0
-    type instance (:==) CG CN = FalseSym0
-    type instance (:==) CG CO = FalseSym0
-    type instance (:==) CG CP = FalseSym0
-    type instance (:==) CG CQ = FalseSym0
-    type instance (:==) CG CR = FalseSym0
-    type instance (:==) CG CS = FalseSym0
-    type instance (:==) CG CT = FalseSym0
-    type instance (:==) CG CU = FalseSym0
-    type instance (:==) CG CV = FalseSym0
-    type instance (:==) CG CW = FalseSym0
-    type instance (:==) CG CX = FalseSym0
-    type instance (:==) CG CY = FalseSym0
-    type instance (:==) CG CZ = FalseSym0
-    type instance (:==) CH CA = FalseSym0
-    type instance (:==) CH CB = FalseSym0
-    type instance (:==) CH CC = FalseSym0
-    type instance (:==) CH CD = FalseSym0
-    type instance (:==) CH CE = FalseSym0
-    type instance (:==) CH CF = FalseSym0
-    type instance (:==) CH CG = FalseSym0
-    type instance (:==) CH CH = TrueSym0
-    type instance (:==) CH CI = FalseSym0
-    type instance (:==) CH CJ = FalseSym0
-    type instance (:==) CH CK = FalseSym0
-    type instance (:==) CH CL = FalseSym0
-    type instance (:==) CH CM = FalseSym0
-    type instance (:==) CH CN = FalseSym0
-    type instance (:==) CH CO = FalseSym0
-    type instance (:==) CH CP = FalseSym0
-    type instance (:==) CH CQ = FalseSym0
-    type instance (:==) CH CR = FalseSym0
-    type instance (:==) CH CS = FalseSym0
-    type instance (:==) CH CT = FalseSym0
-    type instance (:==) CH CU = FalseSym0
-    type instance (:==) CH CV = FalseSym0
-    type instance (:==) CH CW = FalseSym0
-    type instance (:==) CH CX = FalseSym0
-    type instance (:==) CH CY = FalseSym0
-    type instance (:==) CH CZ = FalseSym0
-    type instance (:==) CI CA = FalseSym0
-    type instance (:==) CI CB = FalseSym0
-    type instance (:==) CI CC = FalseSym0
-    type instance (:==) CI CD = FalseSym0
-    type instance (:==) CI CE = FalseSym0
-    type instance (:==) CI CF = FalseSym0
-    type instance (:==) CI CG = FalseSym0
-    type instance (:==) CI CH = FalseSym0
-    type instance (:==) CI CI = TrueSym0
-    type instance (:==) CI CJ = FalseSym0
-    type instance (:==) CI CK = FalseSym0
-    type instance (:==) CI CL = FalseSym0
-    type instance (:==) CI CM = FalseSym0
-    type instance (:==) CI CN = FalseSym0
-    type instance (:==) CI CO = FalseSym0
-    type instance (:==) CI CP = FalseSym0
-    type instance (:==) CI CQ = FalseSym0
-    type instance (:==) CI CR = FalseSym0
-    type instance (:==) CI CS = FalseSym0
-    type instance (:==) CI CT = FalseSym0
-    type instance (:==) CI CU = FalseSym0
-    type instance (:==) CI CV = FalseSym0
-    type instance (:==) CI CW = FalseSym0
-    type instance (:==) CI CX = FalseSym0
-    type instance (:==) CI CY = FalseSym0
-    type instance (:==) CI CZ = FalseSym0
-    type instance (:==) CJ CA = FalseSym0
-    type instance (:==) CJ CB = FalseSym0
-    type instance (:==) CJ CC = FalseSym0
-    type instance (:==) CJ CD = FalseSym0
-    type instance (:==) CJ CE = FalseSym0
-    type instance (:==) CJ CF = FalseSym0
-    type instance (:==) CJ CG = FalseSym0
-    type instance (:==) CJ CH = FalseSym0
-    type instance (:==) CJ CI = FalseSym0
-    type instance (:==) CJ CJ = TrueSym0
-    type instance (:==) CJ CK = FalseSym0
-    type instance (:==) CJ CL = FalseSym0
-    type instance (:==) CJ CM = FalseSym0
-    type instance (:==) CJ CN = FalseSym0
-    type instance (:==) CJ CO = FalseSym0
-    type instance (:==) CJ CP = FalseSym0
-    type instance (:==) CJ CQ = FalseSym0
-    type instance (:==) CJ CR = FalseSym0
-    type instance (:==) CJ CS = FalseSym0
-    type instance (:==) CJ CT = FalseSym0
-    type instance (:==) CJ CU = FalseSym0
-    type instance (:==) CJ CV = FalseSym0
-    type instance (:==) CJ CW = FalseSym0
-    type instance (:==) CJ CX = FalseSym0
-    type instance (:==) CJ CY = FalseSym0
-    type instance (:==) CJ CZ = FalseSym0
-    type instance (:==) CK CA = FalseSym0
-    type instance (:==) CK CB = FalseSym0
-    type instance (:==) CK CC = FalseSym0
-    type instance (:==) CK CD = FalseSym0
-    type instance (:==) CK CE = FalseSym0
-    type instance (:==) CK CF = FalseSym0
-    type instance (:==) CK CG = FalseSym0
-    type instance (:==) CK CH = FalseSym0
-    type instance (:==) CK CI = FalseSym0
-    type instance (:==) CK CJ = FalseSym0
-    type instance (:==) CK CK = TrueSym0
-    type instance (:==) CK CL = FalseSym0
-    type instance (:==) CK CM = FalseSym0
-    type instance (:==) CK CN = FalseSym0
-    type instance (:==) CK CO = FalseSym0
-    type instance (:==) CK CP = FalseSym0
-    type instance (:==) CK CQ = FalseSym0
-    type instance (:==) CK CR = FalseSym0
-    type instance (:==) CK CS = FalseSym0
-    type instance (:==) CK CT = FalseSym0
-    type instance (:==) CK CU = FalseSym0
-    type instance (:==) CK CV = FalseSym0
-    type instance (:==) CK CW = FalseSym0
-    type instance (:==) CK CX = FalseSym0
-    type instance (:==) CK CY = FalseSym0
-    type instance (:==) CK CZ = FalseSym0
-    type instance (:==) CL CA = FalseSym0
-    type instance (:==) CL CB = FalseSym0
-    type instance (:==) CL CC = FalseSym0
-    type instance (:==) CL CD = FalseSym0
-    type instance (:==) CL CE = FalseSym0
-    type instance (:==) CL CF = FalseSym0
-    type instance (:==) CL CG = FalseSym0
-    type instance (:==) CL CH = FalseSym0
-    type instance (:==) CL CI = FalseSym0
-    type instance (:==) CL CJ = FalseSym0
-    type instance (:==) CL CK = FalseSym0
-    type instance (:==) CL CL = TrueSym0
-    type instance (:==) CL CM = FalseSym0
-    type instance (:==) CL CN = FalseSym0
-    type instance (:==) CL CO = FalseSym0
-    type instance (:==) CL CP = FalseSym0
-    type instance (:==) CL CQ = FalseSym0
-    type instance (:==) CL CR = FalseSym0
-    type instance (:==) CL CS = FalseSym0
-    type instance (:==) CL CT = FalseSym0
-    type instance (:==) CL CU = FalseSym0
-    type instance (:==) CL CV = FalseSym0
-    type instance (:==) CL CW = FalseSym0
-    type instance (:==) CL CX = FalseSym0
-    type instance (:==) CL CY = FalseSym0
-    type instance (:==) CL CZ = FalseSym0
-    type instance (:==) CM CA = FalseSym0
-    type instance (:==) CM CB = FalseSym0
-    type instance (:==) CM CC = FalseSym0
-    type instance (:==) CM CD = FalseSym0
-    type instance (:==) CM CE = FalseSym0
-    type instance (:==) CM CF = FalseSym0
-    type instance (:==) CM CG = FalseSym0
-    type instance (:==) CM CH = FalseSym0
-    type instance (:==) CM CI = FalseSym0
-    type instance (:==) CM CJ = FalseSym0
-    type instance (:==) CM CK = FalseSym0
-    type instance (:==) CM CL = FalseSym0
-    type instance (:==) CM CM = TrueSym0
-    type instance (:==) CM CN = FalseSym0
-    type instance (:==) CM CO = FalseSym0
-    type instance (:==) CM CP = FalseSym0
-    type instance (:==) CM CQ = FalseSym0
-    type instance (:==) CM CR = FalseSym0
-    type instance (:==) CM CS = FalseSym0
-    type instance (:==) CM CT = FalseSym0
-    type instance (:==) CM CU = FalseSym0
-    type instance (:==) CM CV = FalseSym0
-    type instance (:==) CM CW = FalseSym0
-    type instance (:==) CM CX = FalseSym0
-    type instance (:==) CM CY = FalseSym0
-    type instance (:==) CM CZ = FalseSym0
-    type instance (:==) CN CA = FalseSym0
-    type instance (:==) CN CB = FalseSym0
-    type instance (:==) CN CC = FalseSym0
-    type instance (:==) CN CD = FalseSym0
-    type instance (:==) CN CE = FalseSym0
-    type instance (:==) CN CF = FalseSym0
-    type instance (:==) CN CG = FalseSym0
-    type instance (:==) CN CH = FalseSym0
-    type instance (:==) CN CI = FalseSym0
-    type instance (:==) CN CJ = FalseSym0
-    type instance (:==) CN CK = FalseSym0
-    type instance (:==) CN CL = FalseSym0
-    type instance (:==) CN CM = FalseSym0
-    type instance (:==) CN CN = TrueSym0
-    type instance (:==) CN CO = FalseSym0
-    type instance (:==) CN CP = FalseSym0
-    type instance (:==) CN CQ = FalseSym0
-    type instance (:==) CN CR = FalseSym0
-    type instance (:==) CN CS = FalseSym0
-    type instance (:==) CN CT = FalseSym0
-    type instance (:==) CN CU = FalseSym0
-    type instance (:==) CN CV = FalseSym0
-    type instance (:==) CN CW = FalseSym0
-    type instance (:==) CN CX = FalseSym0
-    type instance (:==) CN CY = FalseSym0
-    type instance (:==) CN CZ = FalseSym0
-    type instance (:==) CO CA = FalseSym0
-    type instance (:==) CO CB = FalseSym0
-    type instance (:==) CO CC = FalseSym0
-    type instance (:==) CO CD = FalseSym0
-    type instance (:==) CO CE = FalseSym0
-    type instance (:==) CO CF = FalseSym0
-    type instance (:==) CO CG = FalseSym0
-    type instance (:==) CO CH = FalseSym0
-    type instance (:==) CO CI = FalseSym0
-    type instance (:==) CO CJ = FalseSym0
-    type instance (:==) CO CK = FalseSym0
-    type instance (:==) CO CL = FalseSym0
-    type instance (:==) CO CM = FalseSym0
-    type instance (:==) CO CN = FalseSym0
-    type instance (:==) CO CO = TrueSym0
-    type instance (:==) CO CP = FalseSym0
-    type instance (:==) CO CQ = FalseSym0
-    type instance (:==) CO CR = FalseSym0
-    type instance (:==) CO CS = FalseSym0
-    type instance (:==) CO CT = FalseSym0
-    type instance (:==) CO CU = FalseSym0
-    type instance (:==) CO CV = FalseSym0
-    type instance (:==) CO CW = FalseSym0
-    type instance (:==) CO CX = FalseSym0
-    type instance (:==) CO CY = FalseSym0
-    type instance (:==) CO CZ = FalseSym0
-    type instance (:==) CP CA = FalseSym0
-    type instance (:==) CP CB = FalseSym0
-    type instance (:==) CP CC = FalseSym0
-    type instance (:==) CP CD = FalseSym0
-    type instance (:==) CP CE = FalseSym0
-    type instance (:==) CP CF = FalseSym0
-    type instance (:==) CP CG = FalseSym0
-    type instance (:==) CP CH = FalseSym0
-    type instance (:==) CP CI = FalseSym0
-    type instance (:==) CP CJ = FalseSym0
-    type instance (:==) CP CK = FalseSym0
-    type instance (:==) CP CL = FalseSym0
-    type instance (:==) CP CM = FalseSym0
-    type instance (:==) CP CN = FalseSym0
-    type instance (:==) CP CO = FalseSym0
-    type instance (:==) CP CP = TrueSym0
-    type instance (:==) CP CQ = FalseSym0
-    type instance (:==) CP CR = FalseSym0
-    type instance (:==) CP CS = FalseSym0
-    type instance (:==) CP CT = FalseSym0
-    type instance (:==) CP CU = FalseSym0
-    type instance (:==) CP CV = FalseSym0
-    type instance (:==) CP CW = FalseSym0
-    type instance (:==) CP CX = FalseSym0
-    type instance (:==) CP CY = FalseSym0
-    type instance (:==) CP CZ = FalseSym0
-    type instance (:==) CQ CA = FalseSym0
-    type instance (:==) CQ CB = FalseSym0
-    type instance (:==) CQ CC = FalseSym0
-    type instance (:==) CQ CD = FalseSym0
-    type instance (:==) CQ CE = FalseSym0
-    type instance (:==) CQ CF = FalseSym0
-    type instance (:==) CQ CG = FalseSym0
-    type instance (:==) CQ CH = FalseSym0
-    type instance (:==) CQ CI = FalseSym0
-    type instance (:==) CQ CJ = FalseSym0
-    type instance (:==) CQ CK = FalseSym0
-    type instance (:==) CQ CL = FalseSym0
-    type instance (:==) CQ CM = FalseSym0
-    type instance (:==) CQ CN = FalseSym0
-    type instance (:==) CQ CO = FalseSym0
-    type instance (:==) CQ CP = FalseSym0
-    type instance (:==) CQ CQ = TrueSym0
-    type instance (:==) CQ CR = FalseSym0
-    type instance (:==) CQ CS = FalseSym0
-    type instance (:==) CQ CT = FalseSym0
-    type instance (:==) CQ CU = FalseSym0
-    type instance (:==) CQ CV = FalseSym0
-    type instance (:==) CQ CW = FalseSym0
-    type instance (:==) CQ CX = FalseSym0
-    type instance (:==) CQ CY = FalseSym0
-    type instance (:==) CQ CZ = FalseSym0
-    type instance (:==) CR CA = FalseSym0
-    type instance (:==) CR CB = FalseSym0
-    type instance (:==) CR CC = FalseSym0
-    type instance (:==) CR CD = FalseSym0
-    type instance (:==) CR CE = FalseSym0
-    type instance (:==) CR CF = FalseSym0
-    type instance (:==) CR CG = FalseSym0
-    type instance (:==) CR CH = FalseSym0
-    type instance (:==) CR CI = FalseSym0
-    type instance (:==) CR CJ = FalseSym0
-    type instance (:==) CR CK = FalseSym0
-    type instance (:==) CR CL = FalseSym0
-    type instance (:==) CR CM = FalseSym0
-    type instance (:==) CR CN = FalseSym0
-    type instance (:==) CR CO = FalseSym0
-    type instance (:==) CR CP = FalseSym0
-    type instance (:==) CR CQ = FalseSym0
-    type instance (:==) CR CR = TrueSym0
-    type instance (:==) CR CS = FalseSym0
-    type instance (:==) CR CT = FalseSym0
-    type instance (:==) CR CU = FalseSym0
-    type instance (:==) CR CV = FalseSym0
-    type instance (:==) CR CW = FalseSym0
-    type instance (:==) CR CX = FalseSym0
-    type instance (:==) CR CY = FalseSym0
-    type instance (:==) CR CZ = FalseSym0
-    type instance (:==) CS CA = FalseSym0
-    type instance (:==) CS CB = FalseSym0
-    type instance (:==) CS CC = FalseSym0
-    type instance (:==) CS CD = FalseSym0
-    type instance (:==) CS CE = FalseSym0
-    type instance (:==) CS CF = FalseSym0
-    type instance (:==) CS CG = FalseSym0
-    type instance (:==) CS CH = FalseSym0
-    type instance (:==) CS CI = FalseSym0
-    type instance (:==) CS CJ = FalseSym0
-    type instance (:==) CS CK = FalseSym0
-    type instance (:==) CS CL = FalseSym0
-    type instance (:==) CS CM = FalseSym0
-    type instance (:==) CS CN = FalseSym0
-    type instance (:==) CS CO = FalseSym0
-    type instance (:==) CS CP = FalseSym0
-    type instance (:==) CS CQ = FalseSym0
-    type instance (:==) CS CR = FalseSym0
-    type instance (:==) CS CS = TrueSym0
-    type instance (:==) CS CT = FalseSym0
-    type instance (:==) CS CU = FalseSym0
-    type instance (:==) CS CV = FalseSym0
-    type instance (:==) CS CW = FalseSym0
-    type instance (:==) CS CX = FalseSym0
-    type instance (:==) CS CY = FalseSym0
-    type instance (:==) CS CZ = FalseSym0
-    type instance (:==) CT CA = FalseSym0
-    type instance (:==) CT CB = FalseSym0
-    type instance (:==) CT CC = FalseSym0
-    type instance (:==) CT CD = FalseSym0
-    type instance (:==) CT CE = FalseSym0
-    type instance (:==) CT CF = FalseSym0
-    type instance (:==) CT CG = FalseSym0
-    type instance (:==) CT CH = FalseSym0
-    type instance (:==) CT CI = FalseSym0
-    type instance (:==) CT CJ = FalseSym0
-    type instance (:==) CT CK = FalseSym0
-    type instance (:==) CT CL = FalseSym0
-    type instance (:==) CT CM = FalseSym0
-    type instance (:==) CT CN = FalseSym0
-    type instance (:==) CT CO = FalseSym0
-    type instance (:==) CT CP = FalseSym0
-    type instance (:==) CT CQ = FalseSym0
-    type instance (:==) CT CR = FalseSym0
-    type instance (:==) CT CS = FalseSym0
-    type instance (:==) CT CT = TrueSym0
-    type instance (:==) CT CU = FalseSym0
-    type instance (:==) CT CV = FalseSym0
-    type instance (:==) CT CW = FalseSym0
-    type instance (:==) CT CX = FalseSym0
-    type instance (:==) CT CY = FalseSym0
-    type instance (:==) CT CZ = FalseSym0
-    type instance (:==) CU CA = FalseSym0
-    type instance (:==) CU CB = FalseSym0
-    type instance (:==) CU CC = FalseSym0
-    type instance (:==) CU CD = FalseSym0
-    type instance (:==) CU CE = FalseSym0
-    type instance (:==) CU CF = FalseSym0
-    type instance (:==) CU CG = FalseSym0
-    type instance (:==) CU CH = FalseSym0
-    type instance (:==) CU CI = FalseSym0
-    type instance (:==) CU CJ = FalseSym0
-    type instance (:==) CU CK = FalseSym0
-    type instance (:==) CU CL = FalseSym0
-    type instance (:==) CU CM = FalseSym0
-    type instance (:==) CU CN = FalseSym0
-    type instance (:==) CU CO = FalseSym0
-    type instance (:==) CU CP = FalseSym0
-    type instance (:==) CU CQ = FalseSym0
-    type instance (:==) CU CR = FalseSym0
-    type instance (:==) CU CS = FalseSym0
-    type instance (:==) CU CT = FalseSym0
-    type instance (:==) CU CU = TrueSym0
-    type instance (:==) CU CV = FalseSym0
-    type instance (:==) CU CW = FalseSym0
-    type instance (:==) CU CX = FalseSym0
-    type instance (:==) CU CY = FalseSym0
-    type instance (:==) CU CZ = FalseSym0
-    type instance (:==) CV CA = FalseSym0
-    type instance (:==) CV CB = FalseSym0
-    type instance (:==) CV CC = FalseSym0
-    type instance (:==) CV CD = FalseSym0
-    type instance (:==) CV CE = FalseSym0
-    type instance (:==) CV CF = FalseSym0
-    type instance (:==) CV CG = FalseSym0
-    type instance (:==) CV CH = FalseSym0
-    type instance (:==) CV CI = FalseSym0
-    type instance (:==) CV CJ = FalseSym0
-    type instance (:==) CV CK = FalseSym0
-    type instance (:==) CV CL = FalseSym0
-    type instance (:==) CV CM = FalseSym0
-    type instance (:==) CV CN = FalseSym0
-    type instance (:==) CV CO = FalseSym0
-    type instance (:==) CV CP = FalseSym0
-    type instance (:==) CV CQ = FalseSym0
-    type instance (:==) CV CR = FalseSym0
-    type instance (:==) CV CS = FalseSym0
-    type instance (:==) CV CT = FalseSym0
-    type instance (:==) CV CU = FalseSym0
-    type instance (:==) CV CV = TrueSym0
-    type instance (:==) CV CW = FalseSym0
-    type instance (:==) CV CX = FalseSym0
-    type instance (:==) CV CY = FalseSym0
-    type instance (:==) CV CZ = FalseSym0
-    type instance (:==) CW CA = FalseSym0
-    type instance (:==) CW CB = FalseSym0
-    type instance (:==) CW CC = FalseSym0
-    type instance (:==) CW CD = FalseSym0
-    type instance (:==) CW CE = FalseSym0
-    type instance (:==) CW CF = FalseSym0
-    type instance (:==) CW CG = FalseSym0
-    type instance (:==) CW CH = FalseSym0
-    type instance (:==) CW CI = FalseSym0
-    type instance (:==) CW CJ = FalseSym0
-    type instance (:==) CW CK = FalseSym0
-    type instance (:==) CW CL = FalseSym0
-    type instance (:==) CW CM = FalseSym0
-    type instance (:==) CW CN = FalseSym0
-    type instance (:==) CW CO = FalseSym0
-    type instance (:==) CW CP = FalseSym0
-    type instance (:==) CW CQ = FalseSym0
-    type instance (:==) CW CR = FalseSym0
-    type instance (:==) CW CS = FalseSym0
-    type instance (:==) CW CT = FalseSym0
-    type instance (:==) CW CU = FalseSym0
-    type instance (:==) CW CV = FalseSym0
-    type instance (:==) CW CW = TrueSym0
-    type instance (:==) CW CX = FalseSym0
-    type instance (:==) CW CY = FalseSym0
-    type instance (:==) CW CZ = FalseSym0
-    type instance (:==) CX CA = FalseSym0
-    type instance (:==) CX CB = FalseSym0
-    type instance (:==) CX CC = FalseSym0
-    type instance (:==) CX CD = FalseSym0
-    type instance (:==) CX CE = FalseSym0
-    type instance (:==) CX CF = FalseSym0
-    type instance (:==) CX CG = FalseSym0
-    type instance (:==) CX CH = FalseSym0
-    type instance (:==) CX CI = FalseSym0
-    type instance (:==) CX CJ = FalseSym0
-    type instance (:==) CX CK = FalseSym0
-    type instance (:==) CX CL = FalseSym0
-    type instance (:==) CX CM = FalseSym0
-    type instance (:==) CX CN = FalseSym0
-    type instance (:==) CX CO = FalseSym0
-    type instance (:==) CX CP = FalseSym0
-    type instance (:==) CX CQ = FalseSym0
-    type instance (:==) CX CR = FalseSym0
-    type instance (:==) CX CS = FalseSym0
-    type instance (:==) CX CT = FalseSym0
-    type instance (:==) CX CU = FalseSym0
-    type instance (:==) CX CV = FalseSym0
-    type instance (:==) CX CW = FalseSym0
-    type instance (:==) CX CX = TrueSym0
-    type instance (:==) CX CY = FalseSym0
-    type instance (:==) CX CZ = FalseSym0
-    type instance (:==) CY CA = FalseSym0
-    type instance (:==) CY CB = FalseSym0
-    type instance (:==) CY CC = FalseSym0
-    type instance (:==) CY CD = FalseSym0
-    type instance (:==) CY CE = FalseSym0
-    type instance (:==) CY CF = FalseSym0
-    type instance (:==) CY CG = FalseSym0
-    type instance (:==) CY CH = FalseSym0
-    type instance (:==) CY CI = FalseSym0
-    type instance (:==) CY CJ = FalseSym0
-    type instance (:==) CY CK = FalseSym0
-    type instance (:==) CY CL = FalseSym0
-    type instance (:==) CY CM = FalseSym0
-    type instance (:==) CY CN = FalseSym0
-    type instance (:==) CY CO = FalseSym0
-    type instance (:==) CY CP = FalseSym0
-    type instance (:==) CY CQ = FalseSym0
-    type instance (:==) CY CR = FalseSym0
-    type instance (:==) CY CS = FalseSym0
-    type instance (:==) CY CT = FalseSym0
-    type instance (:==) CY CU = FalseSym0
-    type instance (:==) CY CV = FalseSym0
-    type instance (:==) CY CW = FalseSym0
-    type instance (:==) CY CX = FalseSym0
-    type instance (:==) CY CY = TrueSym0
-    type instance (:==) CY CZ = FalseSym0
-    type instance (:==) CZ CA = FalseSym0
-    type instance (:==) CZ CB = FalseSym0
-    type instance (:==) CZ CC = FalseSym0
-    type instance (:==) CZ CD = FalseSym0
-    type instance (:==) CZ CE = FalseSym0
-    type instance (:==) CZ CF = FalseSym0
-    type instance (:==) CZ CG = FalseSym0
-    type instance (:==) CZ CH = FalseSym0
-    type instance (:==) CZ CI = FalseSym0
-    type instance (:==) CZ CJ = FalseSym0
-    type instance (:==) CZ CK = FalseSym0
-    type instance (:==) CZ CL = FalseSym0
-    type instance (:==) CZ CM = FalseSym0
-    type instance (:==) CZ CN = FalseSym0
-    type instance (:==) CZ CO = FalseSym0
-    type instance (:==) CZ CP = FalseSym0
-    type instance (:==) CZ CQ = FalseSym0
-    type instance (:==) CZ CR = FalseSym0
-    type instance (:==) CZ CS = FalseSym0
-    type instance (:==) CZ CT = FalseSym0
-    type instance (:==) CZ CU = FalseSym0
-    type instance (:==) CZ CV = FalseSym0
-    type instance (:==) CZ CW = FalseSym0
-    type instance (:==) CZ CX = FalseSym0
-    type instance (:==) CZ CY = FalseSym0
-    type instance (:==) CZ CZ = TrueSym0
-    type ACharTyCtor = AChar
-    type ACharTyCtorSym0 = ACharTyCtor
-    type CASym0 = CA
-    type CBSym0 = CB
-    type CCSym0 = CC
-    type CDSym0 = CD
-    type CESym0 = CE
-    type CFSym0 = CF
-    type CGSym0 = CG
-    type CHSym0 = CH
-    type CISym0 = CI
-    type CJSym0 = CJ
-    type CKSym0 = CK
-    type CLSym0 = CL
-    type CMSym0 = CM
-    type CNSym0 = CN
-    type COSym0 = CO
-    type CPSym0 = CP
-    type CQSym0 = CQ
-    type CRSym0 = CR
-    type CSSym0 = CS
-    type CTSym0 = CT
-    type CUSym0 = CU
-    type CVSym0 = CV
-    type CWSym0 = CW
-    type CXSym0 = CX
-    type CYSym0 = CY
-    type CZSym0 = CZ
-    type AttributeTyCtor = Attribute
-    type AttributeTyCtorSym0 = AttributeTyCtor
-    data AttrSym1 (l :: [AChar]) (l :: TyFun U Attribute)
-    data AttrSym0 (k :: TyFun [AChar] (TyFun U Attribute -> *))
-    type instance Apply (AttrSym1 a) a = Attr a a
-    type instance Apply AttrSym0 a = AttrSym1 a
-    type SchemaTyCtor = Schema
-    type SchemaTyCtorSym0 = SchemaTyCtor
-    data SchSym0 (k :: TyFun [Attribute] Schema)
-    type instance Apply SchSym0 a = Sch a
-    type family Append (a :: Schema) (a :: Schema) :: Schema
-    type instance Append (Sch s1) (Sch s2) =
-        Apply SchSym0 (Apply (Apply :++$ s1) s2)
-    data AppendSym1 (l :: Schema) (l :: TyFun Schema Schema)
-    data AppendSym0 (k :: TyFun Schema (TyFun Schema Schema -> *))
-    type instance Apply (AppendSym1 a) a = Append a a
-    type instance Apply AppendSym0 a = AppendSym1 a
-    type family AttrNotIn (a :: Attribute) (a :: Schema) :: Bool
-    type instance AttrNotIn z (Sch GHC.Types.[]) = TrueSym0
-    type instance AttrNotIn (Attr name u) (Sch (GHC.Types.: (Attr name' z) t)) =
-        Apply (Apply :&&$ (Apply (Apply :/=$ name) name')) (Apply (Apply AttrNotInSym0 (Apply (Apply AttrSym0 name) u)) (Apply SchSym0 t))
-    data AttrNotInSym1 (l :: Attribute) (l :: TyFun Schema Bool)
-    data AttrNotInSym0 (k :: TyFun Attribute (TyFun Schema Bool -> *))
-    type instance Apply (AttrNotInSym1 a) a = AttrNotIn a a
-    type instance Apply AttrNotInSym0 a = AttrNotInSym1 a
-    type family Disjoint (a :: Schema) (a :: Schema) :: Bool
-    type instance Disjoint (Sch GHC.Types.[]) z = TrueSym0
-    type instance Disjoint (Sch (GHC.Types.: h t)) s =
-        Apply (Apply :&&$ (Apply (Apply AttrNotInSym0 h) s)) (Apply (Apply DisjointSym0 (Apply SchSym0 t)) s)
-    data DisjointSym1 (l :: Schema) (l :: TyFun Schema Bool)
-    data DisjointSym0 (k :: TyFun Schema (TyFun Schema Bool -> *))
-    type instance Apply (DisjointSym1 a) a = Disjoint a a
-    type instance Apply DisjointSym0 a = DisjointSym1 a
-    type family Occurs (a :: [AChar]) (a :: Schema) :: Bool
-    type instance Occurs z (Sch GHC.Types.[]) = FalseSym0
-    type instance Occurs name (Sch (GHC.Types.: (Attr name' z) attrs)) =
-        Apply (Apply :||$ (Apply (Apply :==$ name) name')) (Apply (Apply OccursSym0 name) (Apply SchSym0 attrs))
-    data OccursSym1 (l :: [AChar]) (l :: TyFun Schema Bool)
-    data OccursSym0 (k :: TyFun [AChar] (TyFun Schema Bool -> *))
-    type instance Apply (OccursSym1 a) a = Occurs a a
-    type instance Apply OccursSym0 a = OccursSym1 a
-    type family Lookup (a :: [AChar]) (a :: Schema) :: U
-    type instance Lookup z (Sch GHC.Types.[]) = Any
-    type instance Lookup name (Sch (GHC.Types.: (Attr name' u) attrs)) =
-        If (Apply (Apply :==$ name) name') u (Apply (Apply LookupSym0 name) (Apply SchSym0 attrs))
-    data LookupSym1 (l :: [AChar]) (l :: TyFun Schema U)
-    data LookupSym0 (k :: TyFun [AChar] (TyFun Schema U -> *))
-    type instance Apply (LookupSym1 a) a = Lookup a a
-    type instance Apply LookupSym0 a = LookupSym1 a
-    data instance Sing (z :: U)
-      = z ~ BOOL => SBOOL |
-        z ~ STRING => SSTRING |
-        z ~ NAT => SNAT |
-        forall (n :: U) (n :: Nat). z ~ VEC n n => SVEC (Sing n) (Sing n)
-    type SU (z :: U) = Sing z
-    instance SingKind (KProxy :: KProxy U) where
-      type instance DemoteRep (KProxy :: KProxy U) = U
-      fromSing SBOOL = BOOL
-      fromSing SSTRING = STRING
-      fromSing SNAT = NAT
-      fromSing (SVEC b b) = VEC (fromSing b) (fromSing b)
-      toSing BOOL = SomeSing SBOOL
-      toSing STRING = SomeSing SSTRING
-      toSing NAT = SomeSing SNAT
-      toSing (VEC b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy U), 
-               toSing b :: SomeSing (KProxy :: KProxy Nat))
-          of {
-            (SomeSing c, SomeSing c) -> SomeSing (SVEC c c) }
-    instance SEq (KProxy :: KProxy U) where
-      %:== SBOOL SBOOL = STrue
-      %:== SBOOL SSTRING = SFalse
-      %:== SBOOL SNAT = SFalse
-      %:== SBOOL (SVEC _ _) = SFalse
-      %:== SSTRING SBOOL = SFalse
-      %:== SSTRING SSTRING = STrue
-      %:== SSTRING SNAT = SFalse
-      %:== SSTRING (SVEC _ _) = SFalse
-      %:== SNAT SBOOL = SFalse
-      %:== SNAT SSTRING = SFalse
-      %:== SNAT SNAT = STrue
-      %:== SNAT (SVEC _ _) = SFalse
-      %:== (SVEC _ _) SBOOL = SFalse
-      %:== (SVEC _ _) SSTRING = SFalse
-      %:== (SVEC _ _) SNAT = SFalse
-      %:== (SVEC a a) (SVEC b b) = (%:&&) ((%:==) a b) ((%:==) a b)
-    instance SDecide (KProxy :: KProxy U) where
-      %~ SBOOL SBOOL = Proved Refl
-      %~ SBOOL SSTRING
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SBOOL SNAT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SBOOL (SVEC _ _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SSTRING SBOOL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SSTRING SSTRING = Proved Refl
-      %~ SSTRING SNAT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SSTRING (SVEC _ _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SNAT SBOOL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SNAT SSTRING
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SNAT SNAT = Proved Refl
-      %~ SNAT (SVEC _ _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SVEC _ _) SBOOL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SVEC _ _) SSTRING
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SVEC _ _) SNAT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SVEC a a) (SVEC b b)
-        = case ((%~) a b, (%~) a b) of {
-            (Proved Refl, Proved Refl) -> Proved Refl
-            (Disproved contra, _) -> Disproved (\ Refl -> contra Refl)
-            (_, Disproved contra) -> Disproved (\ Refl -> contra Refl) }
-    instance SingI BOOL where
-      sing = SBOOL
-    instance SingI STRING where
-      sing = SSTRING
-    instance SingI NAT where
-      sing = SNAT
-    instance (SingI n, SingI n) =>
-             SingI (VEC (n :: U) (n :: Nat)) where
-      sing = SVEC sing sing
-    data instance Sing (z :: AChar)
-      = z ~ CA => SCA |
-        z ~ CB => SCB |
-        z ~ CC => SCC |
-        z ~ CD => SCD |
-        z ~ CE => SCE |
-        z ~ CF => SCF |
-        z ~ CG => SCG |
-        z ~ CH => SCH |
-        z ~ CI => SCI |
-        z ~ CJ => SCJ |
-        z ~ CK => SCK |
-        z ~ CL => SCL |
-        z ~ CM => SCM |
-        z ~ CN => SCN |
-        z ~ CO => SCO |
-        z ~ CP => SCP |
-        z ~ CQ => SCQ |
-        z ~ CR => SCR |
-        z ~ CS => SCS |
-        z ~ CT => SCT |
-        z ~ CU => SCU |
-        z ~ CV => SCV |
-        z ~ CW => SCW |
-        z ~ CX => SCX |
-        z ~ CY => SCY |
-        z ~ CZ => SCZ
-    type SAChar (z :: AChar) = Sing z
-    instance SingKind (KProxy :: KProxy AChar) where
-      type instance DemoteRep (KProxy :: KProxy AChar) = AChar
-      fromSing SCA = CA
-      fromSing SCB = CB
-      fromSing SCC = CC
-      fromSing SCD = CD
-      fromSing SCE = CE
-      fromSing SCF = CF
-      fromSing SCG = CG
-      fromSing SCH = CH
-      fromSing SCI = CI
-      fromSing SCJ = CJ
-      fromSing SCK = CK
-      fromSing SCL = CL
-      fromSing SCM = CM
-      fromSing SCN = CN
-      fromSing SCO = CO
-      fromSing SCP = CP
-      fromSing SCQ = CQ
-      fromSing SCR = CR
-      fromSing SCS = CS
-      fromSing SCT = CT
-      fromSing SCU = CU
-      fromSing SCV = CV
-      fromSing SCW = CW
-      fromSing SCX = CX
-      fromSing SCY = CY
-      fromSing SCZ = CZ
-      toSing CA = SomeSing SCA
-      toSing CB = SomeSing SCB
-      toSing CC = SomeSing SCC
-      toSing CD = SomeSing SCD
-      toSing CE = SomeSing SCE
-      toSing CF = SomeSing SCF
-      toSing CG = SomeSing SCG
-      toSing CH = SomeSing SCH
-      toSing CI = SomeSing SCI
-      toSing CJ = SomeSing SCJ
-      toSing CK = SomeSing SCK
-      toSing CL = SomeSing SCL
-      toSing CM = SomeSing SCM
-      toSing CN = SomeSing SCN
-      toSing CO = SomeSing SCO
-      toSing CP = SomeSing SCP
-      toSing CQ = SomeSing SCQ
-      toSing CR = SomeSing SCR
-      toSing CS = SomeSing SCS
-      toSing CT = SomeSing SCT
-      toSing CU = SomeSing SCU
-      toSing CV = SomeSing SCV
-      toSing CW = SomeSing SCW
-      toSing CX = SomeSing SCX
-      toSing CY = SomeSing SCY
-      toSing CZ = SomeSing SCZ
-    instance SEq (KProxy :: KProxy AChar) where
-      %:== SCA SCA = STrue
-      %:== SCA SCB = SFalse
-      %:== SCA SCC = SFalse
-      %:== SCA SCD = SFalse
-      %:== SCA SCE = SFalse
-      %:== SCA SCF = SFalse
-      %:== SCA SCG = SFalse
-      %:== SCA SCH = SFalse
-      %:== SCA SCI = SFalse
-      %:== SCA SCJ = SFalse
-      %:== SCA SCK = SFalse
-      %:== SCA SCL = SFalse
-      %:== SCA SCM = SFalse
-      %:== SCA SCN = SFalse
-      %:== SCA SCO = SFalse
-      %:== SCA SCP = SFalse
-      %:== SCA SCQ = SFalse
-      %:== SCA SCR = SFalse
-      %:== SCA SCS = SFalse
-      %:== SCA SCT = SFalse
-      %:== SCA SCU = SFalse
-      %:== SCA SCV = SFalse
-      %:== SCA SCW = SFalse
-      %:== SCA SCX = SFalse
-      %:== SCA SCY = SFalse
-      %:== SCA SCZ = SFalse
-      %:== SCB SCA = SFalse
-      %:== SCB SCB = STrue
-      %:== SCB SCC = SFalse
-      %:== SCB SCD = SFalse
-      %:== SCB SCE = SFalse
-      %:== SCB SCF = SFalse
-      %:== SCB SCG = SFalse
-      %:== SCB SCH = SFalse
-      %:== SCB SCI = SFalse
-      %:== SCB SCJ = SFalse
-      %:== SCB SCK = SFalse
-      %:== SCB SCL = SFalse
-      %:== SCB SCM = SFalse
-      %:== SCB SCN = SFalse
-      %:== SCB SCO = SFalse
-      %:== SCB SCP = SFalse
-      %:== SCB SCQ = SFalse
-      %:== SCB SCR = SFalse
-      %:== SCB SCS = SFalse
-      %:== SCB SCT = SFalse
-      %:== SCB SCU = SFalse
-      %:== SCB SCV = SFalse
-      %:== SCB SCW = SFalse
-      %:== SCB SCX = SFalse
-      %:== SCB SCY = SFalse
-      %:== SCB SCZ = SFalse
-      %:== SCC SCA = SFalse
-      %:== SCC SCB = SFalse
-      %:== SCC SCC = STrue
-      %:== SCC SCD = SFalse
-      %:== SCC SCE = SFalse
-      %:== SCC SCF = SFalse
-      %:== SCC SCG = SFalse
-      %:== SCC SCH = SFalse
-      %:== SCC SCI = SFalse
-      %:== SCC SCJ = SFalse
-      %:== SCC SCK = SFalse
-      %:== SCC SCL = SFalse
-      %:== SCC SCM = SFalse
-      %:== SCC SCN = SFalse
-      %:== SCC SCO = SFalse
-      %:== SCC SCP = SFalse
-      %:== SCC SCQ = SFalse
-      %:== SCC SCR = SFalse
-      %:== SCC SCS = SFalse
-      %:== SCC SCT = SFalse
-      %:== SCC SCU = SFalse
-      %:== SCC SCV = SFalse
-      %:== SCC SCW = SFalse
-      %:== SCC SCX = SFalse
-      %:== SCC SCY = SFalse
-      %:== SCC SCZ = SFalse
-      %:== SCD SCA = SFalse
-      %:== SCD SCB = SFalse
-      %:== SCD SCC = SFalse
-      %:== SCD SCD = STrue
-      %:== SCD SCE = SFalse
-      %:== SCD SCF = SFalse
-      %:== SCD SCG = SFalse
-      %:== SCD SCH = SFalse
-      %:== SCD SCI = SFalse
-      %:== SCD SCJ = SFalse
-      %:== SCD SCK = SFalse
-      %:== SCD SCL = SFalse
-      %:== SCD SCM = SFalse
-      %:== SCD SCN = SFalse
-      %:== SCD SCO = SFalse
-      %:== SCD SCP = SFalse
-      %:== SCD SCQ = SFalse
-      %:== SCD SCR = SFalse
-      %:== SCD SCS = SFalse
-      %:== SCD SCT = SFalse
-      %:== SCD SCU = SFalse
-      %:== SCD SCV = SFalse
-      %:== SCD SCW = SFalse
-      %:== SCD SCX = SFalse
-      %:== SCD SCY = SFalse
-      %:== SCD SCZ = SFalse
-      %:== SCE SCA = SFalse
-      %:== SCE SCB = SFalse
-      %:== SCE SCC = SFalse
-      %:== SCE SCD = SFalse
-      %:== SCE SCE = STrue
-      %:== SCE SCF = SFalse
-      %:== SCE SCG = SFalse
-      %:== SCE SCH = SFalse
-      %:== SCE SCI = SFalse
-      %:== SCE SCJ = SFalse
-      %:== SCE SCK = SFalse
-      %:== SCE SCL = SFalse
-      %:== SCE SCM = SFalse
-      %:== SCE SCN = SFalse
-      %:== SCE SCO = SFalse
-      %:== SCE SCP = SFalse
-      %:== SCE SCQ = SFalse
-      %:== SCE SCR = SFalse
-      %:== SCE SCS = SFalse
-      %:== SCE SCT = SFalse
-      %:== SCE SCU = SFalse
-      %:== SCE SCV = SFalse
-      %:== SCE SCW = SFalse
-      %:== SCE SCX = SFalse
-      %:== SCE SCY = SFalse
-      %:== SCE SCZ = SFalse
-      %:== SCF SCA = SFalse
-      %:== SCF SCB = SFalse
-      %:== SCF SCC = SFalse
-      %:== SCF SCD = SFalse
-      %:== SCF SCE = SFalse
-      %:== SCF SCF = STrue
-      %:== SCF SCG = SFalse
-      %:== SCF SCH = SFalse
-      %:== SCF SCI = SFalse
-      %:== SCF SCJ = SFalse
-      %:== SCF SCK = SFalse
-      %:== SCF SCL = SFalse
-      %:== SCF SCM = SFalse
-      %:== SCF SCN = SFalse
-      %:== SCF SCO = SFalse
-      %:== SCF SCP = SFalse
-      %:== SCF SCQ = SFalse
-      %:== SCF SCR = SFalse
-      %:== SCF SCS = SFalse
-      %:== SCF SCT = SFalse
-      %:== SCF SCU = SFalse
-      %:== SCF SCV = SFalse
-      %:== SCF SCW = SFalse
-      %:== SCF SCX = SFalse
-      %:== SCF SCY = SFalse
-      %:== SCF SCZ = SFalse
-      %:== SCG SCA = SFalse
-      %:== SCG SCB = SFalse
-      %:== SCG SCC = SFalse
-      %:== SCG SCD = SFalse
-      %:== SCG SCE = SFalse
-      %:== SCG SCF = SFalse
-      %:== SCG SCG = STrue
-      %:== SCG SCH = SFalse
-      %:== SCG SCI = SFalse
-      %:== SCG SCJ = SFalse
-      %:== SCG SCK = SFalse
-      %:== SCG SCL = SFalse
-      %:== SCG SCM = SFalse
-      %:== SCG SCN = SFalse
-      %:== SCG SCO = SFalse
-      %:== SCG SCP = SFalse
-      %:== SCG SCQ = SFalse
-      %:== SCG SCR = SFalse
-      %:== SCG SCS = SFalse
-      %:== SCG SCT = SFalse
-      %:== SCG SCU = SFalse
-      %:== SCG SCV = SFalse
-      %:== SCG SCW = SFalse
-      %:== SCG SCX = SFalse
-      %:== SCG SCY = SFalse
-      %:== SCG SCZ = SFalse
-      %:== SCH SCA = SFalse
-      %:== SCH SCB = SFalse
-      %:== SCH SCC = SFalse
-      %:== SCH SCD = SFalse
-      %:== SCH SCE = SFalse
-      %:== SCH SCF = SFalse
-      %:== SCH SCG = SFalse
-      %:== SCH SCH = STrue
-      %:== SCH SCI = SFalse
-      %:== SCH SCJ = SFalse
-      %:== SCH SCK = SFalse
-      %:== SCH SCL = SFalse
-      %:== SCH SCM = SFalse
-      %:== SCH SCN = SFalse
-      %:== SCH SCO = SFalse
-      %:== SCH SCP = SFalse
-      %:== SCH SCQ = SFalse
-      %:== SCH SCR = SFalse
-      %:== SCH SCS = SFalse
-      %:== SCH SCT = SFalse
-      %:== SCH SCU = SFalse
-      %:== SCH SCV = SFalse
-      %:== SCH SCW = SFalse
-      %:== SCH SCX = SFalse
-      %:== SCH SCY = SFalse
-      %:== SCH SCZ = SFalse
-      %:== SCI SCA = SFalse
-      %:== SCI SCB = SFalse
-      %:== SCI SCC = SFalse
-      %:== SCI SCD = SFalse
-      %:== SCI SCE = SFalse
-      %:== SCI SCF = SFalse
-      %:== SCI SCG = SFalse
-      %:== SCI SCH = SFalse
-      %:== SCI SCI = STrue
-      %:== SCI SCJ = SFalse
-      %:== SCI SCK = SFalse
-      %:== SCI SCL = SFalse
-      %:== SCI SCM = SFalse
-      %:== SCI SCN = SFalse
-      %:== SCI SCO = SFalse
-      %:== SCI SCP = SFalse
-      %:== SCI SCQ = SFalse
-      %:== SCI SCR = SFalse
-      %:== SCI SCS = SFalse
-      %:== SCI SCT = SFalse
-      %:== SCI SCU = SFalse
-      %:== SCI SCV = SFalse
-      %:== SCI SCW = SFalse
-      %:== SCI SCX = SFalse
-      %:== SCI SCY = SFalse
-      %:== SCI SCZ = SFalse
-      %:== SCJ SCA = SFalse
-      %:== SCJ SCB = SFalse
-      %:== SCJ SCC = SFalse
-      %:== SCJ SCD = SFalse
-      %:== SCJ SCE = SFalse
-      %:== SCJ SCF = SFalse
-      %:== SCJ SCG = SFalse
-      %:== SCJ SCH = SFalse
-      %:== SCJ SCI = SFalse
-      %:== SCJ SCJ = STrue
-      %:== SCJ SCK = SFalse
-      %:== SCJ SCL = SFalse
-      %:== SCJ SCM = SFalse
-      %:== SCJ SCN = SFalse
-      %:== SCJ SCO = SFalse
-      %:== SCJ SCP = SFalse
-      %:== SCJ SCQ = SFalse
-      %:== SCJ SCR = SFalse
-      %:== SCJ SCS = SFalse
-      %:== SCJ SCT = SFalse
-      %:== SCJ SCU = SFalse
-      %:== SCJ SCV = SFalse
-      %:== SCJ SCW = SFalse
-      %:== SCJ SCX = SFalse
-      %:== SCJ SCY = SFalse
-      %:== SCJ SCZ = SFalse
-      %:== SCK SCA = SFalse
-      %:== SCK SCB = SFalse
-      %:== SCK SCC = SFalse
-      %:== SCK SCD = SFalse
-      %:== SCK SCE = SFalse
-      %:== SCK SCF = SFalse
-      %:== SCK SCG = SFalse
-      %:== SCK SCH = SFalse
-      %:== SCK SCI = SFalse
-      %:== SCK SCJ = SFalse
-      %:== SCK SCK = STrue
-      %:== SCK SCL = SFalse
-      %:== SCK SCM = SFalse
-      %:== SCK SCN = SFalse
-      %:== SCK SCO = SFalse
-      %:== SCK SCP = SFalse
-      %:== SCK SCQ = SFalse
-      %:== SCK SCR = SFalse
-      %:== SCK SCS = SFalse
-      %:== SCK SCT = SFalse
-      %:== SCK SCU = SFalse
-      %:== SCK SCV = SFalse
-      %:== SCK SCW = SFalse
-      %:== SCK SCX = SFalse
-      %:== SCK SCY = SFalse
-      %:== SCK SCZ = SFalse
-      %:== SCL SCA = SFalse
-      %:== SCL SCB = SFalse
-      %:== SCL SCC = SFalse
-      %:== SCL SCD = SFalse
-      %:== SCL SCE = SFalse
-      %:== SCL SCF = SFalse
-      %:== SCL SCG = SFalse
-      %:== SCL SCH = SFalse
-      %:== SCL SCI = SFalse
-      %:== SCL SCJ = SFalse
-      %:== SCL SCK = SFalse
-      %:== SCL SCL = STrue
-      %:== SCL SCM = SFalse
-      %:== SCL SCN = SFalse
-      %:== SCL SCO = SFalse
-      %:== SCL SCP = SFalse
-      %:== SCL SCQ = SFalse
-      %:== SCL SCR = SFalse
-      %:== SCL SCS = SFalse
-      %:== SCL SCT = SFalse
-      %:== SCL SCU = SFalse
-      %:== SCL SCV = SFalse
-      %:== SCL SCW = SFalse
-      %:== SCL SCX = SFalse
-      %:== SCL SCY = SFalse
-      %:== SCL SCZ = SFalse
-      %:== SCM SCA = SFalse
-      %:== SCM SCB = SFalse
-      %:== SCM SCC = SFalse
-      %:== SCM SCD = SFalse
-      %:== SCM SCE = SFalse
-      %:== SCM SCF = SFalse
-      %:== SCM SCG = SFalse
-      %:== SCM SCH = SFalse
-      %:== SCM SCI = SFalse
-      %:== SCM SCJ = SFalse
-      %:== SCM SCK = SFalse
-      %:== SCM SCL = SFalse
-      %:== SCM SCM = STrue
-      %:== SCM SCN = SFalse
-      %:== SCM SCO = SFalse
-      %:== SCM SCP = SFalse
-      %:== SCM SCQ = SFalse
-      %:== SCM SCR = SFalse
-      %:== SCM SCS = SFalse
-      %:== SCM SCT = SFalse
-      %:== SCM SCU = SFalse
-      %:== SCM SCV = SFalse
-      %:== SCM SCW = SFalse
-      %:== SCM SCX = SFalse
-      %:== SCM SCY = SFalse
-      %:== SCM SCZ = SFalse
-      %:== SCN SCA = SFalse
-      %:== SCN SCB = SFalse
-      %:== SCN SCC = SFalse
-      %:== SCN SCD = SFalse
-      %:== SCN SCE = SFalse
-      %:== SCN SCF = SFalse
-      %:== SCN SCG = SFalse
-      %:== SCN SCH = SFalse
-      %:== SCN SCI = SFalse
-      %:== SCN SCJ = SFalse
-      %:== SCN SCK = SFalse
-      %:== SCN SCL = SFalse
-      %:== SCN SCM = SFalse
-      %:== SCN SCN = STrue
-      %:== SCN SCO = SFalse
-      %:== SCN SCP = SFalse
-      %:== SCN SCQ = SFalse
-      %:== SCN SCR = SFalse
-      %:== SCN SCS = SFalse
-      %:== SCN SCT = SFalse
-      %:== SCN SCU = SFalse
-      %:== SCN SCV = SFalse
-      %:== SCN SCW = SFalse
-      %:== SCN SCX = SFalse
-      %:== SCN SCY = SFalse
-      %:== SCN SCZ = SFalse
-      %:== SCO SCA = SFalse
-      %:== SCO SCB = SFalse
-      %:== SCO SCC = SFalse
-      %:== SCO SCD = SFalse
-      %:== SCO SCE = SFalse
-      %:== SCO SCF = SFalse
-      %:== SCO SCG = SFalse
-      %:== SCO SCH = SFalse
-      %:== SCO SCI = SFalse
-      %:== SCO SCJ = SFalse
-      %:== SCO SCK = SFalse
-      %:== SCO SCL = SFalse
-      %:== SCO SCM = SFalse
-      %:== SCO SCN = SFalse
-      %:== SCO SCO = STrue
-      %:== SCO SCP = SFalse
-      %:== SCO SCQ = SFalse
-      %:== SCO SCR = SFalse
-      %:== SCO SCS = SFalse
-      %:== SCO SCT = SFalse
-      %:== SCO SCU = SFalse
-      %:== SCO SCV = SFalse
-      %:== SCO SCW = SFalse
-      %:== SCO SCX = SFalse
-      %:== SCO SCY = SFalse
-      %:== SCO SCZ = SFalse
-      %:== SCP SCA = SFalse
-      %:== SCP SCB = SFalse
-      %:== SCP SCC = SFalse
-      %:== SCP SCD = SFalse
-      %:== SCP SCE = SFalse
-      %:== SCP SCF = SFalse
-      %:== SCP SCG = SFalse
-      %:== SCP SCH = SFalse
-      %:== SCP SCI = SFalse
-      %:== SCP SCJ = SFalse
-      %:== SCP SCK = SFalse
-      %:== SCP SCL = SFalse
-      %:== SCP SCM = SFalse
-      %:== SCP SCN = SFalse
-      %:== SCP SCO = SFalse
-      %:== SCP SCP = STrue
-      %:== SCP SCQ = SFalse
-      %:== SCP SCR = SFalse
-      %:== SCP SCS = SFalse
-      %:== SCP SCT = SFalse
-      %:== SCP SCU = SFalse
-      %:== SCP SCV = SFalse
-      %:== SCP SCW = SFalse
-      %:== SCP SCX = SFalse
-      %:== SCP SCY = SFalse
-      %:== SCP SCZ = SFalse
-      %:== SCQ SCA = SFalse
-      %:== SCQ SCB = SFalse
-      %:== SCQ SCC = SFalse
-      %:== SCQ SCD = SFalse
-      %:== SCQ SCE = SFalse
-      %:== SCQ SCF = SFalse
-      %:== SCQ SCG = SFalse
-      %:== SCQ SCH = SFalse
-      %:== SCQ SCI = SFalse
-      %:== SCQ SCJ = SFalse
-      %:== SCQ SCK = SFalse
-      %:== SCQ SCL = SFalse
-      %:== SCQ SCM = SFalse
-      %:== SCQ SCN = SFalse
-      %:== SCQ SCO = SFalse
-      %:== SCQ SCP = SFalse
-      %:== SCQ SCQ = STrue
-      %:== SCQ SCR = SFalse
-      %:== SCQ SCS = SFalse
-      %:== SCQ SCT = SFalse
-      %:== SCQ SCU = SFalse
-      %:== SCQ SCV = SFalse
-      %:== SCQ SCW = SFalse
-      %:== SCQ SCX = SFalse
-      %:== SCQ SCY = SFalse
-      %:== SCQ SCZ = SFalse
-      %:== SCR SCA = SFalse
-      %:== SCR SCB = SFalse
-      %:== SCR SCC = SFalse
-      %:== SCR SCD = SFalse
-      %:== SCR SCE = SFalse
-      %:== SCR SCF = SFalse
-      %:== SCR SCG = SFalse
-      %:== SCR SCH = SFalse
-      %:== SCR SCI = SFalse
-      %:== SCR SCJ = SFalse
-      %:== SCR SCK = SFalse
-      %:== SCR SCL = SFalse
-      %:== SCR SCM = SFalse
-      %:== SCR SCN = SFalse
-      %:== SCR SCO = SFalse
-      %:== SCR SCP = SFalse
-      %:== SCR SCQ = SFalse
-      %:== SCR SCR = STrue
-      %:== SCR SCS = SFalse
-      %:== SCR SCT = SFalse
-      %:== SCR SCU = SFalse
-      %:== SCR SCV = SFalse
-      %:== SCR SCW = SFalse
-      %:== SCR SCX = SFalse
-      %:== SCR SCY = SFalse
-      %:== SCR SCZ = SFalse
-      %:== SCS SCA = SFalse
-      %:== SCS SCB = SFalse
-      %:== SCS SCC = SFalse
-      %:== SCS SCD = SFalse
-      %:== SCS SCE = SFalse
-      %:== SCS SCF = SFalse
-      %:== SCS SCG = SFalse
-      %:== SCS SCH = SFalse
-      %:== SCS SCI = SFalse
-      %:== SCS SCJ = SFalse
-      %:== SCS SCK = SFalse
-      %:== SCS SCL = SFalse
-      %:== SCS SCM = SFalse
-      %:== SCS SCN = SFalse
-      %:== SCS SCO = SFalse
-      %:== SCS SCP = SFalse
-      %:== SCS SCQ = SFalse
-      %:== SCS SCR = SFalse
-      %:== SCS SCS = STrue
-      %:== SCS SCT = SFalse
-      %:== SCS SCU = SFalse
-      %:== SCS SCV = SFalse
-      %:== SCS SCW = SFalse
-      %:== SCS SCX = SFalse
-      %:== SCS SCY = SFalse
-      %:== SCS SCZ = SFalse
-      %:== SCT SCA = SFalse
-      %:== SCT SCB = SFalse
-      %:== SCT SCC = SFalse
-      %:== SCT SCD = SFalse
-      %:== SCT SCE = SFalse
-      %:== SCT SCF = SFalse
-      %:== SCT SCG = SFalse
-      %:== SCT SCH = SFalse
-      %:== SCT SCI = SFalse
-      %:== SCT SCJ = SFalse
-      %:== SCT SCK = SFalse
-      %:== SCT SCL = SFalse
-      %:== SCT SCM = SFalse
-      %:== SCT SCN = SFalse
-      %:== SCT SCO = SFalse
-      %:== SCT SCP = SFalse
-      %:== SCT SCQ = SFalse
-      %:== SCT SCR = SFalse
-      %:== SCT SCS = SFalse
-      %:== SCT SCT = STrue
-      %:== SCT SCU = SFalse
-      %:== SCT SCV = SFalse
-      %:== SCT SCW = SFalse
-      %:== SCT SCX = SFalse
-      %:== SCT SCY = SFalse
-      %:== SCT SCZ = SFalse
-      %:== SCU SCA = SFalse
-      %:== SCU SCB = SFalse
-      %:== SCU SCC = SFalse
-      %:== SCU SCD = SFalse
-      %:== SCU SCE = SFalse
-      %:== SCU SCF = SFalse
-      %:== SCU SCG = SFalse
-      %:== SCU SCH = SFalse
-      %:== SCU SCI = SFalse
-      %:== SCU SCJ = SFalse
-      %:== SCU SCK = SFalse
-      %:== SCU SCL = SFalse
-      %:== SCU SCM = SFalse
-      %:== SCU SCN = SFalse
-      %:== SCU SCO = SFalse
-      %:== SCU SCP = SFalse
-      %:== SCU SCQ = SFalse
-      %:== SCU SCR = SFalse
-      %:== SCU SCS = SFalse
-      %:== SCU SCT = SFalse
-      %:== SCU SCU = STrue
-      %:== SCU SCV = SFalse
-      %:== SCU SCW = SFalse
-      %:== SCU SCX = SFalse
-      %:== SCU SCY = SFalse
-      %:== SCU SCZ = SFalse
-      %:== SCV SCA = SFalse
-      %:== SCV SCB = SFalse
-      %:== SCV SCC = SFalse
-      %:== SCV SCD = SFalse
-      %:== SCV SCE = SFalse
-      %:== SCV SCF = SFalse
-      %:== SCV SCG = SFalse
-      %:== SCV SCH = SFalse
-      %:== SCV SCI = SFalse
-      %:== SCV SCJ = SFalse
-      %:== SCV SCK = SFalse
-      %:== SCV SCL = SFalse
-      %:== SCV SCM = SFalse
-      %:== SCV SCN = SFalse
-      %:== SCV SCO = SFalse
-      %:== SCV SCP = SFalse
-      %:== SCV SCQ = SFalse
-      %:== SCV SCR = SFalse
-      %:== SCV SCS = SFalse
-      %:== SCV SCT = SFalse
-      %:== SCV SCU = SFalse
-      %:== SCV SCV = STrue
-      %:== SCV SCW = SFalse
-      %:== SCV SCX = SFalse
-      %:== SCV SCY = SFalse
-      %:== SCV SCZ = SFalse
-      %:== SCW SCA = SFalse
-      %:== SCW SCB = SFalse
-      %:== SCW SCC = SFalse
-      %:== SCW SCD = SFalse
-      %:== SCW SCE = SFalse
-      %:== SCW SCF = SFalse
-      %:== SCW SCG = SFalse
-      %:== SCW SCH = SFalse
-      %:== SCW SCI = SFalse
-      %:== SCW SCJ = SFalse
-      %:== SCW SCK = SFalse
-      %:== SCW SCL = SFalse
-      %:== SCW SCM = SFalse
-      %:== SCW SCN = SFalse
-      %:== SCW SCO = SFalse
-      %:== SCW SCP = SFalse
-      %:== SCW SCQ = SFalse
-      %:== SCW SCR = SFalse
-      %:== SCW SCS = SFalse
-      %:== SCW SCT = SFalse
-      %:== SCW SCU = SFalse
-      %:== SCW SCV = SFalse
-      %:== SCW SCW = STrue
-      %:== SCW SCX = SFalse
-      %:== SCW SCY = SFalse
-      %:== SCW SCZ = SFalse
-      %:== SCX SCA = SFalse
-      %:== SCX SCB = SFalse
-      %:== SCX SCC = SFalse
-      %:== SCX SCD = SFalse
-      %:== SCX SCE = SFalse
-      %:== SCX SCF = SFalse
-      %:== SCX SCG = SFalse
-      %:== SCX SCH = SFalse
-      %:== SCX SCI = SFalse
-      %:== SCX SCJ = SFalse
-      %:== SCX SCK = SFalse
-      %:== SCX SCL = SFalse
-      %:== SCX SCM = SFalse
-      %:== SCX SCN = SFalse
-      %:== SCX SCO = SFalse
-      %:== SCX SCP = SFalse
-      %:== SCX SCQ = SFalse
-      %:== SCX SCR = SFalse
-      %:== SCX SCS = SFalse
-      %:== SCX SCT = SFalse
-      %:== SCX SCU = SFalse
-      %:== SCX SCV = SFalse
-      %:== SCX SCW = SFalse
-      %:== SCX SCX = STrue
-      %:== SCX SCY = SFalse
-      %:== SCX SCZ = SFalse
-      %:== SCY SCA = SFalse
-      %:== SCY SCB = SFalse
-      %:== SCY SCC = SFalse
-      %:== SCY SCD = SFalse
-      %:== SCY SCE = SFalse
-      %:== SCY SCF = SFalse
-      %:== SCY SCG = SFalse
-      %:== SCY SCH = SFalse
-      %:== SCY SCI = SFalse
-      %:== SCY SCJ = SFalse
-      %:== SCY SCK = SFalse
-      %:== SCY SCL = SFalse
-      %:== SCY SCM = SFalse
-      %:== SCY SCN = SFalse
-      %:== SCY SCO = SFalse
-      %:== SCY SCP = SFalse
-      %:== SCY SCQ = SFalse
-      %:== SCY SCR = SFalse
-      %:== SCY SCS = SFalse
-      %:== SCY SCT = SFalse
-      %:== SCY SCU = SFalse
-      %:== SCY SCV = SFalse
-      %:== SCY SCW = SFalse
-      %:== SCY SCX = SFalse
-      %:== SCY SCY = STrue
-      %:== SCY SCZ = SFalse
-      %:== SCZ SCA = SFalse
-      %:== SCZ SCB = SFalse
-      %:== SCZ SCC = SFalse
-      %:== SCZ SCD = SFalse
-      %:== SCZ SCE = SFalse
-      %:== SCZ SCF = SFalse
-      %:== SCZ SCG = SFalse
-      %:== SCZ SCH = SFalse
-      %:== SCZ SCI = SFalse
-      %:== SCZ SCJ = SFalse
-      %:== SCZ SCK = SFalse
-      %:== SCZ SCL = SFalse
-      %:== SCZ SCM = SFalse
-      %:== SCZ SCN = SFalse
-      %:== SCZ SCO = SFalse
-      %:== SCZ SCP = SFalse
-      %:== SCZ SCQ = SFalse
-      %:== SCZ SCR = SFalse
-      %:== SCZ SCS = SFalse
-      %:== SCZ SCT = SFalse
-      %:== SCZ SCU = SFalse
-      %:== SCZ SCV = SFalse
-      %:== SCZ SCW = SFalse
-      %:== SCZ SCX = SFalse
-      %:== SCZ SCY = SFalse
-      %:== SCZ SCZ = STrue
-    instance SDecide (KProxy :: KProxy AChar) where
-      %~ SCA SCA = Proved Refl
-      %~ SCA SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCA SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCB = Proved Refl
-      %~ SCB SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCB SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCC = Proved Refl
-      %~ SCC SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCC SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCD = Proved Refl
-      %~ SCD SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCD SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCE = Proved Refl
-      %~ SCE SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCE SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCF = Proved Refl
-      %~ SCF SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCF SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCG = Proved Refl
-      %~ SCG SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCG SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCH = Proved Refl
-      %~ SCH SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCH SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCI = Proved Refl
-      %~ SCI SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCI SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCJ = Proved Refl
-      %~ SCJ SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCJ SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCK = Proved Refl
-      %~ SCK SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCK SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCL = Proved Refl
-      %~ SCL SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCL SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCM = Proved Refl
-      %~ SCM SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCM SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCN = Proved Refl
-      %~ SCN SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCN SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCO = Proved Refl
-      %~ SCO SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCO SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCP = Proved Refl
-      %~ SCP SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCP SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCQ = Proved Refl
-      %~ SCQ SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCQ SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCR = Proved Refl
-      %~ SCR SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCR SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCS = Proved Refl
-      %~ SCS SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCS SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCT = Proved Refl
-      %~ SCT SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCT SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCU = Proved Refl
-      %~ SCU SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCU SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCV = Proved Refl
-      %~ SCV SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCV SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCW = Proved Refl
-      %~ SCW SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCW SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCX = Proved Refl
-      %~ SCX SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCX SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCY SCY = Proved Refl
-      %~ SCY SCZ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCA
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCB
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCC
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCD
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCE
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCF
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCG
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCH
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCI
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCJ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCK
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCL
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCM
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCN
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCO
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCP
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCQ
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCR
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCS
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCT
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCU
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCV
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCW
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCX
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCY
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SCZ SCZ = Proved Refl
-    instance SingI CA where
-      sing = SCA
-    instance SingI CB where
-      sing = SCB
-    instance SingI CC where
-      sing = SCC
-    instance SingI CD where
-      sing = SCD
-    instance SingI CE where
-      sing = SCE
-    instance SingI CF where
-      sing = SCF
-    instance SingI CG where
-      sing = SCG
-    instance SingI CH where
-      sing = SCH
-    instance SingI CI where
-      sing = SCI
-    instance SingI CJ where
-      sing = SCJ
-    instance SingI CK where
-      sing = SCK
-    instance SingI CL where
-      sing = SCL
-    instance SingI CM where
-      sing = SCM
-    instance SingI CN where
-      sing = SCN
-    instance SingI CO where
-      sing = SCO
-    instance SingI CP where
-      sing = SCP
-    instance SingI CQ where
-      sing = SCQ
-    instance SingI CR where
-      sing = SCR
-    instance SingI CS where
-      sing = SCS
-    instance SingI CT where
-      sing = SCT
-    instance SingI CU where
-      sing = SCU
-    instance SingI CV where
-      sing = SCV
-    instance SingI CW where
-      sing = SCW
-    instance SingI CX where
-      sing = SCX
-    instance SingI CY where
-      sing = SCY
-    instance SingI CZ where
-      sing = SCZ
-    data instance Sing (z :: Attribute)
-      = forall (n :: [AChar]) (n :: U). z ~ Attr n n =>
-        SAttr (Sing n) (Sing n)
-    type SAttribute (z :: Attribute) = Sing z
-    instance SingKind (KProxy :: KProxy Attribute) where
-      type instance DemoteRep (KProxy :: KProxy Attribute) = Attribute
-      fromSing (SAttr b b) = Attr (fromSing b) (fromSing b)
-      toSing (Attr b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy [AChar]), 
-               toSing b :: SomeSing (KProxy :: KProxy U))
-          of {
-            (SomeSing c, SomeSing c) -> SomeSing (SAttr c c) }
-    instance (SingI n, SingI n) =>
-             SingI (Attr (n :: [AChar]) (n :: U)) where
-      sing = SAttr sing sing
-    data instance Sing (z :: Schema)
-      = forall (n :: [Attribute]). z ~ Sch n => SSch (Sing n)
-    type SSchema (z :: Schema) = Sing z
-    instance SingKind (KProxy :: KProxy Schema) where
-      type instance DemoteRep (KProxy :: KProxy Schema) = Schema
-      fromSing (SSch b) = Sch (fromSing b)
-      toSing (Sch b)
-        = case toSing b :: SomeSing (KProxy :: KProxy [Attribute]) of {
-            SomeSing c -> SomeSing (SSch c) }
-    instance SingI n => SingI (Sch (n :: [Attribute])) where
-      sing = SSch sing
-    sAppend ::
-      forall (t :: Schema) (t :: Schema).
-      Sing t -> Sing t -> Sing (Append t t)
-    sAppend (SSch s1) (SSch s2) = SSch ((%:++) s1 s2)
-    sAttrNotIn ::
-      forall (t :: Attribute) (t :: Schema).
-      Sing t -> Sing t -> Sing (AttrNotIn t t)
-    sAttrNotIn _ (SSch SNil) = STrue
-    sAttrNotIn (SAttr name u) (SSch (SCons (SAttr name' _) t))
-      = (%:&&) ((%:/=) name name') (sAttrNotIn (SAttr name u) (SSch t))
-    sDisjoint ::
-      forall (t :: Schema) (t :: Schema).
-      Sing t -> Sing t -> Sing (Disjoint t t)
-    sDisjoint (SSch SNil) _ = STrue
-    sDisjoint (SSch (SCons h t)) s
-      = (%:&&) (sAttrNotIn h s) (sDisjoint (SSch t) s)
-    sOccurs ::
-      forall (t :: [AChar]) (t :: Schema).
-      Sing t -> Sing t -> Sing (Occurs t t)
-    sOccurs _ (SSch SNil) = SFalse
-    sOccurs name (SSch (SCons (SAttr name' _) attrs))
-      = (%:||) ((%:==) name name') (sOccurs name (SSch attrs))
-    sLookup ::
-      forall (t :: [AChar]) (t :: Schema).
-      Sing t -> Sing t -> Sing (Lookup t t)
-    sLookup _ (SSch SNil) = undefined
-    sLookup name (SSch (SCons (SAttr name' u) attrs))
-      = sIf ((%:==) name name') u (sLookup name (SSch attrs))
-GradingClient/Database.hs:0:0: Splicing declarations
-    return [] ======> GradingClient/Database.hs:0:0:
-GradingClient/Database.hs:(0,0)-(0,0): Splicing expression
-    cases ''Row [| r |] [| changeId (n ++ (getId r)) r |]
-  ======>
-    case r of {
-      EmptyRow _ -> changeId (n ++ (getId r)) r
-      ConsRow _ _ -> changeId (n ++ (getId r)) r }
diff --git a/tests/compile-and-dump/GradingClient/Database.ghc78.template b/tests/compile-and-dump/GradingClient/Database.ghc78.template
--- a/tests/compile-and-dump/GradingClient/Database.ghc78.template
+++ b/tests/compile-and-dump/GradingClient/Database.ghc78.template
@@ -255,27 +255,26 @@
     type CXSym0 = CX
     type CYSym0 = CY
     type CZSym0 = CZ
-    type AttrSym2 (t :: GHC.Types.[] AChar) (t :: U) = Attr t t
+    type AttrSym2 (t :: [AChar]) (t :: U) = Attr t t
     instance SuppressUnusedWarnings AttrSym1 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) AttrSym1KindInference GHC.Tuple.())
-    data AttrSym1 (l :: GHC.Types.[] AChar) (l :: TyFun U Attribute)
+    data AttrSym1 (l :: [AChar]) (l :: TyFun U Attribute)
       = forall arg. KindOf (Apply (AttrSym1 l) arg) ~ KindOf (AttrSym2 l arg) =>
         AttrSym1KindInference
     type instance Apply (AttrSym1 l) l = AttrSym2 l l
     instance SuppressUnusedWarnings AttrSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) AttrSym0KindInference GHC.Tuple.())
-    data AttrSym0 (l :: TyFun (GHC.Types.[] AChar) (TyFun U Attribute
-                                                    -> *))
+    data AttrSym0 (l :: TyFun [AChar] (TyFun U Attribute -> *))
       = forall arg. KindOf (Apply AttrSym0 arg) ~ KindOf (AttrSym1 arg) =>
         AttrSym0KindInference
     type instance Apply AttrSym0 l = AttrSym1 l
-    type SchSym1 (t :: GHC.Types.[] Attribute) = Sch t
+    type SchSym1 (t :: [Attribute]) = Sch t
     instance SuppressUnusedWarnings SchSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) SchSym0KindInference GHC.Tuple.())
-    data SchSym0 (l :: TyFun (GHC.Types.[] Attribute) Schema)
+    data SchSym0 (l :: TyFun [Attribute] Schema)
       = forall arg. KindOf (Apply SchSym0 arg) ~ KindOf (SchSym1 arg) =>
         SchSym0KindInference
     type instance Apply SchSym0 l = SchSym1 l
@@ -322,37 +321,33 @@
     type family Case_0123456789 name name' u attrs t where
       Case_0123456789 name name' u attrs True = u
       Case_0123456789 name name' u attrs False = Apply (Apply LookupSym0 name) (Apply SchSym0 attrs)
-    type LookupSym2 (t :: GHC.Types.[] AChar) (t :: Schema) =
-        Lookup t t
+    type LookupSym2 (t :: [AChar]) (t :: Schema) = Lookup t t
     instance SuppressUnusedWarnings LookupSym1 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) LookupSym1KindInference GHC.Tuple.())
-    data LookupSym1 (l :: GHC.Types.[] AChar) (l :: TyFun Schema U)
+    data LookupSym1 (l :: [AChar]) (l :: TyFun Schema U)
       = forall arg. KindOf (Apply (LookupSym1 l) arg) ~ KindOf (LookupSym2 l arg) =>
         LookupSym1KindInference
     type instance Apply (LookupSym1 l) l = LookupSym2 l l
     instance SuppressUnusedWarnings LookupSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) LookupSym0KindInference GHC.Tuple.())
-    data LookupSym0 (l :: TyFun (GHC.Types.[] AChar) (TyFun Schema U
-                                                      -> *))
+    data LookupSym0 (l :: TyFun [AChar] (TyFun Schema U -> *))
       = forall arg. KindOf (Apply LookupSym0 arg) ~ KindOf (LookupSym1 arg) =>
         LookupSym0KindInference
     type instance Apply LookupSym0 l = LookupSym1 l
-    type OccursSym2 (t :: GHC.Types.[] AChar) (t :: Schema) =
-        Occurs t t
+    type OccursSym2 (t :: [AChar]) (t :: Schema) = Occurs t t
     instance SuppressUnusedWarnings OccursSym1 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) OccursSym1KindInference GHC.Tuple.())
-    data OccursSym1 (l :: GHC.Types.[] AChar) (l :: TyFun Schema Bool)
+    data OccursSym1 (l :: [AChar]) (l :: TyFun Schema Bool)
       = forall arg. KindOf (Apply (OccursSym1 l) arg) ~ KindOf (OccursSym2 l arg) =>
         OccursSym1KindInference
     type instance Apply (OccursSym1 l) l = OccursSym2 l l
     instance SuppressUnusedWarnings OccursSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) OccursSym0KindInference GHC.Tuple.())
-    data OccursSym0 (l :: TyFun (GHC.Types.[] AChar) (TyFun Schema Bool
-                                                      -> *))
+    data OccursSym0 (l :: TyFun [AChar] (TyFun Schema Bool -> *))
       = forall arg. KindOf (Apply OccursSym0 arg) ~ KindOf (OccursSym1 arg) =>
         OccursSym0KindInference
     type instance Apply OccursSym0 l = OccursSym1 l
@@ -401,27 +396,25 @@
       = forall arg. KindOf (Apply AppendSym0 arg) ~ KindOf (AppendSym1 arg) =>
         AppendSym0KindInference
     type instance Apply AppendSym0 l = AppendSym1 l
-    type family Lookup (a :: GHC.Types.[] AChar)
-                       (a :: Schema) :: U where
-      Lookup z (Sch GHC.Types.[]) = Any
-      Lookup name (Sch ((GHC.Types.:) (Attr name' u) attrs)) = Case_0123456789 name name' u attrs (Let_0123456789Scrutinee_0123456789Sym4 name name' u attrs)
-    type family Occurs (a :: GHC.Types.[] AChar)
-                       (a :: Schema) :: Bool where
-      Occurs z (Sch GHC.Types.[]) = FalseSym0
-      Occurs name (Sch ((GHC.Types.:) (Attr name' z) attrs)) = Apply (Apply (:||$) (Apply (Apply (:==$) name) name')) (Apply (Apply OccursSym0 name) (Apply SchSym0 attrs))
+    type family Lookup (a :: [AChar]) (a :: Schema) :: U where
+      Lookup z (Sch '[]) = Any
+      Lookup name (Sch ((:) (Attr name' u) attrs)) = Case_0123456789 name name' u attrs (Let_0123456789Scrutinee_0123456789Sym4 name name' u attrs)
+    type family Occurs (a :: [AChar]) (a :: Schema) :: Bool where
+      Occurs z (Sch '[]) = FalseSym0
+      Occurs name (Sch ((:) (Attr name' z) attrs)) = Apply (Apply (:||$) (Apply (Apply (:==$) name) name')) (Apply (Apply OccursSym0 name) (Apply SchSym0 attrs))
     type family AttrNotIn (a :: Attribute) (a :: Schema) :: Bool where
-      AttrNotIn z (Sch GHC.Types.[]) = TrueSym0
-      AttrNotIn (Attr name u) (Sch ((GHC.Types.:) (Attr name' z) t)) = Apply (Apply (:&&$) (Apply (Apply (:/=$) name) name')) (Apply (Apply AttrNotInSym0 (Apply (Apply AttrSym0 name) u)) (Apply SchSym0 t))
+      AttrNotIn z (Sch '[]) = TrueSym0
+      AttrNotIn (Attr name u) (Sch ((:) (Attr name' z) t)) = Apply (Apply (:&&$) (Apply (Apply (:/=$) name) name')) (Apply (Apply AttrNotInSym0 (Apply (Apply AttrSym0 name) u)) (Apply SchSym0 t))
     type family Disjoint (a :: Schema) (a :: Schema) :: Bool where
-      Disjoint (Sch GHC.Types.[]) z = TrueSym0
-      Disjoint (Sch ((GHC.Types.:) h t)) s = Apply (Apply (:&&$) (Apply (Apply AttrNotInSym0 h) s)) (Apply (Apply DisjointSym0 (Apply SchSym0 t)) s)
+      Disjoint (Sch '[]) z = TrueSym0
+      Disjoint (Sch ((:) h t)) s = Apply (Apply (:&&$) (Apply (Apply AttrNotInSym0 h) s)) (Apply (Apply DisjointSym0 (Apply SchSym0 t)) s)
     type family Append (a :: Schema) (a :: Schema) :: Schema where
       Append (Sch s1) (Sch s2) = Apply SchSym0 (Apply (Apply (:++$) s1) s2)
     sLookup ::
-      forall (t :: GHC.Types.[] AChar) (t :: Schema).
+      forall (t :: [AChar]) (t :: Schema).
       Sing t -> Sing t -> Sing (Apply (Apply LookupSym0 t) t)
     sOccurs ::
-      forall (t :: GHC.Types.[] AChar) (t :: Schema).
+      forall (t :: [AChar]) (t :: Schema).
       Sing t -> Sing t -> Sing (Apply (Apply OccursSym0 t) t)
     sAttrNotIn ::
       forall (t :: Attribute) (t :: Schema).
@@ -435,8 +428,8 @@
     sLookup _ (SSch SNil)
       = let
           lambda ::
-            forall wild. (t ~ wild, t ~ Apply SchSym0 GHC.Types.[]) =>
-            Sing (Apply (Apply LookupSym0 wild) (Apply SchSym0 GHC.Types.[]))
+            forall wild. (t ~ wild, t ~ Apply SchSym0 '[]) =>
+            Sing (Apply (Apply LookupSym0 wild) (Apply SchSym0 '[]))
           lambda = undefined
         in lambda
     sLookup sName (SSch (SCons (SAttr sName' sU) sAttrs))
@@ -475,8 +468,8 @@
     sOccurs _ (SSch SNil)
       = let
           lambda ::
-            forall wild. (t ~ wild, t ~ Apply SchSym0 GHC.Types.[]) =>
-            Sing (Apply (Apply OccursSym0 wild) (Apply SchSym0 GHC.Types.[]))
+            forall wild. (t ~ wild, t ~ Apply SchSym0 '[]) =>
+            Sing (Apply (Apply OccursSym0 wild) (Apply SchSym0 '[]))
           lambda = SFalse
         in lambda
     sOccurs sName (SSch (SCons (SAttr sName' _) sAttrs))
@@ -501,8 +494,8 @@
     sAttrNotIn _ (SSch SNil)
       = let
           lambda ::
-            forall wild. (t ~ wild, t ~ Apply SchSym0 GHC.Types.[]) =>
-            Sing (Apply (Apply AttrNotInSym0 wild) (Apply SchSym0 GHC.Types.[]))
+            forall wild. (t ~ wild, t ~ Apply SchSym0 '[]) =>
+            Sing (Apply (Apply AttrNotInSym0 wild) (Apply SchSym0 '[]))
           lambda = STrue
         in lambda
     sAttrNotIn (SAttr sName sU) (SSch (SCons (SAttr sName' _) sT))
@@ -531,8 +524,8 @@
     sDisjoint (SSch SNil) _
       = let
           lambda ::
-            forall wild. (t ~ Apply SchSym0 GHC.Types.[], t ~ wild) =>
-            Sing (Apply (Apply DisjointSym0 (Apply SchSym0 GHC.Types.[])) wild)
+            forall wild. (t ~ Apply SchSym0 '[], t ~ wild) =>
+            Sing (Apply (Apply DisjointSym0 (Apply SchSym0 '[])) wild)
           lambda = STrue
         in lambda
     sDisjoint (SSch (SCons sH sT)) sS
@@ -4717,7 +4710,7 @@
                     _ -> error "Empty case reached -- this should be impossible" })
       (%~) SCZ SCZ = Proved Refl
     data instance Sing (z :: Attribute)
-      = forall (n :: GHC.Types.[] AChar) (n :: U). z ~ Attr n n =>
+      = forall (n :: [AChar]) (n :: U). z ~ Attr n n =>
         SAttr (Sing n) (Sing n)
     type SAttribute (z :: Attribute) = Sing z
     instance SingKind (KProxy :: KProxy Attribute) where
@@ -4726,20 +4719,18 @@
       toSing (Attr b b)
         = case
               GHC.Tuple.(,)
-                (toSing b :: SomeSing (KProxy :: KProxy (GHC.Types.[] AChar)))
+                (toSing b :: SomeSing (KProxy :: KProxy [AChar]))
                 (toSing b :: SomeSing (KProxy :: KProxy U))
           of {
             GHC.Tuple.(,) (SomeSing c) (SomeSing c) -> SomeSing (SAttr c c) }
     data instance Sing (z :: Schema)
-      = forall (n :: GHC.Types.[] Attribute). z ~ Sch n => SSch (Sing n)
+      = forall (n :: [Attribute]). z ~ Sch n => SSch (Sing n)
     type SSchema (z :: Schema) = Sing z
     instance SingKind (KProxy :: KProxy Schema) where
       type DemoteRep (KProxy :: KProxy Schema) = Schema
       fromSing (SSch b) = Sch (fromSing b)
       toSing (Sch b)
-        = case  toSing b ::
-                  SomeSing (KProxy :: KProxy (GHC.Types.[] Attribute))
-          of {
+        = case toSing b :: SomeSing (KProxy :: KProxy [Attribute]) of {
             SomeSing c -> SomeSing (SSch c) }
     instance SingI BOOL where
       sing = SBOOL
@@ -4803,9 +4794,9 @@
     instance SingI CZ where
       sing = SCZ
     instance (SingI n, SingI n) =>
-             SingI (Attr (n :: GHC.Types.[] AChar) (n :: U)) where
+             SingI (Attr (n :: [AChar]) (n :: U)) where
       sing = SAttr sing sing
-    instance SingI n => SingI (Sch (n :: GHC.Types.[] Attribute)) where
+    instance SingI n => SingI (Sch (n :: [Attribute])) where
       sing = SSch sing
 GradingClient/Database.hs:0:0: Splicing declarations
     return [] ======> GradingClient/Database.hs:0:0:
diff --git a/tests/compile-and-dump/GradingClient/Main.ghc76.template b/tests/compile-and-dump/GradingClient/Main.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/GradingClient/Main.ghc76.template
+++ /dev/null
@@ -1,84 +0,0 @@
-GradingClient/Main.hs:0:0: Splicing declarations
-    singletons
-      [d| lastName, majorName, gradeName, yearName, firstName :: [AChar]
-          lastName = [CL, CA, CS, CT]
-          firstName = [CF, CI, CR, CS, CT]
-          yearName = [CY, CE, CA, CR]
-          gradeName = [CG, CR, CA, CD, CE]
-          majorName = [CM, CA, CJ, CO, CR]
-          gradingSchema :: Schema
-          gradingSchema
-            = Sch
-                [Attr lastName STRING, Attr firstName STRING, Attr yearName NAT,
-                 Attr gradeName NAT, Attr majorName BOOL]
-          names :: Schema
-          names = Sch [Attr firstName STRING, Attr lastName STRING] |]
-  ======>
-    GradingClient/Main.hs:(0,0)-(0,0)
-    lastName :: [AChar]
-    majorName :: [AChar]
-    gradeName :: [AChar]
-    yearName :: [AChar]
-    firstName :: [AChar]
-    lastName = [CL, CA, CS, CT]
-    firstName = [CF, CI, CR, CS, CT]
-    yearName = [CY, CE, CA, CR]
-    gradeName = [CG, CR, CA, CD, CE]
-    majorName = [CM, CA, CJ, CO, CR]
-    gradingSchema :: Schema
-    gradingSchema
-      = Sch
-          [Attr lastName STRING, Attr firstName STRING, Attr yearName NAT,
-           Attr gradeName NAT, Attr majorName BOOL]
-    names :: Schema
-    names = Sch [Attr firstName STRING, Attr lastName STRING]
-    type LastName = '[CLSym0, CASym0, CSSym0, CTSym0]
-    type LastNameSym0 = LastName
-    type FirstName = '[CFSym0, CISym0, CRSym0, CSSym0, CTSym0]
-    type FirstNameSym0 = FirstName
-    type YearName = '[CYSym0, CESym0, CASym0, CRSym0]
-    type YearNameSym0 = YearName
-    type GradeName = '[CGSym0, CRSym0, CASym0, CDSym0, CESym0]
-    type GradeNameSym0 = GradeName
-    type MajorName = '[CMSym0, CASym0, CJSym0, COSym0, CRSym0]
-    type MajorNameSym0 = MajorName
-    type GradingSchema =
-        Apply SchSym0 '[Apply (Apply AttrSym0 LastNameSym0) STRINGSym0,
-                        Apply (Apply AttrSym0 FirstNameSym0) STRINGSym0,
-                        Apply (Apply AttrSym0 YearNameSym0) NATSym0,
-                        Apply (Apply AttrSym0 GradeNameSym0) NATSym0,
-                        Apply (Apply AttrSym0 MajorNameSym0) BOOLSym0]
-    type GradingSchemaSym0 = GradingSchema
-    type Names =
-        Apply SchSym0 '[Apply (Apply AttrSym0 FirstNameSym0) STRINGSym0,
-                        Apply (Apply AttrSym0 LastNameSym0) STRINGSym0]
-    type NamesSym0 = Names
-    sLastName :: Sing LastName
-    sMajorName :: Sing MajorName
-    sGradeName :: Sing GradeName
-    sYearName :: Sing YearName
-    sFirstName :: Sing FirstName
-    sLastName = SCons SCL (SCons SCA (SCons SCS (SCons SCT SNil)))
-    sFirstName
-      = SCons SCF (SCons SCI (SCons SCR (SCons SCS (SCons SCT SNil))))
-    sYearName = SCons SCY (SCons SCE (SCons SCA (SCons SCR SNil)))
-    sGradeName
-      = SCons SCG (SCons SCR (SCons SCA (SCons SCD (SCons SCE SNil))))
-    sMajorName
-      = SCons SCM (SCons SCA (SCons SCJ (SCons SCO (SCons SCR SNil))))
-    sGradingSchema :: Sing GradingSchema
-    sGradingSchema
-      = SSch
-          (SCons
-             (SAttr sLastName SSTRING)
-             (SCons
-                (SAttr sFirstName SSTRING)
-                (SCons
-                   (SAttr sYearName SNAT)
-                   (SCons
-                      (SAttr sGradeName SNAT) (SCons (SAttr sMajorName SBOOL) SNil)))))
-    sNames :: Sing Names
-    sNames
-      = SSch
-          (SCons
-             (SAttr sFirstName SSTRING) (SCons (SAttr sLastName SSTRING) SNil))
diff --git a/tests/compile-and-dump/GradingClient/Main.ghc78.template b/tests/compile-and-dump/GradingClient/Main.ghc78.template
--- a/tests/compile-and-dump/GradingClient/Main.ghc78.template
+++ b/tests/compile-and-dump/GradingClient/Main.ghc78.template
@@ -40,19 +40,19 @@
     type GradingSchemaSym0 = GradingSchema
     type NamesSym0 = Names
     type MajorName =
-        (Apply (Apply (:$) CMSym0) (Apply (Apply (:$) CASym0) (Apply (Apply (:$) CJSym0) (Apply (Apply (:$) COSym0) (Apply (Apply (:$) CRSym0) GHC.Types.[])))) :: GHC.Types.[] AChar)
+        (Apply (Apply (:$) CMSym0) (Apply (Apply (:$) CASym0) (Apply (Apply (:$) CJSym0) (Apply (Apply (:$) COSym0) (Apply (Apply (:$) CRSym0) '[])))) :: [AChar])
     type GradeName =
-        (Apply (Apply (:$) CGSym0) (Apply (Apply (:$) CRSym0) (Apply (Apply (:$) CASym0) (Apply (Apply (:$) CDSym0) (Apply (Apply (:$) CESym0) GHC.Types.[])))) :: GHC.Types.[] AChar)
+        (Apply (Apply (:$) CGSym0) (Apply (Apply (:$) CRSym0) (Apply (Apply (:$) CASym0) (Apply (Apply (:$) CDSym0) (Apply (Apply (:$) CESym0) '[])))) :: [AChar])
     type YearName =
-        (Apply (Apply (:$) CYSym0) (Apply (Apply (:$) CESym0) (Apply (Apply (:$) CASym0) (Apply (Apply (:$) CRSym0) GHC.Types.[]))) :: GHC.Types.[] AChar)
+        (Apply (Apply (:$) CYSym0) (Apply (Apply (:$) CESym0) (Apply (Apply (:$) CASym0) (Apply (Apply (:$) CRSym0) '[]))) :: [AChar])
     type FirstName =
-        (Apply (Apply (:$) CFSym0) (Apply (Apply (:$) CISym0) (Apply (Apply (:$) CRSym0) (Apply (Apply (:$) CSSym0) (Apply (Apply (:$) CTSym0) GHC.Types.[])))) :: GHC.Types.[] AChar)
+        (Apply (Apply (:$) CFSym0) (Apply (Apply (:$) CISym0) (Apply (Apply (:$) CRSym0) (Apply (Apply (:$) CSSym0) (Apply (Apply (:$) CTSym0) '[])))) :: [AChar])
     type LastName =
-        (Apply (Apply (:$) CLSym0) (Apply (Apply (:$) CASym0) (Apply (Apply (:$) CSSym0) (Apply (Apply (:$) CTSym0) GHC.Types.[]))) :: GHC.Types.[] AChar)
+        (Apply (Apply (:$) CLSym0) (Apply (Apply (:$) CASym0) (Apply (Apply (:$) CSSym0) (Apply (Apply (:$) CTSym0) '[]))) :: [AChar])
     type GradingSchema =
-        (Apply SchSym0 (Apply (Apply (:$) (Apply (Apply AttrSym0 LastNameSym0) STRINGSym0)) (Apply (Apply (:$) (Apply (Apply AttrSym0 FirstNameSym0) STRINGSym0)) (Apply (Apply (:$) (Apply (Apply AttrSym0 YearNameSym0) NATSym0)) (Apply (Apply (:$) (Apply (Apply AttrSym0 GradeNameSym0) NATSym0)) (Apply (Apply (:$) (Apply (Apply AttrSym0 MajorNameSym0) BOOLSym0)) GHC.Types.[]))))) :: Schema)
+        (Apply SchSym0 (Apply (Apply (:$) (Apply (Apply AttrSym0 LastNameSym0) STRINGSym0)) (Apply (Apply (:$) (Apply (Apply AttrSym0 FirstNameSym0) STRINGSym0)) (Apply (Apply (:$) (Apply (Apply AttrSym0 YearNameSym0) NATSym0)) (Apply (Apply (:$) (Apply (Apply AttrSym0 GradeNameSym0) NATSym0)) (Apply (Apply (:$) (Apply (Apply AttrSym0 MajorNameSym0) BOOLSym0)) '[]))))) :: Schema)
     type Names =
-        (Apply SchSym0 (Apply (Apply (:$) (Apply (Apply AttrSym0 FirstNameSym0) STRINGSym0)) (Apply (Apply (:$) (Apply (Apply AttrSym0 LastNameSym0) STRINGSym0)) GHC.Types.[])) :: Schema)
+        (Apply SchSym0 (Apply (Apply (:$) (Apply (Apply AttrSym0 FirstNameSym0) STRINGSym0)) (Apply (Apply (:$) (Apply (Apply AttrSym0 LastNameSym0) STRINGSym0)) '[])) :: Schema)
     sMajorName :: Sing MajorNameSym0
     sGradeName :: Sing GradeNameSym0
     sYearName :: Sing YearNameSym0
diff --git a/tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc76.template b/tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc76.template
+++ /dev/null
@@ -1,92 +0,0 @@
-InsertionSort/InsertionSortImp.hs:0:0: Splicing declarations
-    singletons [d| data Nat = Zero | Succ Nat |]
-  ======>
-    InsertionSort/InsertionSortImp.hs:(0,0)-(0,0)
-    data Nat = Zero | Succ Nat
-    type NatTyCtor = Nat
-    type NatTyCtorSym0 = NatTyCtor
-    type ZeroSym0 = Zero
-    data SuccSym0 (k :: TyFun Nat Nat)
-    type instance Apply SuccSym0 a = Succ a
-    data instance Sing (z :: Nat)
-      = z ~ Zero => SZero |
-        forall (n :: Nat). z ~ Succ n => SSucc (Sing n)
-    type SNat (z :: Nat) = Sing z
-    instance SingKind (KProxy :: KProxy Nat) where
-      type instance DemoteRep (KProxy :: KProxy Nat) = Nat
-      fromSing SZero = Zero
-      fromSing (SSucc b) = Succ (fromSing b)
-      toSing Zero = SomeSing SZero
-      toSing (Succ b)
-        = case toSing b :: SomeSing (KProxy :: KProxy Nat) of {
-            SomeSing c -> SomeSing (SSucc c) }
-    instance SingI Zero where
-      sing = SZero
-    instance SingI n => SingI (Succ (n :: Nat)) where
-      sing = SSucc sing
-InsertionSort/InsertionSortImp.hs:0:0: Splicing declarations
-    singletons
-      [d| leq :: Nat -> Nat -> Bool
-          leq Zero _ = True
-          leq (Succ _) Zero = False
-          leq (Succ a) (Succ b) = leq a b
-          insert :: Nat -> [Nat] -> [Nat]
-          insert n [] = [n]
-          insert n (h : t)
-            = if leq n h then (n : h : t) else h : (insert n t)
-          insertionSort :: [Nat] -> [Nat]
-          insertionSort [] = []
-          insertionSort (h : t) = insert h (insertionSort t) |]
-  ======>
-    InsertionSort/InsertionSortImp.hs:(0,0)-(0,0)
-    leq :: Nat -> Nat -> Bool
-    leq Zero _ = True
-    leq (Succ _) Zero = False
-    leq (Succ a) (Succ b) = leq a b
-    insert :: Nat -> [Nat] -> [Nat]
-    insert n GHC.Types.[] = [n]
-    insert n (h GHC.Types.: t)
-      = if leq n h then
-            (n GHC.Types.: (h GHC.Types.: t))
-        else
-            (h GHC.Types.: (insert n t))
-    insertionSort :: [Nat] -> [Nat]
-    insertionSort GHC.Types.[] = GHC.Types.[]
-    insertionSort (h GHC.Types.: t) = insert h (insertionSort t)
-    type family Leq (a :: Nat) (a :: Nat) :: Bool
-    type instance Leq Zero z = TrueSym0
-    type instance Leq (Succ z) Zero = FalseSym0
-    type instance Leq (Succ a) (Succ b) = Apply (Apply LeqSym0 a) b
-    data LeqSym1 (l :: Nat) (l :: TyFun Nat Bool)
-    data LeqSym0 (k :: TyFun Nat (TyFun Nat Bool -> *))
-    type instance Apply (LeqSym1 a) a = Leq a a
-    type instance Apply LeqSym0 a = LeqSym1 a
-    type family Insert (a :: Nat) (a :: [Nat]) :: [Nat]
-    type instance Insert n GHC.Types.[] = '[n]
-    type instance Insert n (GHC.Types.: h t) =
-        If (Apply (Apply LeqSym0 n) h) (Apply (Apply :$ n) (Apply (Apply :$ h) t)) (Apply (Apply :$ h) (Apply (Apply InsertSym0 n) t))
-    data InsertSym1 (l :: Nat) (l :: TyFun [Nat] [Nat])
-    data InsertSym0 (k :: TyFun Nat (TyFun [Nat] [Nat] -> *))
-    type instance Apply (InsertSym1 a) a = Insert a a
-    type instance Apply InsertSym0 a = InsertSym1 a
-    type family InsertionSort (a :: [Nat]) :: [Nat]
-    type instance InsertionSort GHC.Types.[] = GHC.Types.[]
-    type instance InsertionSort (GHC.Types.: h t) =
-        Apply (Apply InsertSym0 h) (Apply InsertionSortSym0 t)
-    data InsertionSortSym0 (k :: TyFun [Nat] [Nat])
-    type instance Apply InsertionSortSym0 a = InsertionSort a
-    sLeq ::
-      forall (t :: Nat) (t :: Nat). Sing t -> Sing t -> Sing (Leq t t)
-    sLeq SZero _ = STrue
-    sLeq (SSucc _) SZero = SFalse
-    sLeq (SSucc a) (SSucc b) = sLeq a b
-    sInsert ::
-      forall (t :: Nat) (t :: [Nat]).
-      Sing t -> Sing t -> Sing (Insert t t)
-    sInsert n SNil = SCons n SNil
-    sInsert n (SCons h t)
-      = sIf (sLeq n h) (SCons n (SCons h t)) (SCons h (sInsert n t))
-    sInsertionSort ::
-      forall (t :: [Nat]). Sing t -> Sing (InsertionSort t)
-    sInsertionSort SNil = SNil
-    sInsertionSort (SCons h t) = sInsert h (sInsertionSort t)
diff --git a/tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc78.template b/tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc78.template
--- a/tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc78.template
+++ b/tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc78.template
@@ -106,28 +106,26 @@
       = forall arg. KindOf (Apply LeqSym0 arg) ~ KindOf (LeqSym1 arg) =>
         LeqSym0KindInference
     type instance Apply LeqSym0 l = LeqSym1 l
-    type InsertSym2 (t :: Nat) (t :: GHC.Types.[] Nat) = Insert t t
+    type InsertSym2 (t :: Nat) (t :: [Nat]) = Insert t t
     instance SuppressUnusedWarnings InsertSym1 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) InsertSym1KindInference GHC.Tuple.())
-    data InsertSym1 (l :: Nat)
-                    (l :: TyFun (GHC.Types.[] Nat) (GHC.Types.[] Nat))
+    data InsertSym1 (l :: Nat) (l :: TyFun [Nat] [Nat])
       = forall arg. KindOf (Apply (InsertSym1 l) arg) ~ KindOf (InsertSym2 l arg) =>
         InsertSym1KindInference
     type instance Apply (InsertSym1 l) l = InsertSym2 l l
     instance SuppressUnusedWarnings InsertSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) InsertSym0KindInference GHC.Tuple.())
-    data InsertSym0 (l :: TyFun Nat (TyFun (GHC.Types.[] Nat) (GHC.Types.[] Nat)
-                                     -> *))
+    data InsertSym0 (l :: TyFun Nat (TyFun [Nat] [Nat] -> *))
       = forall arg. KindOf (Apply InsertSym0 arg) ~ KindOf (InsertSym1 arg) =>
         InsertSym0KindInference
     type instance Apply InsertSym0 l = InsertSym1 l
-    type InsertionSortSym1 (t :: GHC.Types.[] Nat) = InsertionSort t
+    type InsertionSortSym1 (t :: [Nat]) = InsertionSort t
     instance SuppressUnusedWarnings InsertionSortSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) InsertionSortSym0KindInference GHC.Tuple.())
-    data InsertionSortSym0 (l :: TyFun (GHC.Types.[] Nat) (GHC.Types.[] Nat))
+    data InsertionSortSym0 (l :: TyFun [Nat] [Nat])
       = forall arg. KindOf (Apply InsertionSortSym0 arg) ~ KindOf (InsertionSortSym1 arg) =>
         InsertionSortSym0KindInference
     type instance Apply InsertionSortSym0 l = InsertionSortSym1 l
@@ -135,22 +133,20 @@
       Leq Zero z = TrueSym0
       Leq (Succ z) Zero = FalseSym0
       Leq (Succ a) (Succ b) = Apply (Apply LeqSym0 a) b
-    type family Insert (a :: Nat)
-                       (a :: GHC.Types.[] Nat) :: GHC.Types.[] Nat where
-      Insert n GHC.Types.[] = Apply (Apply (:$) n) GHC.Types.[]
-      Insert n ((GHC.Types.:) h t) = Case_0123456789 n h t (Let_0123456789Scrutinee_0123456789Sym3 n h t)
-    type family InsertionSort (a :: GHC.Types.[] Nat) :: GHC.Types.[] Nat where
-      InsertionSort GHC.Types.[] = GHC.Types.[]
-      InsertionSort ((GHC.Types.:) h t) = Apply (Apply InsertSym0 h) (Apply InsertionSortSym0 t)
+    type family Insert (a :: Nat) (a :: [Nat]) :: [Nat] where
+      Insert n '[] = Apply (Apply (:$) n) '[]
+      Insert n ((:) h t) = Case_0123456789 n h t (Let_0123456789Scrutinee_0123456789Sym3 n h t)
+    type family InsertionSort (a :: [Nat]) :: [Nat] where
+      InsertionSort '[] = '[]
+      InsertionSort ((:) h t) = Apply (Apply InsertSym0 h) (Apply InsertionSortSym0 t)
     sLeq ::
       forall (t :: Nat) (t :: Nat).
       Sing t -> Sing t -> Sing (Apply (Apply LeqSym0 t) t)
     sInsert ::
-      forall (t :: Nat) (t :: GHC.Types.[] Nat).
+      forall (t :: Nat) (t :: [Nat]).
       Sing t -> Sing t -> Sing (Apply (Apply InsertSym0 t) t)
     sInsertionSort ::
-      forall (t :: GHC.Types.[] Nat).
-      Sing t -> Sing (Apply InsertionSortSym0 t)
+      forall (t :: [Nat]). Sing t -> Sing (Apply InsertionSortSym0 t)
     sLeq SZero _
       = let
           lambda ::
@@ -179,8 +175,8 @@
     sInsert sN SNil
       = let
           lambda ::
-            forall n. (t ~ n, t ~ GHC.Types.[]) =>
-            Sing n -> Sing (Apply (Apply InsertSym0 n) GHC.Types.[])
+            forall n. (t ~ n, t ~ '[]) =>
+            Sing n -> Sing (Apply (Apply InsertSym0 n) '[])
           lambda n
             = applySing
                 (applySing (singFun2 (Proxy :: Proxy (:$)) SCons) n) SNil
@@ -222,8 +218,7 @@
         in lambda sN sH sT
     sInsertionSort SNil
       = let
-          lambda ::
-            t ~ GHC.Types.[] => Sing (Apply InsertionSortSym0 GHC.Types.[])
+          lambda :: t ~ '[] => Sing (Apply InsertionSortSym0 '[])
           lambda = SNil
         in lambda
     sInsertionSort (SCons sH sT)
diff --git a/tests/compile-and-dump/Promote/Classes.ghc76.template b/tests/compile-and-dump/Promote/Classes.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Promote/Classes.ghc76.template
+++ /dev/null
diff --git a/tests/compile-and-dump/Promote/Classes.ghc78.template b/tests/compile-and-dump/Promote/Classes.ghc78.template
--- a/tests/compile-and-dump/Promote/Classes.ghc78.template
+++ b/tests/compile-and-dump/Promote/Classes.ghc78.template
@@ -119,8 +119,8 @@
       type Mycompare (Zero :: Nat) (Succ z :: Nat) = (LTSym0 :: Ordering)
       type Mycompare (Succ z :: Nat) (Zero :: Nat) = (GTSym0 :: Ordering)
       type Mycompare (Succ n :: Nat) (Succ m :: Nat) = (Apply (Apply MycompareSym0 m) n :: Ordering)
-    instance PMyOrd (KProxy :: KProxy GHC.Tuple.()) where
-      type Mycompare (z :: GHC.Tuple.()) (a_0123456789 :: GHC.Tuple.()) = (Apply (Apply ConstSym0 EQSym0) a_0123456789 :: Ordering)
+    instance PMyOrd (KProxy :: KProxy ()) where
+      type Mycompare (z :: ()) (a_0123456789 :: ()) = (Apply (Apply ConstSym0 EQSym0) a_0123456789 :: Ordering)
     instance PMyOrd (KProxy :: KProxy Foo) where
       type Mycompare (a_0123456789 :: Foo) (a_0123456789 :: Foo) = (Apply (Apply FooCompareSym0 a_0123456789) a_0123456789 :: Ordering)
     type ASym0 = A
diff --git a/tests/compile-and-dump/Promote/Constructors.ghc76.template b/tests/compile-and-dump/Promote/Constructors.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Promote/Constructors.ghc76.template
+++ /dev/null
@@ -1,42 +0,0 @@
-Promote/Constructors.hs:0:0: Splicing declarations
-    promote
-      [d| data Foo = Foo | Foo :+ Foo
-          data Bar = Bar Bar Bar Bar Bar Foo |]
-  ======>
-    Promote/Constructors.hs:(0,0)-(0,0)
-    data Foo = Foo | Foo :+ Foo
-    data Bar = Bar Bar Bar Bar Bar Foo
-    type FooTyCtor = Foo
-    type FooTyCtorSym0 = FooTyCtor
-    type FooSym0 = Foo
-    data (:+$$) (l :: Foo) (l :: TyFun Foo Foo)
-    data (:+$) (k :: TyFun Foo (TyFun Foo Foo -> *))
-    type instance Apply (:+$$ a) a = :+ a a
-    type instance Apply :+$ a = :+$$ a
-    type BarTyCtor = Bar
-    type BarTyCtorSym0 = BarTyCtor
-    data BarSym4 (l :: Bar)
-                 (l :: Bar)
-                 (l :: Bar)
-                 (l :: Bar)
-                 (l :: TyFun Foo Bar)
-    data BarSym3 (l :: Bar)
-                 (l :: Bar)
-                 (l :: Bar)
-                 (l :: TyFun Bar (TyFun Foo Bar -> *))
-    data BarSym2 (l :: Bar)
-                 (l :: Bar)
-                 (l :: TyFun Bar (TyFun Bar (TyFun Foo Bar -> *) -> *))
-    data BarSym1 (l :: Bar)
-                 (l :: TyFun Bar (TyFun Bar (TyFun Bar (TyFun Foo Bar -> *) -> *)
-                                  -> *))
-    data BarSym0 (k :: TyFun Bar (TyFun Bar (TyFun Bar (TyFun Bar (TyFun Foo Bar
-                                                                   -> *)
-                                                        -> *)
-                                             -> *)
-                                  -> *))
-    type instance Apply (BarSym4 a a a a) a = Bar a a a a a
-    type instance Apply (BarSym3 a a a) a = BarSym4 a a a a
-    type instance Apply (BarSym2 a a) a = BarSym3 a a a
-    type instance Apply (BarSym1 a) a = BarSym2 a a
-    type instance Apply BarSym0 a = BarSym1 a
diff --git a/tests/compile-and-dump/Promote/GenDefunSymbols.ghc76.template b/tests/compile-and-dump/Promote/GenDefunSymbols.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Promote/GenDefunSymbols.ghc76.template
+++ /dev/null
@@ -1,15 +0,0 @@
-Promote/GenDefunSymbols.hs:0:0: Splicing declarations
-    genDefunSymbols [''LiftMaybe, ''Nat]
-  ======>
-    Promote/GenDefunSymbols.hs:0:0:
-    data LiftMaybeSym1 (l :: TyFun a b -> *)
-                       (l :: TyFun (Maybe a) (Maybe b))
-    data LiftMaybeSym0 (k :: TyFun (TyFun a b
-                                    -> *) (TyFun (Maybe a) (Maybe b) -> *))
-    type instance Apply (LiftMaybeSym1 a) a = LiftMaybe a a
-    type instance Apply LiftMaybeSym0 a = LiftMaybeSym1 a
-    type NatTyCtor = Nat
-    type NatTyCtorSym0 = NatTyCtor
-    type ZeroSym0 = Zero
-    data SuccSym0 (k :: TyFun Nat Nat)
-    type instance Apply SuccSym0 a = Succ a
diff --git a/tests/compile-and-dump/Promote/Newtypes.ghc76.template b/tests/compile-and-dump/Promote/Newtypes.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Promote/Newtypes.ghc76.template
+++ /dev/null
@@ -1,2 +0,0 @@
-Promote/Newtypes.hs:0:0:
-    Newtypes don't promote under GHC 7.6. Use <<data>> instead or upgrade GHC.
diff --git a/tests/compile-and-dump/Promote/TopLevelPatterns.ghc78.template b/tests/compile-and-dump/Promote/TopLevelPatterns.ghc78.template
--- a/tests/compile-and-dump/Promote/TopLevelPatterns.ghc78.template
+++ b/tests/compile-and-dump/Promote/TopLevelPatterns.ghc78.template
@@ -38,21 +38,21 @@
     m :: Bool
     [l, m] = [not True, id False]
     type family Case_0123456789 a_0123456789 t where
-      Case_0123456789 a_0123456789 ((GHC.Types.:) y_0123456789 ((GHC.Types.:) z GHC.Types.[])) = y_0123456789
+      Case_0123456789 a_0123456789 '[y_0123456789, z] = y_0123456789
     type family Case_0123456789 a_0123456789 t where
-      Case_0123456789 a_0123456789 ((GHC.Types.:) z ((GHC.Types.:) y_0123456789 GHC.Types.[])) = y_0123456789
+      Case_0123456789 a_0123456789 '[z, y_0123456789] = y_0123456789
     type family Case_0123456789 a_0123456789 t where
-      Case_0123456789 a_0123456789 (GHC.Tuple.(,) y_0123456789 z) = y_0123456789
+      Case_0123456789 a_0123456789 '(y_0123456789, z) = y_0123456789
     type family Case_0123456789 a_0123456789 t where
-      Case_0123456789 a_0123456789 (GHC.Tuple.(,) z y_0123456789) = y_0123456789
+      Case_0123456789 a_0123456789 '(z, y_0123456789) = y_0123456789
     type family Case_0123456789 t where
       Case_0123456789 (Bar y_0123456789 z) = y_0123456789
     type family Case_0123456789 t where
       Case_0123456789 (Bar z y_0123456789) = y_0123456789
     type family Case_0123456789 t where
-      Case_0123456789 ((GHC.Types.:) y_0123456789 ((GHC.Types.:) z GHC.Types.[])) = y_0123456789
+      Case_0123456789 '[y_0123456789, z] = y_0123456789
     type family Case_0123456789 t where
-      Case_0123456789 ((GHC.Types.:) z ((GHC.Types.:) y_0123456789 GHC.Types.[])) = y_0123456789
+      Case_0123456789 '[z, y_0123456789] = y_0123456789
     type NotSym1 (t :: Bool) = Not t
     instance SuppressUnusedWarnings NotSym0 where
       suppressUnusedWarnings _
@@ -127,12 +127,12 @@
     type L = (Case_0123456789 X_0123456789Sym0 :: Bool)
     type M = (Case_0123456789 X_0123456789Sym0 :: Bool)
     type X_0123456789 =
-        Apply (Apply (:$) NotSym0) (Apply (Apply (:$) IdSym0) GHC.Types.[])
+        Apply (Apply (:$) NotSym0) (Apply (Apply (:$) IdSym0) '[])
     type X_0123456789 = Apply (Apply Tuple2Sym0 FSym0) GSym0
     type X_0123456789 =
         Apply (Apply BarSym0 TrueSym0) (Apply HSym0 FalseSym0)
     type X_0123456789 =
-        Apply (Apply (:$) (Apply NotSym0 TrueSym0)) (Apply (Apply (:$) (Apply IdSym0 FalseSym0)) GHC.Types.[])
+        Apply (Apply (:$) (Apply NotSym0 TrueSym0)) (Apply (Apply (:$) (Apply IdSym0 FalseSym0)) '[])
     type FalseSym0 = False
     type TrueSym0 = True
     type BarSym2 (t :: Bool) (t :: Bool) = Bar t t
diff --git a/tests/compile-and-dump/Singletons/AsPattern.ghc76.template b/tests/compile-and-dump/Singletons/AsPattern.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/AsPattern.ghc76.template
+++ /dev/null
@@ -1,104 +0,0 @@
-Singletons/AtPattern.hs: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 |]
-  ======>
-    Singletons/AtPattern.hs:(0,0)-(0,0)
-    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@GHC.Types.[] = p
-    foo p@[_] = p
-    foo p@(_ GHC.Types.: _) = p
-    type BazTyCtor = Baz
-    type BazTyCtorSym0 = BazTyCtor
-    data BazSym2 (l :: Nat) (l :: Nat) (l :: TyFun Nat Baz)
-    data BazSym1 (l :: Nat) (l :: TyFun Nat (TyFun Nat Baz -> *))
-    data BazSym0 (k :: TyFun Nat (TyFun Nat (TyFun Nat Baz -> *) -> *))
-    type instance Apply (BazSym2 a a) a = Baz a a a
-    type instance Apply (BazSym1 a) a = BazSym2 a a
-    type instance Apply BazSym0 a = BazSym1 a
-    type family MaybePlus (a :: Maybe Nat) :: Maybe Nat
-    type instance MaybePlus (Just n) =
-        Apply JustSym0 (Apply (Apply PlusSym0 (Apply SuccSym0 ZeroSym0)) n)
-    type instance MaybePlus Nothing = NothingSym0
-    data MaybePlusSym0 (k :: TyFun (Maybe Nat) (Maybe Nat))
-    type instance Apply MaybePlusSym0 a = MaybePlus a
-    type family Bar (a :: Maybe Nat) :: Maybe Nat
-    type instance Bar (Just z) = Apply JustSym0 z
-    type instance Bar Nothing = NothingSym0
-    data BarSym0 (k :: TyFun (Maybe Nat) (Maybe Nat))
-    type instance Apply BarSym0 a = Bar a
-    type family Baz_ (a :: Maybe Baz) :: Maybe Baz
-    type instance Baz_ Nothing = NothingSym0
-    type instance Baz_ (Just (Baz z z z)) =
-        Apply JustSym0 (Apply (Apply (Apply BazSym0 z) z) z)
-    data Baz_Sym0 (k :: TyFun (Maybe Baz) (Maybe Baz))
-    type instance Apply Baz_Sym0 a = Baz_ a
-    type family Tup (a :: (Nat, Nat)) :: (Nat, Nat)
-    type instance Tup '(z, z) = Apply (Apply Tuple2Sym0 z) z
-    data TupSym0 (k :: TyFun (Nat, Nat) (Nat, Nat))
-    type instance Apply TupSym0 a = Tup a
-    type family Foo (a :: [Nat]) :: [Nat]
-    type instance Foo GHC.Types.[] = GHC.Types.[]
-    type instance Foo '[z] = Apply (Apply :$ z) GHC.Types.[]
-    type instance Foo (GHC.Types.: z z) = Apply (Apply :$ z) z
-    data FooSym0 (k :: TyFun [Nat] [Nat])
-    type instance Apply FooSym0 a = Foo a
-    sMaybePlus :: forall (t :: Maybe Nat). Sing t -> Sing (MaybePlus t)
-    sMaybePlus (SJust n) = SJust (sPlus (SSucc SZero) n)
-    sMaybePlus p@SNothing = p
-    sBar :: forall (t :: Maybe Nat). Sing t -> Sing (Bar t)
-    sBar x@(SJust _) = x
-    sBar SNothing = SNothing
-    data instance Sing (z :: Baz)
-      = forall (n :: Nat) (n :: Nat) (n :: Nat). z ~ Baz n n n =>
-        SBaz (Sing n) (Sing n) (Sing n)
-    type SBaz (z :: Baz) = Sing z
-    instance SingKind (KProxy :: KProxy Baz) where
-      type instance DemoteRep (KProxy :: KProxy Baz) = Baz
-      fromSing (SBaz b b b) = Baz (fromSing b) (fromSing b) (fromSing b)
-      toSing (Baz b b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy Nat), 
-               toSing b :: SomeSing (KProxy :: KProxy Nat), 
-               toSing b :: SomeSing (KProxy :: KProxy 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
-    sBaz_ :: forall (t :: Maybe Baz). Sing t -> Sing (Baz_ t)
-    sBaz_ p@SNothing = p
-    sBaz_ p@(SJust (SBaz _ _ _)) = p
-    sTup :: forall (t :: (Nat, Nat)). Sing t -> Sing (Tup t)
-    sTup p@(STuple2 _ _) = p
-    sFoo :: forall (t :: [Nat]). Sing t -> Sing (Foo t)
-    sFoo p@SNil = p
-    sFoo p@(SCons _ SNil) = p
-    sFoo p@(SCons _ _) = p
diff --git a/tests/compile-and-dump/Singletons/AsPattern.ghc78.template b/tests/compile-and-dump/Singletons/AsPattern.ghc78.template
--- a/tests/compile-and-dump/Singletons/AsPattern.ghc78.template
+++ b/tests/compile-and-dump/Singletons/AsPattern.ghc78.template
@@ -58,7 +58,7 @@
         BazSym0KindInference
     type instance Apply BazSym0 l = BazSym1 l
     type Let_0123456789PSym0 = Let_0123456789P
-    type Let_0123456789P = GHC.Types.[]
+    type Let_0123456789P = '[]
     type Let_0123456789PSym1 t = Let_0123456789P t
     instance SuppressUnusedWarnings Let_0123456789PSym0 where
       suppressUnusedWarnings _
@@ -68,7 +68,7 @@
         Let_0123456789PSym0KindInference
     type instance Apply Let_0123456789PSym0 l = Let_0123456789PSym1 l
     type Let_0123456789P wild_0123456789 =
-        Apply (Apply (:$) wild_0123456789) GHC.Types.[]
+        Apply (Apply (:$) wild_0123456789) '[]
     type Let_0123456789PSym2 t t = Let_0123456789P t t
     instance SuppressUnusedWarnings Let_0123456789PSym1 where
       suppressUnusedWarnings _
@@ -143,19 +143,19 @@
         Apply JustSym0 wild_0123456789
     type Let_0123456789PSym0 = Let_0123456789P
     type Let_0123456789P = NothingSym0
-    type FooSym1 (t :: GHC.Types.[] Nat) = Foo t
+    type FooSym1 (t :: [Nat]) = Foo t
     instance SuppressUnusedWarnings FooSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) FooSym0KindInference GHC.Tuple.())
-    data FooSym0 (l :: TyFun (GHC.Types.[] Nat) (GHC.Types.[] Nat))
+    data FooSym0 (l :: TyFun [Nat] [Nat])
       = forall arg. KindOf (Apply FooSym0 arg) ~ KindOf (FooSym1 arg) =>
         FooSym0KindInference
     type instance Apply FooSym0 l = FooSym1 l
-    type TupSym1 (t :: GHC.Tuple.(,) Nat Nat) = Tup t
+    type TupSym1 (t :: (Nat, Nat)) = Tup t
     instance SuppressUnusedWarnings TupSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) TupSym0KindInference GHC.Tuple.())
-    data TupSym0 (l :: TyFun (GHC.Tuple.(,) Nat Nat) (GHC.Tuple.(,) Nat Nat))
+    data TupSym0 (l :: TyFun (Nat, Nat) (Nat, Nat))
       = forall arg. KindOf (Apply TupSym0 arg) ~ KindOf (TupSym1 arg) =>
         TupSym0KindInference
     type instance Apply TupSym0 l = TupSym1 l
@@ -183,12 +183,13 @@
       = forall arg. KindOf (Apply MaybePlusSym0 arg) ~ KindOf (MaybePlusSym1 arg) =>
         MaybePlusSym0KindInference
     type instance Apply MaybePlusSym0 l = MaybePlusSym1 l
-    type family Foo (a :: GHC.Types.[] Nat) :: GHC.Types.[] Nat where
-      Foo GHC.Types.[] = Let_0123456789PSym0
-      Foo ((GHC.Types.:) wild_0123456789 GHC.Types.[]) = Let_0123456789PSym1 wild_0123456789
-      Foo ((GHC.Types.:) wild_0123456789 wild_0123456789) = Let_0123456789PSym2 wild_0123456789 wild_0123456789
-    type family Tup (a :: GHC.Tuple.(,) Nat Nat) :: GHC.Tuple.(,) Nat Nat where
-      Tup (GHC.Tuple.(,) wild_0123456789 wild_0123456789) = Let_0123456789PSym2 wild_0123456789 wild_0123456789
+    type family Foo (a :: [Nat]) :: [Nat] where
+      Foo '[] = Let_0123456789PSym0
+      Foo '[wild_0123456789] = Let_0123456789PSym1 wild_0123456789
+      Foo ((:) wild_0123456789 wild_0123456789) = Let_0123456789PSym2 wild_0123456789 wild_0123456789
+    type family Tup (a :: (Nat, Nat)) :: (Nat, Nat) where
+      Tup '(wild_0123456789,
+            wild_0123456789) = Let_0123456789PSym2 wild_0123456789 wild_0123456789
     type family Baz_ (a :: Maybe Baz) :: Maybe Baz where
       Baz_ Nothing = Let_0123456789PSym0
       Baz_ (Just (Baz wild_0123456789 wild_0123456789 wild_0123456789)) = Let_0123456789PSym3 wild_0123456789 wild_0123456789 wild_0123456789
@@ -198,18 +199,15 @@
     type family MaybePlus (a :: Maybe Nat) :: Maybe Nat where
       MaybePlus (Just n) = Apply JustSym0 (Apply (Apply PlusSym0 (Apply SuccSym0 ZeroSym0)) n)
       MaybePlus Nothing = Let_0123456789PSym0
-    sFoo ::
-      forall (t :: GHC.Types.[] Nat). Sing t -> Sing (Apply FooSym0 t)
-    sTup ::
-      forall (t :: GHC.Tuple.(,) Nat Nat).
-      Sing t -> Sing (Apply TupSym0 t)
+    sFoo :: forall (t :: [Nat]). Sing t -> Sing (Apply FooSym0 t)
+    sTup :: forall (t :: (Nat, Nat)). Sing t -> Sing (Apply TupSym0 t)
     sBaz_ :: forall (t :: Maybe Baz). Sing t -> Sing (Apply Baz_Sym0 t)
     sBar :: forall (t :: Maybe Nat). Sing t -> Sing (Apply BarSym0 t)
     sMaybePlus ::
       forall (t :: Maybe Nat). Sing t -> Sing (Apply MaybePlusSym0 t)
     sFoo SNil
       = let
-          lambda :: t ~ GHC.Types.[] => Sing (Apply FooSym0 GHC.Types.[])
+          lambda :: t ~ '[] => Sing (Apply FooSym0 '[])
           lambda
             = let
                 sP :: Sing Let_0123456789PSym0
@@ -219,9 +217,9 @@
     sFoo (SCons sWild_0123456789 SNil)
       = let
           lambda ::
-            forall wild_0123456789. t ~ Apply (Apply (:$) wild_0123456789) GHC.Types.[] =>
+            forall wild_0123456789. t ~ Apply (Apply (:$) wild_0123456789) '[] =>
             Sing wild_0123456789
-            -> Sing (Apply FooSym0 (Apply (Apply (:$) wild_0123456789) GHC.Types.[]))
+            -> Sing (Apply FooSym0 (Apply (Apply (:$) wild_0123456789) '[]))
           lambda wild_0123456789
             = let
                 sP :: Sing (Let_0123456789PSym1 wild_0123456789)
diff --git a/tests/compile-and-dump/Singletons/BoxUnBox.ghc76.template b/tests/compile-and-dump/Singletons/BoxUnBox.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/BoxUnBox.ghc76.template
+++ /dev/null
@@ -1,35 +0,0 @@
-Singletons/BoxUnBox.hs:0:0: Splicing declarations
-    singletons
-      [d| unBox :: Box a -> a
-          unBox (FBox a) = a
-          
-          data Box a = FBox a |]
-  ======>
-    Singletons/BoxUnBox.hs:(0,0)-(0,0)
-    data Box a = FBox a
-    unBox :: forall a. Box a -> a
-    unBox (FBox a) = a
-    type BoxTyCtor = Box
-    data BoxTyCtorSym0 (k :: TyFun * *)
-    type instance Apply BoxTyCtorSym0 a = BoxTyCtor a
-    data FBoxSym0 (k :: TyFun a (Box a))
-    type instance Apply FBoxSym0 a = FBox a
-    type family UnBox (a :: Box a) :: a
-    type instance UnBox (FBox a) = a
-    data UnBoxSym0 (k :: TyFun (Box a) a)
-    type instance Apply UnBoxSym0 a = UnBox a
-    data instance Sing (z :: Box a)
-      = forall (n :: a). z ~ FBox n => SFBox (Sing n)
-    type SBox (z :: Box a) = Sing z
-    instance SingKind (KProxy :: KProxy a) =>
-             SingKind (KProxy :: KProxy (Box a)) where
-      type instance DemoteRep (KProxy :: KProxy (Box a)) =
-          Box (DemoteRep (KProxy :: KProxy a))
-      fromSing (SFBox b) = FBox (fromSing b)
-      toSing (FBox b)
-        = case toSing b :: SomeSing (KProxy :: KProxy a) of {
-            SomeSing c -> SomeSing (SFBox c) }
-    instance SingI n => SingI (FBox (n :: a)) where
-      sing = SFBox sing
-    sUnBox :: forall (t :: Box a). Sing t -> Sing (UnBox t)
-    sUnBox (SFBox a) = a
diff --git a/tests/compile-and-dump/Singletons/CaseExpressions.ghc76.template b/tests/compile-and-dump/Singletons/CaseExpressions.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/CaseExpressions.ghc76.template
+++ /dev/null
@@ -1,97 +0,0 @@
-Promote/CaseExpressions.hs:0:0: Splicing declarations
-    promote
-      [d| foo1 :: a -> Maybe a -> a
-          foo1 d x
-            = case x of {
-                Just y -> y
-                Nothing -> d }
-          foo2 :: a -> Maybe a -> a
-          foo2 d _
-            = case (Just d) of {
-                Just y -> y
-                Nothing -> d }
-          foo3 :: a -> b -> a
-          foo3 a b = case (a, b) of { (p, _) -> p }
-          foo4 :: forall a. a -> a
-          foo4 x
-            = case x of {
-                y -> let
-                       z :: a
-                       z = y
-                     in z }
-          foo5 :: a -> a
-          foo5 x = case x of { y -> (\ _ -> x) y } |]
-  ======>
-    Promote/CaseExpressions.hs:(0,0)-(0,0)
-    foo1 :: forall a. a -> Maybe a -> a
-    foo1 d x
-      = case x of {
-          Just y -> y
-          Nothing -> d }
-    foo2 :: forall a. a -> Maybe a -> a
-    foo2 d _
-      = case Just d of {
-          Just y -> y
-          Nothing -> d }
-    foo3 :: forall a b. a -> b -> a
-    foo3 a b = case (a, b) of { (p, _) -> p }
-    foo4 :: forall a. a -> a
-    foo4 x
-      = case x of {
-          y -> let
-                 z :: a
-                 z = y
-               in z }
-    foo5 :: forall a. a -> a
-    foo5 x = case x of { y -> \ _ -> x y }
-    type family Case_0123456789 (t :: k) (d :: d) (x :: x) :: r
-    type instance Case_0123456789 (Just y) d x = y
-    type instance Case_0123456789 Nothing d x = d
-    type family Case_0123456789 (t :: k) (d :: d) :: r
-    type instance Case_0123456789 (Just y) d = y
-    type instance Case_0123456789 Nothing d = d
-    type family Case_0123456789 (t :: k) (a :: a) (b :: b) :: r
-    type instance Case_0123456789 '(p, z) a b = p
-    type family Let_0123456789z (a :: x) (a :: y) :: a
-    type instance Let_0123456789z x y = y
-    data Let_0123456789zSym1 (l :: x) (l :: TyFun y a)
-    data Let_0123456789zSym0 (k :: TyFun x (TyFun y a -> *))
-    type instance Apply (Let_0123456789zSym1 a) a = Let_0123456789z a a
-    type instance Apply Let_0123456789zSym0 a = Let_0123456789zSym1 a
-    type family Case_0123456789 (t :: k) (x :: x) :: r
-    type instance Case_0123456789 y x =
-        Apply (Apply Let_0123456789zSym0 x) y
-    type family Lambda_0123456789 (x :: x) (y :: y) (t :: k) :: r
-    type instance Lambda_0123456789 x y z = x
-    data Lambda_0123456789Sym2 (l :: x) (l :: y) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym2 a a) a =
-        Lambda_0123456789 a a a
-    type family Case_0123456789 (t :: k) (x :: x) :: r
-    type instance Case_0123456789 y x =
-        Apply (Lambda_0123456789Sym2 x y) y
-    type family Foo1 (a :: a) (a :: Maybe a) :: a
-    type instance Foo1 d x = Case_0123456789 x d x
-    data Foo1Sym1 (l :: a) (l :: TyFun (Maybe a) a)
-    data Foo1Sym0 (k :: TyFun a (TyFun (Maybe a) a -> *))
-    type instance Apply (Foo1Sym1 a) a = Foo1 a a
-    type instance Apply Foo1Sym0 a = Foo1Sym1 a
-    type family Foo2 (a :: a) (a :: Maybe a) :: a
-    type instance Foo2 d z = Case_0123456789 (Apply JustSym0 d) d
-    data Foo2Sym1 (l :: a) (l :: TyFun (Maybe a) a)
-    data Foo2Sym0 (k :: TyFun a (TyFun (Maybe a) a -> *))
-    type instance Apply (Foo2Sym1 a) a = Foo2 a a
-    type instance Apply Foo2Sym0 a = Foo2Sym1 a
-    type family Foo3 (a :: a) (a :: b) :: a
-    type instance Foo3 a b = Case_0123456789 '(a, b) a b
-    data Foo3Sym1 (l :: a) (l :: TyFun b a)
-    data Foo3Sym0 (k :: TyFun a (TyFun b a -> *))
-    type instance Apply (Foo3Sym1 a) a = Foo3 a a
-    type instance Apply Foo3Sym0 a = Foo3Sym1 a
-    type family Foo4 (a :: a) :: a
-    type instance Foo4 x = Case_0123456789 x x
-    data Foo4Sym0 (k :: TyFun a a)
-    type instance Apply Foo4Sym0 a = Foo4 a
-    type family Foo5 (a :: a) :: a
-    type instance Foo5 x = Case_0123456789 x x
-    data Foo5Sym0 (k :: TyFun a a)
-    type instance Apply Foo5Sym0 a = Foo5 a
diff --git a/tests/compile-and-dump/Singletons/CaseExpressions.ghc78.template b/tests/compile-and-dump/Singletons/CaseExpressions.ghc78.template
--- a/tests/compile-and-dump/Singletons/CaseExpressions.ghc78.template
+++ b/tests/compile-and-dump/Singletons/CaseExpressions.ghc78.template
@@ -134,7 +134,7 @@
     type Let_0123456789Scrutinee_0123456789 a b =
         Apply (Apply Tuple2Sym0 a) b
     type family Case_0123456789 a b t where
-      Case_0123456789 a b (GHC.Tuple.(,) p z) = p
+      Case_0123456789 a b '(p, z) = p
     type Let_0123456789Scrutinee_0123456789Sym1 t =
         Let_0123456789Scrutinee_0123456789 t
     instance SuppressUnusedWarnings Let_0123456789Scrutinee_0123456789Sym0 where
diff --git a/tests/compile-and-dump/Singletons/Contains.ghc76.template b/tests/compile-and-dump/Singletons/Contains.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/Contains.ghc76.template
+++ /dev/null
@@ -1,23 +0,0 @@
-Singletons/Contains.hs:0:0: Splicing declarations
-    singletons
-      [d| contains :: Eq a => a -> [a] -> Bool
-          contains _ [] = False
-          contains elt (h : t) = (elt == h) || (contains elt t) |]
-  ======>
-    Singletons/Contains.hs:(0,0)-(0,0)
-    contains :: forall a. Eq a => a -> [a] -> Bool
-    contains _ GHC.Types.[] = False
-    contains elt (h GHC.Types.: t) = ((elt == h) || (contains elt t))
-    type family Contains (a :: a) (a :: [a]) :: Bool
-    type instance Contains z GHC.Types.[] = FalseSym0
-    type instance Contains elt (GHC.Types.: h t) =
-        Apply (Apply :||$ (Apply (Apply :==$ elt) h)) (Apply (Apply ContainsSym0 elt) t)
-    data ContainsSym1 (l :: a) (l :: TyFun [a] Bool)
-    data ContainsSym0 (k :: TyFun a (TyFun [a] Bool -> *))
-    type instance Apply (ContainsSym1 a) a = Contains a a
-    type instance Apply ContainsSym0 a = ContainsSym1 a
-    sContains ::
-      forall (t :: a) (t :: [a]). SEq (KProxy :: KProxy a) =>
-      Sing t -> Sing t -> Sing (Contains t t)
-    sContains _ SNil = SFalse
-    sContains elt (SCons h t) = (%:||) ((%:==) elt h) (sContains elt t)
diff --git a/tests/compile-and-dump/Singletons/Contains.ghc78.template b/tests/compile-and-dump/Singletons/Contains.ghc78.template
--- a/tests/compile-and-dump/Singletons/Contains.ghc78.template
+++ b/tests/compile-and-dump/Singletons/Contains.ghc78.template
@@ -8,32 +8,32 @@
     contains :: forall a. Eq a => a -> [a] -> Bool
     contains _ GHC.Types.[] = False
     contains elt (h GHC.Types.: t) = ((elt == h) || (contains elt t))
-    type ContainsSym2 (t :: a) (t :: GHC.Types.[] a) = Contains t t
+    type ContainsSym2 (t :: a) (t :: [a]) = Contains t t
     instance SuppressUnusedWarnings ContainsSym1 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) ContainsSym1KindInference GHC.Tuple.())
-    data ContainsSym1 (l :: a) (l :: TyFun (GHC.Types.[] a) Bool)
+    data ContainsSym1 (l :: a) (l :: TyFun [a] Bool)
       = forall arg. KindOf (Apply (ContainsSym1 l) arg) ~ KindOf (ContainsSym2 l arg) =>
         ContainsSym1KindInference
     type instance Apply (ContainsSym1 l) l = ContainsSym2 l l
     instance SuppressUnusedWarnings ContainsSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) ContainsSym0KindInference GHC.Tuple.())
-    data ContainsSym0 (l :: TyFun a (TyFun (GHC.Types.[] a) Bool -> *))
+    data ContainsSym0 (l :: TyFun a (TyFun [a] Bool -> *))
       = forall arg. KindOf (Apply ContainsSym0 arg) ~ KindOf (ContainsSym1 arg) =>
         ContainsSym0KindInference
     type instance Apply ContainsSym0 l = ContainsSym1 l
-    type family Contains (a :: a) (a :: GHC.Types.[] a) :: Bool where
-      Contains z GHC.Types.[] = FalseSym0
-      Contains elt ((GHC.Types.:) h t) = Apply (Apply (:||$) (Apply (Apply (:==$) elt) h)) (Apply (Apply ContainsSym0 elt) t)
+    type family Contains (a :: a) (a :: [a]) :: Bool where
+      Contains z '[] = FalseSym0
+      Contains elt ((:) h t) = Apply (Apply (:||$) (Apply (Apply (:==$) elt) h)) (Apply (Apply ContainsSym0 elt) t)
     sContains ::
-      forall (t :: a) (t :: GHC.Types.[] a). SEq (KProxy :: KProxy a) =>
+      forall (t :: a) (t :: [a]). SEq (KProxy :: KProxy a) =>
       Sing t -> Sing t -> Sing (Apply (Apply ContainsSym0 t) t)
     sContains _ SNil
       = let
           lambda ::
-            forall wild. (t ~ wild, t ~ GHC.Types.[]) =>
-            Sing (Apply (Apply ContainsSym0 wild) GHC.Types.[])
+            forall wild. (t ~ wild, t ~ '[]) =>
+            Sing (Apply (Apply ContainsSym0 wild) '[])
           lambda = SFalse
         in lambda
     sContains sElt (SCons sH sT)
diff --git a/tests/compile-and-dump/Singletons/DataValues.ghc76.template b/tests/compile-and-dump/Singletons/DataValues.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/DataValues.ghc76.template
+++ /dev/null
@@ -1,64 +0,0 @@
-Singletons/DataValues.hs:0:0: Splicing declarations
-    singletons
-      [d| pr = Pair (Succ Zero) ([Zero])
-          complex = Pair (Pair (Just Zero) Zero) False
-          tuple = (False, Just Zero, True)
-          aList = [Zero, Succ Zero, Succ (Succ Zero)]
-          
-          data Pair a b
-            = Pair a b
-            deriving (Show) |]
-  ======>
-    Singletons/DataValues.hs:(0,0)-(0,0)
-    data Pair a b
-      = Pair a b
-      deriving (Show)
-    pr = Pair (Succ Zero) [Zero]
-    complex = Pair (Pair (Just Zero) Zero) False
-    tuple = (False, Just Zero, True)
-    aList = [Zero, Succ Zero, Succ (Succ Zero)]
-    type PairTyCtor = Pair
-    data PairTyCtorSym1 (l :: *) (l :: TyFun * *)
-    data PairTyCtorSym0 (k :: TyFun * (TyFun * * -> *))
-    type instance Apply (PairTyCtorSym1 a) a = PairTyCtor a a
-    type instance Apply PairTyCtorSym0 a = PairTyCtorSym1 a
-    data PairSym1 (l :: a) (l :: TyFun b (Pair a b))
-    data PairSym0 (k :: TyFun a (TyFun b (Pair a b) -> *))
-    type instance Apply (PairSym1 a) a = Pair a a
-    type instance Apply PairSym0 a = PairSym1 a
-    type Pr =
-        Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) '[ZeroSym0]
-    type PrSym0 = Pr
-    type Complex =
-        Apply (Apply PairSym0 (Apply (Apply PairSym0 (Apply JustSym0 ZeroSym0)) ZeroSym0)) FalseSym0
-    type ComplexSym0 = Complex
-    type Tuple = '(FalseSym0, Apply JustSym0 ZeroSym0, TrueSym0)
-    type TupleSym0 = Tuple
-    type AList =
-        '[ZeroSym0,
-          Apply SuccSym0 ZeroSym0,
-          Apply SuccSym0 (Apply SuccSym0 ZeroSym0)]
-    type AListSym0 = AList
-    data instance Sing (z :: Pair a b)
-      = forall (n :: a) (n :: b). z ~ Pair n n => SPair (Sing n) (Sing n)
-    type SPair (z :: Pair a b) = Sing z
-    instance (SingKind (KProxy :: KProxy a),
-              SingKind (KProxy :: KProxy b)) =>
-             SingKind (KProxy :: KProxy (Pair a b)) where
-      type instance DemoteRep (KProxy :: KProxy (Pair a b)) =
-          Pair (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b))
-      fromSing (SPair b b) = Pair (fromSing b) (fromSing b)
-      toSing (Pair b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy a), 
-               toSing b :: SomeSing (KProxy :: KProxy b))
-          of {
-            (SomeSing c, SomeSing c) -> SomeSing (SPair c c) }
-    instance (SingI n, SingI n) => SingI (Pair (n :: a) (n :: b)) where
-      sing = SPair sing sing
-    sPr = SPair (SSucc SZero) (SCons SZero SNil)
-    sComplex = SPair (SPair (SJust SZero) SZero) SFalse
-    sTuple = STuple3 SFalse (SJust SZero) STrue
-    sAList
-      = SCons
-          SZero (SCons (SSucc SZero) (SCons (SSucc (SSucc SZero)) SNil))
diff --git a/tests/compile-and-dump/Singletons/DataValues.ghc78.template b/tests/compile-and-dump/Singletons/DataValues.ghc78.template
--- a/tests/compile-and-dump/Singletons/DataValues.ghc78.template
+++ b/tests/compile-and-dump/Singletons/DataValues.ghc78.template
@@ -37,13 +37,13 @@
     type ComplexSym0 = Complex
     type PrSym0 = Pr
     type AList =
-        Apply (Apply (:$) ZeroSym0) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:$) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))) GHC.Types.[]))
+        Apply (Apply (:$) ZeroSym0) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:$) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))) '[]))
     type Tuple =
         Apply (Apply (Apply Tuple3Sym0 FalseSym0) (Apply JustSym0 ZeroSym0)) TrueSym0
     type Complex =
         Apply (Apply PairSym0 (Apply (Apply PairSym0 (Apply JustSym0 ZeroSym0)) ZeroSym0)) FalseSym0
     type Pr =
-        Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:$) ZeroSym0) GHC.Types.[])
+        Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:$) ZeroSym0) '[])
     sAList :: Sing AListSym0
     sTuple :: Sing TupleSym0
     sComplex :: Sing ComplexSym0
diff --git a/tests/compile-and-dump/Singletons/Empty.ghc76.template b/tests/compile-and-dump/Singletons/Empty.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/Empty.ghc76.template
+++ /dev/null
@@ -1,17 +0,0 @@
-Singletons/Empty.hs:0:0: Splicing declarations
-    singletons [d| data Empty |]
-  ======>
-    Singletons/Empty.hs:(0,0)-(0,0)
-    data Empty
-    type EmptyTyCtor = Empty
-    type EmptyTyCtorSym0 = EmptyTyCtor
-    data instance Sing (z :: Empty)
-    type SEmpty (z :: Empty) = Sing z
-    instance SingKind (KProxy :: KProxy Empty) where
-      type instance DemoteRep (KProxy :: KProxy Empty) = Empty
-      fromSing z
-        = case z of {
-            _ -> error "Empty case reached -- this should be impossible" }
-      toSing z
-        = case z of {
-            _ -> error "Empty case reached -- this should be impossible" }
diff --git a/tests/compile-and-dump/Singletons/EqInstances.ghc76.template b/tests/compile-and-dump/Singletons/EqInstances.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/EqInstances.ghc76.template
+++ /dev/null
@@ -1,17 +0,0 @@
-Singletons/EqInstances.hs:0:0: Splicing declarations
-    singEqInstances [''Foo, ''Empty]
-  ======>
-    Singletons/EqInstances.hs:0:0:
-    instance SEq (KProxy :: KProxy Foo) where
-      %:== SFLeaf SFLeaf = STrue
-      %:== SFLeaf (:%+: _ _) = SFalse
-      %:== (:%+: _ _) SFLeaf = SFalse
-      %:== (:%+: a a) (:%+: b b) = (%:&&) ((%:==) a b) ((%:==) a b)
-    type instance (:==) FLeaf FLeaf = TrueSym0
-    type instance (:==) FLeaf (:+: b b) = FalseSym0
-    type instance (:==) (:+: a a) FLeaf = FalseSym0
-    type instance (:==) (:+: a a) (:+: b b) = :&& (:== a b) (:== a b)
-    instance SEq (KProxy :: KProxy Empty) where
-      %:== a _
-        = case a of {
-            _ -> error "Empty case reached -- this should be impossible" }
diff --git a/tests/compile-and-dump/Singletons/Error.ghc76.template b/tests/compile-and-dump/Singletons/Error.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/Error.ghc76.template
+++ /dev/null
@@ -1,16 +0,0 @@
-Promote/Error.hs:0:0: Splicing declarations
-    promote
-      [d| head :: [a] -> a
-          head (a : _) = a
-          head [] = error "Data.Singletons.List.head: empty list" |]
-  ======>
-    Promote/Error.hs:(0,0)-(0,0)
-    head :: forall a. [a] -> a
-    head (a GHC.Types.: _) = a
-    head GHC.Types.[] = error "Data.Singletons.List.head: empty list"
-    type family Head (a :: [a]) :: a
-    type instance Head (GHC.Types.: a z) = a
-    type instance Head GHC.Types.[] =
-        Apply ErrorSym0 "Data.Singletons.List.head: empty list"
-    data HeadSym0 (k :: TyFun [a] a)
-    type instance Apply HeadSym0 a = Head a
diff --git a/tests/compile-and-dump/Singletons/Error.ghc78.template b/tests/compile-and-dump/Singletons/Error.ghc78.template
--- a/tests/compile-and-dump/Singletons/Error.ghc78.template
+++ b/tests/compile-and-dump/Singletons/Error.ghc78.template
@@ -8,19 +8,18 @@
     head :: forall a. [a] -> a
     head (a GHC.Types.: _) = a
     head GHC.Types.[] = error "Data.Singletons.List.head: empty list"
-    type HeadSym1 (t :: GHC.Types.[] a) = Head t
+    type HeadSym1 (t :: [a]) = Head t
     instance SuppressUnusedWarnings HeadSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) HeadSym0KindInference GHC.Tuple.())
-    data HeadSym0 (l :: TyFun (GHC.Types.[] a) a)
+    data HeadSym0 (l :: TyFun [a] a)
       = forall arg. KindOf (Apply HeadSym0 arg) ~ KindOf (HeadSym1 arg) =>
         HeadSym0KindInference
     type instance Apply HeadSym0 l = HeadSym1 l
-    type family Head (a :: GHC.Types.[] a) :: a where
-      Head ((GHC.Types.:) a z) = a
-      Head GHC.Types.[] = Apply ErrorSym0 "Data.Singletons.List.head: empty list"
-    sHead ::
-      forall (t :: GHC.Types.[] a). Sing t -> Sing (Apply HeadSym0 t)
+    type family Head (a :: [a]) :: a where
+      Head ((:) a z) = a
+      Head '[] = Apply ErrorSym0 "Data.Singletons.List.head: empty list"
+    sHead :: forall (t :: [a]). Sing t -> Sing (Apply HeadSym0 t)
     sHead (SCons sA _)
       = let
           lambda ::
@@ -30,7 +29,7 @@
         in lambda sA
     sHead SNil
       = let
-          lambda :: t ~ GHC.Types.[] => Sing (Apply HeadSym0 GHC.Types.[])
+          lambda :: t ~ '[] => Sing (Apply HeadSym0 '[])
           lambda
             = applySing
                 (singFun1 (Proxy :: Proxy ErrorSym0) sError)
diff --git a/tests/compile-and-dump/Singletons/HigherOrder.ghc76.template b/tests/compile-and-dump/Singletons/HigherOrder.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/HigherOrder.ghc76.template
+++ /dev/null
@@ -1,122 +0,0 @@
-Singletons/HigherOrder.hs:0:0: Splicing declarations
-    singletons
-      [d| map :: (a -> b) -> [a] -> [b]
-          map _ [] = []
-          map f (h : t) = (f h) : (map f t)
-          liftMaybe :: (a -> b) -> Maybe a -> Maybe b
-          liftMaybe f (Just x) = Just (f x)
-          liftMaybe _ Nothing = Nothing
-          zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
-          zipWith f (x : xs) (y : ys) = f x y : zipWith f xs ys
-          zipWith _ [] [] = []
-          zipWith _ (_ : _) [] = []
-          zipWith _ [] (_ : _) = []
-          foo :: ((a -> b) -> a -> b) -> (a -> b) -> a -> b
-          foo f g a = f g a |]
-  ======>
-    Singletons/HigherOrder.hs:(0,0)-(0,0)
-    map :: forall a b. (a -> b) -> [a] -> [b]
-    map _ GHC.Types.[] = GHC.Types.[]
-    map f (h GHC.Types.: t) = ((f h) GHC.Types.: (map f t))
-    liftMaybe :: forall a b. (a -> b) -> Maybe a -> Maybe b
-    liftMaybe f (Just x) = Just (f x)
-    liftMaybe _ Nothing = Nothing
-    zipWith :: forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
-    zipWith f (x GHC.Types.: xs) (y GHC.Types.: ys)
-      = ((f x y) GHC.Types.: (zipWith f xs ys))
-    zipWith _ GHC.Types.[] GHC.Types.[] = GHC.Types.[]
-    zipWith _ (_ GHC.Types.: _) GHC.Types.[] = GHC.Types.[]
-    zipWith _ GHC.Types.[] (_ GHC.Types.: _) = GHC.Types.[]
-    foo :: forall a b. ((a -> b) -> a -> b) -> (a -> b) -> a -> b
-    foo f g a = f g a
-    type family Map (a :: TyFun a b -> *) (a :: [a]) :: [b]
-    type instance Map z GHC.Types.[] = GHC.Types.[]
-    type instance Map f (GHC.Types.: h t) =
-        Apply (Apply :$ (Apply f h)) (Apply (Apply MapSym0 f) t)
-    data MapSym1 (l :: TyFun a b -> *) (l :: TyFun [a] [b])
-    data MapSym0 (k :: TyFun (TyFun a b -> *) (TyFun [a] [b] -> *))
-    type instance Apply (MapSym1 a) a = Map a a
-    type instance Apply MapSym0 a = MapSym1 a
-    type family LiftMaybe (a :: TyFun a b -> *)
-                          (a :: Maybe a) :: Maybe b
-    type instance LiftMaybe f (Just x) = Apply JustSym0 (Apply f x)
-    type instance LiftMaybe z Nothing = NothingSym0
-    data LiftMaybeSym1 (l :: TyFun a b -> *)
-                       (l :: TyFun (Maybe a) (Maybe b))
-    data LiftMaybeSym0 (k :: TyFun (TyFun a b
-                                    -> *) (TyFun (Maybe a) (Maybe b) -> *))
-    type instance Apply (LiftMaybeSym1 a) a = LiftMaybe a a
-    type instance Apply LiftMaybeSym0 a = LiftMaybeSym1 a
-    type family ZipWith (a :: TyFun a (TyFun b c -> *) -> *)
-                        (a :: [a])
-                        (a :: [b]) :: [c]
-    type instance ZipWith f (GHC.Types.: x xs) (GHC.Types.: y ys) =
-        Apply (Apply :$ (Apply (Apply f x) y)) (Apply (Apply (Apply ZipWithSym0 f) xs) ys)
-    type instance ZipWith z GHC.Types.[] GHC.Types.[] = GHC.Types.[]
-    type instance ZipWith z (GHC.Types.: z z) GHC.Types.[] =
-        GHC.Types.[]
-    type instance ZipWith z GHC.Types.[] (GHC.Types.: z z) =
-        GHC.Types.[]
-    data ZipWithSym2 (l :: TyFun a (TyFun b c -> *) -> *)
-                     (l :: [a])
-                     (l :: TyFun [b] [c])
-    data ZipWithSym1 (l :: TyFun a (TyFun b c -> *) -> *)
-                     (l :: TyFun [a] (TyFun [b] [c] -> *))
-    data ZipWithSym0 (k :: TyFun (TyFun a (TyFun b c -> *)
-                                  -> *) (TyFun [a] (TyFun [b] [c] -> *) -> *))
-    type instance Apply (ZipWithSym2 a a) a = ZipWith a a a
-    type instance Apply (ZipWithSym1 a) a = ZipWithSym2 a a
-    type instance Apply ZipWithSym0 a = ZipWithSym1 a
-    type family Foo (a :: TyFun (TyFun a b -> *) (TyFun a b -> *) -> *)
-                    (a :: TyFun a b -> *)
-                    (a :: a) :: b
-    type instance Foo f g a = Apply (Apply f g) a
-    data FooSym2 (l :: TyFun (TyFun a b -> *) (TyFun a b -> *) -> *)
-                 (l :: TyFun a b -> *)
-                 (l :: TyFun a b)
-    data FooSym1 (l :: TyFun (TyFun a b -> *) (TyFun a b -> *) -> *)
-                 (l :: TyFun (TyFun a b -> *) (TyFun a b -> *))
-    data FooSym0 (k :: TyFun (TyFun (TyFun a b -> *) (TyFun a b -> *)
-                              -> *) (TyFun (TyFun a b -> *) (TyFun a b -> *) -> *))
-    type instance Apply (FooSym2 a a) a = Foo a a a
-    type instance Apply (FooSym1 a) a = FooSym2 a a
-    type instance Apply FooSym0 a = FooSym1 a
-    sMap ::
-      forall (t :: TyFun a b -> *) (t :: [a]).
-      (forall (t :: a).
-       Data.Singletons.Types.Proxy t -> Sing t -> Sing (Apply t t))
-      -> Sing t -> Sing (Map t t)
-    sMap _ SNil = SNil
-    sMap f (SCons h t)
-      = SCons (f Data.Singletons.Types.Proxy h) (sMap f t)
-    sLiftMaybe ::
-      forall (t :: TyFun a b -> *) (t :: Maybe a).
-      (forall (t :: a).
-       Data.Singletons.Types.Proxy t -> Sing t -> Sing (Apply t t))
-      -> Sing t -> Sing (LiftMaybe t t)
-    sLiftMaybe f (SJust x) = SJust (f Data.Singletons.Types.Proxy x)
-    sLiftMaybe _ SNothing = SNothing
-    sZipWith ::
-      forall (t :: TyFun a (TyFun b c -> *) -> *) (t :: [a]) (t :: [b]).
-      (forall (t :: a) (t :: b).
-       Data.Singletons.Types.Proxy t
-       -> Sing t -> Sing t -> Sing (Apply (Apply t t) t))
-      -> Sing t -> Sing t -> Sing (ZipWith t t t)
-    sZipWith f (SCons x xs) (SCons y ys)
-      = SCons (f Data.Singletons.Types.Proxy x y) (sZipWith f xs ys)
-    sZipWith _ SNil SNil = SNil
-    sZipWith _ (SCons _ _) SNil = SNil
-    sZipWith _ SNil (SCons _ _) = SNil
-    sFoo ::
-      forall (t :: TyFun (TyFun a b -> *) (TyFun a b -> *) -> *)
-             (t :: TyFun a b -> *)
-             (t :: a).
-      (forall (t :: TyFun a b -> *) (t :: a).
-       Data.Singletons.Types.Proxy t
-       -> (forall (t :: a).
-           Data.Singletons.Types.Proxy t -> Sing t -> Sing (Apply t t))
-          -> Sing t -> Sing (Apply (Apply t t) t))
-      -> (forall (t :: a).
-          Data.Singletons.Types.Proxy t -> Sing t -> Sing (Apply t t))
-         -> Sing t -> Sing (Foo t t t)
-    sFoo f g a = f Data.Singletons.Types.Proxy g a
diff --git a/tests/compile-and-dump/Singletons/HigherOrder.ghc78.template b/tests/compile-and-dump/Singletons/HigherOrder.ghc78.template
--- a/tests/compile-and-dump/Singletons/HigherOrder.ghc78.template
+++ b/tests/compile-and-dump/Singletons/HigherOrder.ghc78.template
@@ -246,15 +246,15 @@
         FooSym0KindInference
     type instance Apply FooSym0 l = FooSym1 l
     type ZipWithSym3 (t :: TyFun a (TyFun b c -> *) -> *)
-                     (t :: GHC.Types.[] a)
-                     (t :: GHC.Types.[] b) =
+                     (t :: [a])
+                     (t :: [b]) =
         ZipWith t t t
     instance SuppressUnusedWarnings ZipWithSym2 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) ZipWithSym2KindInference GHC.Tuple.())
     data ZipWithSym2 (l :: TyFun a (TyFun b c -> *) -> *)
-                     (l :: GHC.Types.[] a)
-                     (l :: TyFun (GHC.Types.[] b) (GHC.Types.[] c))
+                     (l :: [a])
+                     (l :: TyFun [b] [c])
       = forall arg. KindOf (Apply (ZipWithSym2 l l) arg) ~ KindOf (ZipWithSym3 l l arg) =>
         ZipWithSym2KindInference
     type instance Apply (ZipWithSym2 l l) l = ZipWithSym3 l l l
@@ -262,8 +262,7 @@
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) ZipWithSym1KindInference GHC.Tuple.())
     data ZipWithSym1 (l :: TyFun a (TyFun b c -> *) -> *)
-                     (l :: TyFun (GHC.Types.[] a) (TyFun (GHC.Types.[] b) (GHC.Types.[] c)
-                                                   -> *))
+                     (l :: TyFun [a] (TyFun [b] [c] -> *))
       = forall arg. KindOf (Apply (ZipWithSym1 l) arg) ~ KindOf (ZipWithSym2 l arg) =>
         ZipWithSym1KindInference
     type instance Apply (ZipWithSym1 l) l = ZipWithSym2 l l
@@ -271,45 +270,37 @@
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) ZipWithSym0KindInference GHC.Tuple.())
     data ZipWithSym0 (l :: TyFun (TyFun a (TyFun b c -> *)
-                                  -> *) (TyFun (GHC.Types.[] a) (TyFun (GHC.Types.[] b) (GHC.Types.[] c)
-                                                                 -> *)
-                                         -> *))
+                                  -> *) (TyFun [a] (TyFun [b] [c] -> *) -> *))
       = forall arg. KindOf (Apply ZipWithSym0 arg) ~ KindOf (ZipWithSym1 arg) =>
         ZipWithSym0KindInference
     type instance Apply ZipWithSym0 l = ZipWithSym1 l
-    type SplungeSym2 (t :: GHC.Types.[] Nat) (t :: GHC.Types.[] Bool) =
-        Splunge t t
+    type SplungeSym2 (t :: [Nat]) (t :: [Bool]) = Splunge t t
     instance SuppressUnusedWarnings SplungeSym1 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) SplungeSym1KindInference GHC.Tuple.())
-    data SplungeSym1 (l :: GHC.Types.[] Nat)
-                     (l :: TyFun (GHC.Types.[] Bool) (GHC.Types.[] Nat))
+    data SplungeSym1 (l :: [Nat]) (l :: TyFun [Bool] [Nat])
       = forall arg. KindOf (Apply (SplungeSym1 l) arg) ~ KindOf (SplungeSym2 l arg) =>
         SplungeSym1KindInference
     type instance Apply (SplungeSym1 l) l = SplungeSym2 l l
     instance SuppressUnusedWarnings SplungeSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) SplungeSym0KindInference GHC.Tuple.())
-    data SplungeSym0 (l :: TyFun (GHC.Types.[] Nat) (TyFun (GHC.Types.[] Bool) (GHC.Types.[] Nat)
-                                                     -> *))
+    data SplungeSym0 (l :: TyFun [Nat] (TyFun [Bool] [Nat] -> *))
       = forall arg. KindOf (Apply SplungeSym0 arg) ~ KindOf (SplungeSym1 arg) =>
         SplungeSym0KindInference
     type instance Apply SplungeSym0 l = SplungeSym1 l
-    type EtadSym2 (t :: GHC.Types.[] Nat) (t :: GHC.Types.[] Bool) =
-        Etad t t
+    type EtadSym2 (t :: [Nat]) (t :: [Bool]) = Etad t t
     instance SuppressUnusedWarnings EtadSym1 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) EtadSym1KindInference GHC.Tuple.())
-    data EtadSym1 (l :: GHC.Types.[] Nat)
-                  (l :: TyFun (GHC.Types.[] Bool) (GHC.Types.[] Nat))
+    data EtadSym1 (l :: [Nat]) (l :: TyFun [Bool] [Nat])
       = forall arg. KindOf (Apply (EtadSym1 l) arg) ~ KindOf (EtadSym2 l arg) =>
         EtadSym1KindInference
     type instance Apply (EtadSym1 l) l = EtadSym2 l l
     instance SuppressUnusedWarnings EtadSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) EtadSym0KindInference GHC.Tuple.())
-    data EtadSym0 (l :: TyFun (GHC.Types.[] Nat) (TyFun (GHC.Types.[] Bool) (GHC.Types.[] Nat)
-                                                  -> *))
+    data EtadSym0 (l :: TyFun [Nat] (TyFun [Bool] [Nat] -> *))
       = forall arg. KindOf (Apply EtadSym0 arg) ~ KindOf (EtadSym1 arg) =>
         EtadSym0KindInference
     type instance Apply EtadSym0 l = EtadSym1 l
@@ -331,20 +322,18 @@
       = forall arg. KindOf (Apply LiftMaybeSym0 arg) ~ KindOf (LiftMaybeSym1 arg) =>
         LiftMaybeSym0KindInference
     type instance Apply LiftMaybeSym0 l = LiftMaybeSym1 l
-    type MapSym2 (t :: TyFun a b -> *) (t :: GHC.Types.[] a) = Map t t
+    type MapSym2 (t :: TyFun a b -> *) (t :: [a]) = Map t t
     instance SuppressUnusedWarnings MapSym1 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) MapSym1KindInference GHC.Tuple.())
-    data MapSym1 (l :: TyFun a b -> *)
-                 (l :: TyFun (GHC.Types.[] a) (GHC.Types.[] b))
+    data MapSym1 (l :: TyFun a b -> *) (l :: TyFun [a] [b])
       = forall arg. KindOf (Apply (MapSym1 l) arg) ~ KindOf (MapSym2 l arg) =>
         MapSym1KindInference
     type instance Apply (MapSym1 l) l = MapSym2 l l
     instance SuppressUnusedWarnings MapSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) MapSym0KindInference GHC.Tuple.())
-    data MapSym0 (l :: TyFun (TyFun a b
-                              -> *) (TyFun (GHC.Types.[] a) (GHC.Types.[] b) -> *))
+    data MapSym0 (l :: TyFun (TyFun a b -> *) (TyFun [a] [b] -> *))
       = forall arg. KindOf (Apply MapSym0 arg) ~ KindOf (MapSym1 arg) =>
         MapSym0KindInference
     type instance Apply MapSym0 l = MapSym1 l
@@ -353,26 +342,23 @@
                     (a :: a) :: b where
       Foo f g a = Apply (Apply f g) a
     type family ZipWith (a :: TyFun a (TyFun b c -> *) -> *)
-                        (a :: GHC.Types.[] a)
-                        (a :: GHC.Types.[] b) :: GHC.Types.[] c where
-      ZipWith f ((GHC.Types.:) x xs) ((GHC.Types.:) y ys) = Apply (Apply (:$) (Apply (Apply f x) y)) (Apply (Apply (Apply ZipWithSym0 f) xs) ys)
-      ZipWith z GHC.Types.[] GHC.Types.[] = GHC.Types.[]
-      ZipWith z ((GHC.Types.:) z z) GHC.Types.[] = GHC.Types.[]
-      ZipWith z GHC.Types.[] ((GHC.Types.:) z z) = GHC.Types.[]
-    type family Splunge (a :: GHC.Types.[] Nat)
-                        (a :: GHC.Types.[] Bool) :: GHC.Types.[] Nat where
+                        (a :: [a])
+                        (a :: [b]) :: [c] where
+      ZipWith f ((:) x xs) ((:) y ys) = Apply (Apply (:$) (Apply (Apply f x) y)) (Apply (Apply (Apply ZipWithSym0 f) xs) ys)
+      ZipWith z '[] '[] = '[]
+      ZipWith z ((:) z z) '[] = '[]
+      ZipWith z '[] ((:) z z) = '[]
+    type family Splunge (a :: [Nat]) (a :: [Bool]) :: [Nat] where
       Splunge ns bs = Apply (Apply (Apply ZipWithSym0 (Apply (Apply Lambda_0123456789Sym0 ns) bs)) ns) bs
-    type family Etad (a :: GHC.Types.[] Nat)
-                     (a :: GHC.Types.[] Bool) :: GHC.Types.[] Nat where
+    type family Etad (a :: [Nat]) (a :: [Bool]) :: [Nat] where
       Etad a_0123456789 a_0123456789 = Apply (Apply (Apply ZipWithSym0 (Apply (Apply Lambda_0123456789Sym0 a_0123456789) a_0123456789)) a_0123456789) a_0123456789
     type family LiftMaybe (a :: TyFun a b -> *)
                           (a :: Maybe a) :: Maybe b where
       LiftMaybe f (Just x) = Apply JustSym0 (Apply f x)
       LiftMaybe z Nothing = NothingSym0
-    type family Map (a :: TyFun a b -> *)
-                    (a :: GHC.Types.[] a) :: GHC.Types.[] b where
-      Map z GHC.Types.[] = GHC.Types.[]
-      Map f ((GHC.Types.:) h t) = Apply (Apply (:$) (Apply f h)) (Apply (Apply MapSym0 f) t)
+    type family Map (a :: TyFun a b -> *) (a :: [a]) :: [b] where
+      Map z '[] = '[]
+      Map f ((:) h t) = Apply (Apply (:$) (Apply f h)) (Apply (Apply MapSym0 f) t)
     sFoo ::
       forall (t :: TyFun (TyFun a b -> *) (TyFun a b -> *) -> *)
              (t :: TyFun a b -> *)
@@ -380,23 +366,21 @@
       Sing t
       -> Sing t -> Sing t -> Sing (Apply (Apply (Apply FooSym0 t) t) t)
     sZipWith ::
-      forall (t :: TyFun a (TyFun b c -> *) -> *)
-             (t :: GHC.Types.[] a)
-             (t :: GHC.Types.[] b).
+      forall (t :: TyFun a (TyFun b c -> *) -> *) (t :: [a]) (t :: [b]).
       Sing t
       -> Sing t
          -> Sing t -> Sing (Apply (Apply (Apply ZipWithSym0 t) t) t)
     sSplunge ::
-      forall (t :: GHC.Types.[] Nat) (t :: GHC.Types.[] Bool).
+      forall (t :: [Nat]) (t :: [Bool]).
       Sing t -> Sing t -> Sing (Apply (Apply SplungeSym0 t) t)
     sEtad ::
-      forall (t :: GHC.Types.[] Nat) (t :: GHC.Types.[] Bool).
+      forall (t :: [Nat]) (t :: [Bool]).
       Sing t -> Sing t -> Sing (Apply (Apply EtadSym0 t) t)
     sLiftMaybe ::
       forall (t :: TyFun a b -> *) (t :: Maybe a).
       Sing t -> Sing t -> Sing (Apply (Apply LiftMaybeSym0 t) t)
     sMap ::
-      forall (t :: TyFun a b -> *) (t :: GHC.Types.[] a).
+      forall (t :: TyFun a b -> *) (t :: [a]).
       Sing t -> Sing t -> Sing (Apply (Apply MapSym0 t) t)
     sFoo sF sG sA
       = let
@@ -431,8 +415,8 @@
     sZipWith _ SNil SNil
       = let
           lambda ::
-            forall wild. (t ~ wild, t ~ GHC.Types.[], t ~ GHC.Types.[]) =>
-            Sing (Apply (Apply (Apply ZipWithSym0 wild) GHC.Types.[]) GHC.Types.[])
+            forall wild. (t ~ wild, t ~ '[], t ~ '[]) =>
+            Sing (Apply (Apply (Apply ZipWithSym0 wild) '[]) '[])
           lambda = SNil
         in lambda
     sZipWith _ (SCons _ _) SNil
@@ -440,17 +424,17 @@
           lambda ::
             forall wild wild wild. (t ~ wild,
                                     t ~ Apply (Apply (:$) wild) wild,
-                                    t ~ GHC.Types.[]) =>
-            Sing (Apply (Apply (Apply ZipWithSym0 wild) (Apply (Apply (:$) wild) wild)) GHC.Types.[])
+                                    t ~ '[]) =>
+            Sing (Apply (Apply (Apply ZipWithSym0 wild) (Apply (Apply (:$) wild) wild)) '[])
           lambda = SNil
         in lambda
     sZipWith _ SNil (SCons _ _)
       = let
           lambda ::
             forall wild wild wild. (t ~ wild,
-                                    t ~ GHC.Types.[],
+                                    t ~ '[],
                                     t ~ Apply (Apply (:$) wild) wild) =>
-            Sing (Apply (Apply (Apply ZipWithSym0 wild) GHC.Types.[]) (Apply (Apply (:$) wild) wild))
+            Sing (Apply (Apply (Apply ZipWithSym0 wild) '[]) (Apply (Apply (:$) wild) wild))
           lambda = SNil
         in lambda
     sSplunge sNs sBs
@@ -570,8 +554,8 @@
     sMap _ SNil
       = let
           lambda ::
-            forall wild. (t ~ wild, t ~ GHC.Types.[]) =>
-            Sing (Apply (Apply MapSym0 wild) GHC.Types.[])
+            forall wild. (t ~ wild, t ~ '[]) =>
+            Sing (Apply (Apply MapSym0 wild) '[])
           lambda = SNil
         in lambda
     sMap sF (SCons sH sT)
diff --git a/tests/compile-and-dump/Singletons/LambdaCase.ghc76.template b/tests/compile-and-dump/Singletons/LambdaCase.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/LambdaCase.ghc76.template
+++ /dev/null
@@ -1,80 +0,0 @@
-Promote/LambdaCase.hs:0:0: Splicing declarations
-    promote
-      [d| foo1 :: a -> Maybe a -> a
-          foo1 d x
-            = (\case {
-                 Just y -> y
-                 Nothing -> d })
-                x
-          foo2 :: a -> Maybe a -> a
-          foo2 d _
-            = (\case {
-                 Just y -> y
-                 Nothing -> d })
-                (Just d)
-          foo3 :: a -> b -> a
-          foo3 a b = (\case { (p, _) -> p }) (a, b) |]
-  ======>
-    Promote/LambdaCase.hs:(0,0)-(0,0)
-    foo1 :: forall a. a -> Maybe a -> a
-    foo1 d x
-      = \case {
-          Just y -> y
-          Nothing -> d }
-          x
-    foo2 :: forall a. a -> Maybe a -> a
-    foo2 d _
-      = \case {
-          Just y -> y
-          Nothing -> d }
-          (Just d)
-    foo3 :: forall a b. a -> b -> a
-    foo3 a b = \case { (p, _) -> p } (a, b)
-    type family Case_0123456789 (t :: k)
-                                (d :: d)
-                                (x :: x)
-                                (e :: e) :: r
-    type instance Case_0123456789 (Just y) d x e = y
-    type instance Case_0123456789 Nothing d x e = d
-    type family Lambda_0123456789 (d :: d) (x :: x) (t :: k) :: r
-    type instance Lambda_0123456789 d x e = Case_0123456789 e d x e
-    data Lambda_0123456789Sym2 (l :: d) (l :: x) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym2 a a) a =
-        Lambda_0123456789 a a a
-    type family Case_0123456789 (t :: k) (d :: d) (e :: e) :: r
-    type instance Case_0123456789 (Just y) d e = y
-    type instance Case_0123456789 Nothing d e = d
-    type family Lambda_0123456789 (d :: d) (t :: k) :: r
-    type instance Lambda_0123456789 d e = Case_0123456789 e d e
-    data Lambda_0123456789Sym1 (l :: d) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym1 a) a =
-        Lambda_0123456789 a a
-    type family Case_0123456789 (t :: k)
-                                (a :: a)
-                                (b :: b)
-                                (e :: e) :: r
-    type instance Case_0123456789 '(p, z) a b e = p
-    type family Lambda_0123456789 (a :: a) (b :: b) (t :: k) :: r
-    type instance Lambda_0123456789 a b e = Case_0123456789 e a b e
-    data Lambda_0123456789Sym2 (l :: a) (l :: b) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym2 a a) a =
-        Lambda_0123456789 a a a
-    type family Foo1 (a :: a) (a :: Maybe a) :: a
-    type instance Foo1 d x = Apply (Lambda_0123456789Sym2 d x) x
-    data Foo1Sym1 (l :: a) (l :: TyFun (Maybe a) a)
-    data Foo1Sym0 (k :: TyFun a (TyFun (Maybe a) a -> *))
-    type instance Apply (Foo1Sym1 a) a = Foo1 a a
-    type instance Apply Foo1Sym0 a = Foo1Sym1 a
-    type family Foo2 (a :: a) (a :: Maybe a) :: a
-    type instance Foo2 d z =
-        Apply (Lambda_0123456789Sym1 d) (Apply JustSym0 d)
-    data Foo2Sym1 (l :: a) (l :: TyFun (Maybe a) a)
-    data Foo2Sym0 (k :: TyFun a (TyFun (Maybe a) a -> *))
-    type instance Apply (Foo2Sym1 a) a = Foo2 a a
-    type instance Apply Foo2Sym0 a = Foo2Sym1 a
-    type family Foo3 (a :: a) (a :: b) :: a
-    type instance Foo3 a b = Apply (Lambda_0123456789Sym2 a b) '(a, b)
-    data Foo3Sym1 (l :: a) (l :: TyFun b a)
-    data Foo3Sym0 (k :: TyFun a (TyFun b a -> *))
-    type instance Apply (Foo3Sym1 a) a = Foo3 a a
-    type instance Apply Foo3Sym0 a = Foo3Sym1 a
diff --git a/tests/compile-and-dump/Singletons/LambdaCase.ghc78.template b/tests/compile-and-dump/Singletons/LambdaCase.ghc78.template
--- a/tests/compile-and-dump/Singletons/LambdaCase.ghc78.template
+++ b/tests/compile-and-dump/Singletons/LambdaCase.ghc78.template
@@ -31,7 +31,7 @@
     foo3 :: forall a b. a -> b -> a
     foo3 a b = \case { (p, _) -> p } (a, b)
     type family Case_0123456789 a b x_0123456789 t where
-      Case_0123456789 a b x_0123456789 (GHC.Tuple.(,) p z) = p
+      Case_0123456789 a b x_0123456789 '(p, z) = p
     type family Lambda_0123456789 a b t where
       Lambda_0123456789 a b x_0123456789 = Case_0123456789 a b x_0123456789 x_0123456789
     type Lambda_0123456789Sym3 t t t = Lambda_0123456789 t t t
diff --git a/tests/compile-and-dump/Singletons/Lambdas.ghc76.template b/tests/compile-and-dump/Singletons/Lambdas.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/Lambdas.ghc76.template
+++ /dev/null
@@ -1,173 +0,0 @@
-Promote/Lambdas.hs:0:0: Splicing declarations
-    promote
-      [d| foo0 :: a -> b -> a
-          foo0 = (\ x y -> x)
-          foo1 :: a -> b -> a
-          foo1 x = (\ _ -> x)
-          foo2 :: a -> b -> a
-          foo2 x y = (\ _ -> x) y
-          foo3 :: a -> a
-          foo3 x = (\ y -> y) x
-          foo4 :: a -> b -> c -> a
-          foo4 x y z = (\ _ _ -> x) y z
-          foo5 :: a -> b -> b
-          foo5 x y = (\ x -> x) y
-          foo6 :: a -> b -> a
-          foo6 a b = (\ x -> \ _ -> x) a b
-          foo7 :: a -> b -> b
-          foo7 x y = (\ (_, b) -> b) (x, y)
-          foo8 :: Foo a b -> a
-          foo8 x = (\ (Foo a _) -> a) x
-          
-          data Foo a b = Foo a b |]
-  ======>
-    Promote/Lambdas.hs:(0,0)-(0,0)
-    foo0 :: forall a b. a -> b -> a
-    foo0 = \ x y -> x
-    foo1 :: forall a b. a -> b -> a
-    foo1 x = \ _ -> x
-    foo2 :: forall a b. a -> b -> a
-    foo2 x y = \ _ -> x y
-    foo3 :: forall a. a -> a
-    foo3 x = \ y -> y x
-    foo4 :: forall a b c. a -> b -> c -> a
-    foo4 x y z = \ _ _ -> x y z
-    foo5 :: forall a b. a -> b -> b
-    foo5 x y = \ x -> x y
-    foo6 :: forall a b. a -> b -> a
-    foo6 a b = \ x -> \ _ -> x a b
-    foo7 :: forall a b. a -> b -> b
-    foo7 x y = \ (_, b) -> b (x, y)
-    data Foo a b = Foo a b
-    foo8 :: forall a b. Foo a b -> a
-    foo8 x = \ (Foo a _) -> a x
-    type Foo0 = Lambda_0123456789Sym0
-    type Foo0Sym0 = Foo0
-    type family Lambda_0123456789 (t :: k) (t :: k) :: r
-    type instance Lambda_0123456789 x y = x
-    data Lambda_0123456789Sym1 (l :: k) (l :: TyFun k r)
-    data Lambda_0123456789Sym0 (k :: TyFun k (TyFun k r -> *))
-    type instance Apply (Lambda_0123456789Sym1 a) a =
-        Lambda_0123456789 a a
-    type instance Apply Lambda_0123456789Sym0 a =
-        Lambda_0123456789Sym1 a
-    type family Lambda_0123456789 (x :: x) (t :: k) :: r
-    type instance Lambda_0123456789 x z = x
-    data Lambda_0123456789Sym1 (l :: x) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym1 a) a =
-        Lambda_0123456789 a a
-    type family Lambda_0123456789 (x :: x) (y :: y) (t :: k) :: r
-    type instance Lambda_0123456789 x y z = x
-    data Lambda_0123456789Sym2 (l :: x) (l :: y) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym2 a a) a =
-        Lambda_0123456789 a a a
-    type family Lambda_0123456789 (x :: x) (t :: k) :: r
-    type instance Lambda_0123456789 x y = y
-    data Lambda_0123456789Sym1 (l :: x) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym1 a) a =
-        Lambda_0123456789 a a
-    type family Lambda_0123456789 (x :: x)
-                                  (y :: y)
-                                  (z :: z)
-                                  (t :: k)
-                                  (t :: k) :: r
-    type instance Lambda_0123456789 x y z z z = x
-    data Lambda_0123456789Sym4 (l :: x)
-                               (l :: y)
-                               (l :: z)
-                               (l :: k)
-                               (l :: TyFun k r)
-    data Lambda_0123456789Sym3 (l :: x)
-                               (l :: y)
-                               (l :: z)
-                               (l :: TyFun k (TyFun k r -> *))
-    type instance Apply (Lambda_0123456789Sym4 a a a a) a =
-        Lambda_0123456789 a a a a a
-    type instance Apply (Lambda_0123456789Sym3 a a a) a =
-        Lambda_0123456789Sym4 a a a a
-    type family Lambda_0123456789 (x :: x) (y :: y) (t :: k) :: r
-    type instance Lambda_0123456789 x y x = x
-    data Lambda_0123456789Sym2 (l :: x) (l :: y) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym2 a a) a =
-        Lambda_0123456789 a a a
-    type family Lambda_0123456789 (a :: a)
-                                  (b :: b)
-                                  (x :: x)
-                                  (t :: k) :: r
-    type instance Lambda_0123456789 a b x z = x
-    data Lambda_0123456789Sym3 (l :: a)
-                               (l :: b)
-                               (l :: x)
-                               (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym3 a a a) a =
-        Lambda_0123456789 a a a a
-    type family Lambda_0123456789 (a :: a) (b :: b) (t :: k) :: r
-    type instance Lambda_0123456789 a b x = Lambda_0123456789Sym3 a b x
-    data Lambda_0123456789Sym2 (l :: a) (l :: b) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym2 a a) a =
-        Lambda_0123456789 a a a
-    type family Lambda_0123456789 (x :: x) (y :: y) (t :: k) :: r
-    type instance Lambda_0123456789 x y '(z, b) = b
-    data Lambda_0123456789Sym2 (l :: x) (l :: y) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym2 a a) a =
-        Lambda_0123456789 a a a
-    type FooTyCtor = Foo
-    data FooTyCtorSym1 (l :: *) (l :: TyFun * *)
-    data FooTyCtorSym0 (k :: TyFun * (TyFun * * -> *))
-    type instance Apply (FooTyCtorSym1 a) a = FooTyCtor a a
-    type instance Apply FooTyCtorSym0 a = FooTyCtorSym1 a
-    data FooSym1 (l :: a) (l :: TyFun b (Foo a b))
-    data FooSym0 (k :: TyFun a (TyFun b (Foo a b) -> *))
-    type instance Apply (FooSym1 a) a = Foo a a
-    type instance Apply FooSym0 a = FooSym1 a
-    type family Lambda_0123456789 (x :: x) (t :: k) :: r
-    type instance Lambda_0123456789 x (Foo a z) = a
-    data Lambda_0123456789Sym1 (l :: x) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym1 a) a =
-        Lambda_0123456789 a a
-    type family Foo1 (a :: a) :: TyFun a b -> *
-    type instance Foo1 x = Lambda_0123456789Sym1 x
-    data Foo1Sym0 (k :: TyFun a (TyFun a b -> *))
-    type instance Apply Foo1Sym0 a = Foo1 a
-    type family Foo2 (a :: a) (a :: b) :: a
-    type instance Foo2 x y = Apply (Lambda_0123456789Sym2 x y) y
-    data Foo2Sym1 (l :: a) (l :: TyFun b a)
-    data Foo2Sym0 (k :: TyFun a (TyFun b a -> *))
-    type instance Apply (Foo2Sym1 a) a = Foo2 a a
-    type instance Apply Foo2Sym0 a = Foo2Sym1 a
-    type family Foo3 (a :: a) :: a
-    type instance Foo3 x = Apply (Lambda_0123456789Sym1 x) x
-    data Foo3Sym0 (k :: TyFun a a)
-    type instance Apply Foo3Sym0 a = Foo3 a
-    type family Foo4 (a :: a) (a :: b) (a :: c) :: a
-    type instance Foo4 x y z =
-        Apply (Apply (Lambda_0123456789Sym3 x y z) y) z
-    data Foo4Sym2 (l :: a) (l :: b) (l :: TyFun c a)
-    data Foo4Sym1 (l :: a) (l :: TyFun b (TyFun c a -> *))
-    data Foo4Sym0 (k :: TyFun a (TyFun b (TyFun c a -> *) -> *))
-    type instance Apply (Foo4Sym2 a a) a = Foo4 a a a
-    type instance Apply (Foo4Sym1 a) a = Foo4Sym2 a a
-    type instance Apply Foo4Sym0 a = Foo4Sym1 a
-    type family Foo5 (a :: a) (a :: b) :: b
-    type instance Foo5 x y = Apply (Lambda_0123456789Sym2 x y) y
-    data Foo5Sym1 (l :: a) (l :: TyFun b b)
-    data Foo5Sym0 (k :: TyFun a (TyFun b b -> *))
-    type instance Apply (Foo5Sym1 a) a = Foo5 a a
-    type instance Apply Foo5Sym0 a = Foo5Sym1 a
-    type family Foo6 (a :: a) (a :: b) :: a
-    type instance Foo6 a b =
-        Apply (Apply (Lambda_0123456789Sym2 a b) a) b
-    data Foo6Sym1 (l :: a) (l :: TyFun b a)
-    data Foo6Sym0 (k :: TyFun a (TyFun b a -> *))
-    type instance Apply (Foo6Sym1 a) a = Foo6 a a
-    type instance Apply Foo6Sym0 a = Foo6Sym1 a
-    type family Foo7 (a :: a) (a :: b) :: b
-    type instance Foo7 x y = Apply (Lambda_0123456789Sym2 x y) '(x, y)
-    data Foo7Sym1 (l :: a) (l :: TyFun b b)
-    data Foo7Sym0 (k :: TyFun a (TyFun b b -> *))
-    type instance Apply (Foo7Sym1 a) a = Foo7 a a
-    type instance Apply Foo7Sym0 a = Foo7Sym1 a
-    type family Foo8 (a :: Foo a b) :: a
-    type instance Foo8 x = Apply (Lambda_0123456789Sym1 x) x
-    data Foo8Sym0 (k :: TyFun (Foo a b) a)
-    type instance Apply Foo8Sym0 a = Foo8 a
diff --git a/tests/compile-and-dump/Singletons/Lambdas.ghc78.template b/tests/compile-and-dump/Singletons/Lambdas.ghc78.template
--- a/tests/compile-and-dump/Singletons/Lambdas.ghc78.template
+++ b/tests/compile-and-dump/Singletons/Lambdas.ghc78.template
@@ -78,7 +78,7 @@
         Lambda_0123456789Sym0KindInference
     type instance Apply Lambda_0123456789Sym0 l = Lambda_0123456789Sym1 l
     type family Case_0123456789 x y arg_0123456789 t where
-      Case_0123456789 x y arg_0123456789 (GHC.Tuple.(,) z b) = b
+      Case_0123456789 x y arg_0123456789 '(z, b) = b
     type family Lambda_0123456789 x y t where
       Lambda_0123456789 x y arg_0123456789 = Case_0123456789 x y arg_0123456789 arg_0123456789
     type Lambda_0123456789Sym3 t t t = Lambda_0123456789 t t t
@@ -203,7 +203,7 @@
                                 arg_0123456789
                                 arg_0123456789
                                 t where
-      Case_0123456789 x y z arg_0123456789 arg_0123456789 (GHC.Tuple.(,) z z) = x
+      Case_0123456789 x y z arg_0123456789 arg_0123456789 '(z, z) = x
     type family Lambda_0123456789 x y z t t where
       Lambda_0123456789 x y z arg_0123456789 arg_0123456789 = Case_0123456789 x y z arg_0123456789 arg_0123456789 (Apply (Apply Tuple2Sym0 arg_0123456789) arg_0123456789)
     type Lambda_0123456789Sym5 t t t t t = Lambda_0123456789 t t t t t
diff --git a/tests/compile-and-dump/Singletons/LambdasComprehensive.ghc76.template b/tests/compile-and-dump/Singletons/LambdasComprehensive.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/LambdasComprehensive.ghc76.template
+++ /dev/null
@@ -1,27 +0,0 @@
-Promote/LambdasComprehensive.hs:0:0: Splicing declarations
-    promote
-      [d| foo :: [Nat]
-          foo
-            = map (\ x -> either_ pred Succ x) [Left Zero, Right (Succ Zero)]
-          bar :: [Nat]
-          bar = map (either_ pred Succ) [Left Zero, Right (Succ Zero)] |]
-  ======>
-    Promote/LambdasComprehensive.hs:(0,0)-(0,0)
-    foo :: [Nat]
-    foo
-      = map (\ x -> either_ pred Succ x) [Left Zero, Right (Succ Zero)]
-    bar :: [Nat]
-    bar = map (either_ pred Succ) [Left Zero, Right (Succ Zero)]
-    type Foo =
-        Apply (Apply MapSym0 Lambda_0123456789Sym0) '[Apply LeftSym0 ZeroSym0,
-                                                      Apply RightSym0 (Apply SuccSym0 ZeroSym0)]
-    type FooSym0 = Foo
-    type family Lambda_0123456789 (t :: k) :: r
-    type instance Lambda_0123456789 x =
-        Apply (Apply (Apply Either_Sym0 PredSym0) SuccSym0) x
-    data Lambda_0123456789Sym0 (k :: TyFun k r)
-    type instance Apply Lambda_0123456789Sym0 a = Lambda_0123456789 a
-    type Bar =
-        Apply (Apply MapSym0 (Apply (Apply Either_Sym0 PredSym0) SuccSym0)) '[Apply LeftSym0 ZeroSym0,
-                                                                              Apply RightSym0 (Apply SuccSym0 ZeroSym0)]
-    type BarSym0 = Bar
diff --git a/tests/compile-and-dump/Singletons/LambdasComprehensive.ghc78.template b/tests/compile-and-dump/Singletons/LambdasComprehensive.ghc78.template
--- a/tests/compile-and-dump/Singletons/LambdasComprehensive.ghc78.template
+++ b/tests/compile-and-dump/Singletons/LambdasComprehensive.ghc78.template
@@ -26,9 +26,9 @@
     type BarSym0 = Bar
     type FooSym0 = Foo
     type Bar =
-        (Apply (Apply MapSym0 (Apply (Apply Either_Sym0 PredSym0) SuccSym0)) (Apply (Apply (:$) (Apply LeftSym0 ZeroSym0)) (Apply (Apply (:$) (Apply RightSym0 (Apply SuccSym0 ZeroSym0))) GHC.Types.[])) :: GHC.Types.[] Nat)
+        (Apply (Apply MapSym0 (Apply (Apply Either_Sym0 PredSym0) SuccSym0)) (Apply (Apply (:$) (Apply LeftSym0 ZeroSym0)) (Apply (Apply (:$) (Apply RightSym0 (Apply SuccSym0 ZeroSym0))) '[])) :: [Nat])
     type Foo =
-        (Apply (Apply MapSym0 Lambda_0123456789Sym0) (Apply (Apply (:$) (Apply LeftSym0 ZeroSym0)) (Apply (Apply (:$) (Apply RightSym0 (Apply SuccSym0 ZeroSym0))) GHC.Types.[])) :: GHC.Types.[] Nat)
+        (Apply (Apply MapSym0 Lambda_0123456789Sym0) (Apply (Apply (:$) (Apply LeftSym0 ZeroSym0)) (Apply (Apply (:$) (Apply RightSym0 (Apply SuccSym0 ZeroSym0))) '[])) :: [Nat])
     sBar :: Sing BarSym0
     sFoo :: Sing FooSym0
     sBar
diff --git a/tests/compile-and-dump/Singletons/LetStatements.ghc76.template b/tests/compile-and-dump/Singletons/LetStatements.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/LetStatements.ghc76.template
+++ /dev/null
@@ -1,364 +0,0 @@
-Promote/LetStatements.hs:0:0: Splicing declarations
-    promote
-      [d| foo1 :: Nat -> Nat
-          foo1 x
-            = let
-                y :: Nat
-                y = Succ Zero
-              in y
-          foo2 :: Nat
-          foo2
-            = let
-                y = Succ Zero
-                z = Succ y
-              in z
-          foo3 :: Nat -> Nat
-          foo3 x
-            = let
-                y :: Nat
-                y = Succ x
-              in y
-          foo4 :: Nat -> Nat
-          foo4 x
-            = let
-                f :: Nat -> Nat
-                f y = Succ y
-              in f x
-          foo5 :: Nat -> Nat
-          foo5 x
-            = let
-                f :: Nat -> Nat
-                f y
-                  = let
-                      z :: Nat
-                      z = Succ y
-                    in Succ z
-              in f x
-          foo6 :: Nat -> Nat
-          foo6 x
-            = let
-                f :: Nat -> Nat
-                f y = Succ y in
-              let
-                z :: Nat
-                z = f x
-              in z
-          foo7 :: Nat -> Nat
-          foo7 x
-            = let
-                x :: Nat
-                x = Zero
-              in x
-          foo8 :: Nat -> Nat
-          foo8 x
-            = let
-                z :: Nat
-                z = (\ x -> x) Zero
-              in z
-          foo9 :: Nat -> Nat
-          foo9 x
-            = let
-                z :: Nat -> Nat
-                z = (\ x -> x)
-              in z x
-          foo10 :: Nat -> Nat
-          foo10 x
-            = let
-                + :: Nat -> Nat -> Nat
-                Zero + m = m
-                (Succ n) + m = Succ (n + m)
-              in (Succ Zero) + x
-          foo11 :: Nat -> Nat
-          foo11 x
-            = let
-                + :: Nat -> Nat -> Nat
-                Zero + m = m
-                (Succ n) + m = Succ (n + m)
-                z :: Nat
-                z = x
-              in (Succ Zero) + z
-          foo12 :: Nat -> Nat
-          foo12 x
-            = let
-                + :: Nat -> Nat -> Nat
-                Zero + m = m
-                (Succ n) + m = Succ (n + x)
-              in x + (Succ (Succ Zero))
-          foo13 :: forall a. a -> a
-          foo13 x
-            = let
-                bar :: a
-                bar = x
-              in foo13b bar
-          foo13b :: a -> a
-          foo13b y = y |]
-  ======>
-    Promote/LetStatements.hs:(0,0)-(0,0)
-    foo1 :: Nat -> Nat
-    foo1 x
-      = let
-          y :: Nat
-          y = Succ Zero
-        in y
-    foo2 :: Nat
-    foo2
-      = let
-          y = Succ Zero
-          z = Succ y
-        in z
-    foo3 :: Nat -> Nat
-    foo3 x
-      = let
-          y :: Nat
-          y = Succ x
-        in y
-    foo4 :: Nat -> Nat
-    foo4 x
-      = let
-          f :: Nat -> Nat
-          f y = Succ y
-        in f x
-    foo5 :: Nat -> Nat
-    foo5 x
-      = let
-          f :: Nat -> Nat
-          f y
-            = let
-                z :: Nat
-                z = Succ y
-              in Succ z
-        in f x
-    foo6 :: Nat -> Nat
-    foo6 x
-      = let
-          f :: Nat -> Nat
-          f y = Succ y in
-        let
-          z :: Nat
-          z = f x
-        in z
-    foo7 :: Nat -> Nat
-    foo7 x
-      = let
-          x :: Nat
-          x = Zero
-        in x
-    foo8 :: Nat -> Nat
-    foo8 x
-      = let
-          z :: Nat
-          z = \ x -> x Zero
-        in z
-    foo9 :: Nat -> Nat
-    foo9 x
-      = let
-          z :: Nat -> Nat
-          z = \ x -> x
-        in z x
-    foo10 :: Nat -> Nat
-    foo10 x
-      = let
-          + :: Nat -> Nat -> Nat
-          + Zero m = m
-          + (Succ n) m = Succ (n + m)
-        in ((Succ Zero) + x)
-    foo11 :: Nat -> Nat
-    foo11 x
-      = let
-          + :: Nat -> Nat -> Nat
-          z :: Nat
-          + Zero m = m
-          + (Succ n) m = Succ (n + m)
-          z = x
-        in ((Succ Zero) + z)
-    foo12 :: Nat -> Nat
-    foo12 x
-      = let
-          + :: Nat -> Nat -> Nat
-          + Zero m = m
-          + (Succ n) m = Succ (n + x)
-        in (x + (Succ (Succ Zero)))
-    foo13 :: forall a. a -> a
-    foo13 x
-      = let
-          bar :: a
-          bar = x
-        in foo13b bar
-    foo13b :: forall a. a -> a
-    foo13b y = y
-    type family Let_0123456789y (a :: x) :: Nat
-    type instance Let_0123456789y x = Apply SuccSym0 ZeroSym0
-    data Let_0123456789ySym0 (k :: TyFun x Nat)
-    type instance Apply Let_0123456789ySym0 a = Let_0123456789y a
-    type Foo2 = Let_0123456789zSym0
-    type Foo2Sym0 = Foo2
-    type Let_0123456789y = Apply SuccSym0 ZeroSym0
-    type Let_0123456789ySym0 = Let_0123456789y
-    type Let_0123456789z = Apply SuccSym0 Let_0123456789ySym0
-    type Let_0123456789zSym0 = Let_0123456789z
-    type family Let_0123456789y (a :: x) :: Nat
-    type instance Let_0123456789y x = Apply SuccSym0 x
-    data Let_0123456789ySym0 (k :: TyFun x Nat)
-    type instance Apply Let_0123456789ySym0 a = Let_0123456789y a
-    type family Let_0123456789f (a :: x) (a :: Nat) :: Nat
-    type instance Let_0123456789f x y = Apply SuccSym0 y
-    data Let_0123456789fSym1 (l :: x) (l :: TyFun Nat Nat)
-    data Let_0123456789fSym0 (k :: TyFun x (TyFun Nat Nat -> *))
-    type instance Apply (Let_0123456789fSym1 a) a = Let_0123456789f a a
-    type instance Apply Let_0123456789fSym0 a = Let_0123456789fSym1 a
-    type family Let_0123456789z (a :: x) (a :: y) :: Nat
-    type instance Let_0123456789z x y = Apply SuccSym0 y
-    data Let_0123456789zSym1 (l :: x) (l :: TyFun y Nat)
-    data Let_0123456789zSym0 (k :: TyFun x (TyFun y Nat -> *))
-    type instance Apply (Let_0123456789zSym1 a) a = Let_0123456789z a a
-    type instance Apply Let_0123456789zSym0 a = Let_0123456789zSym1 a
-    type family Let_0123456789f (a :: x) (a :: Nat) :: Nat
-    type instance Let_0123456789f x y =
-        Apply SuccSym0 (Apply (Apply Let_0123456789zSym0 x) y)
-    data Let_0123456789fSym1 (l :: x) (l :: TyFun Nat Nat)
-    data Let_0123456789fSym0 (k :: TyFun x (TyFun Nat Nat -> *))
-    type instance Apply (Let_0123456789fSym1 a) a = Let_0123456789f a a
-    type instance Apply Let_0123456789fSym0 a = Let_0123456789fSym1 a
-    type family Let_0123456789f (a :: x) (a :: Nat) :: Nat
-    type instance Let_0123456789f x y = Apply SuccSym0 y
-    data Let_0123456789fSym1 (l :: x) (l :: TyFun Nat Nat)
-    data Let_0123456789fSym0 (k :: TyFun x (TyFun Nat Nat -> *))
-    type instance Apply (Let_0123456789fSym1 a) a = Let_0123456789f a a
-    type instance Apply Let_0123456789fSym0 a = Let_0123456789fSym1 a
-    type family Let_0123456789z (a :: x) :: Nat
-    type instance Let_0123456789z x =
-        Apply (Apply Let_0123456789fSym0 x) x
-    data Let_0123456789zSym0 (k :: TyFun x Nat)
-    type instance Apply Let_0123456789zSym0 a = Let_0123456789z a
-    type family Let_0123456789x (a :: x) :: Nat
-    type instance Let_0123456789x x = ZeroSym0
-    data Let_0123456789xSym0 (k :: TyFun x Nat)
-    type instance Apply Let_0123456789xSym0 a = Let_0123456789x a
-    type family Lambda_0123456789 (x :: x) (t :: k) :: r
-    type instance Lambda_0123456789 x x = x
-    data Lambda_0123456789Sym1 (l :: x) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym1 a) a =
-        Lambda_0123456789 a a
-    type family Let_0123456789z (a :: x) :: Nat
-    type instance Let_0123456789z x =
-        Apply (Lambda_0123456789Sym1 x) ZeroSym0
-    data Let_0123456789zSym0 (k :: TyFun x Nat)
-    type instance Apply Let_0123456789zSym0 a = Let_0123456789z a
-    type family Lambda_0123456789 (x :: x) (t :: k) :: r
-    type instance Lambda_0123456789 x x = x
-    data Lambda_0123456789Sym1 (l :: x) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym1 a) a =
-        Lambda_0123456789 a a
-    type family Let_0123456789z (a :: x) :: TyFun Nat Nat -> *
-    type instance Let_0123456789z x = Lambda_0123456789Sym1 x
-    data Let_0123456789zSym0 (k :: TyFun x (TyFun Nat Nat -> *))
-    type instance Apply Let_0123456789zSym0 a = Let_0123456789z a
-    type family Let_0123456789+ (a :: x) (a :: Nat) (a :: Nat) :: Nat
-    type instance Let_0123456789+ x Zero m = m
-    type instance Let_0123456789+ x (Succ n) m =
-        Apply SuccSym0 (Apply (Apply (Apply Let_0123456789+Sym0 x) n) m)
-    data Let_0123456789+Sym2 (l :: x) (l :: Nat) (l :: TyFun Nat Nat)
-    data Let_0123456789+Sym1 (l :: x)
-                             (l :: TyFun Nat (TyFun Nat Nat -> *))
-    data Let_0123456789+Sym0 (k :: TyFun x (TyFun Nat (TyFun Nat Nat
-                                                       -> *)
-                                            -> *))
-    type instance Apply (Let_0123456789+Sym2 a a) a =
-        Let_0123456789+ a a a
-    type instance Apply (Let_0123456789+Sym1 a) a =
-        Let_0123456789+Sym2 a a
-    type instance Apply Let_0123456789+Sym0 a = Let_0123456789+Sym1 a
-    type family Let_0123456789+ (a :: x) (a :: Nat) (a :: Nat) :: Nat
-    type instance Let_0123456789+ x Zero m = m
-    type instance Let_0123456789+ x (Succ n) m =
-        Apply SuccSym0 (Apply (Apply (Apply Let_0123456789+Sym0 x) n) m)
-    data Let_0123456789+Sym2 (l :: x) (l :: Nat) (l :: TyFun Nat Nat)
-    data Let_0123456789+Sym1 (l :: x)
-                             (l :: TyFun Nat (TyFun Nat Nat -> *))
-    data Let_0123456789+Sym0 (k :: TyFun x (TyFun Nat (TyFun Nat Nat
-                                                       -> *)
-                                            -> *))
-    type instance Apply (Let_0123456789+Sym2 a a) a =
-        Let_0123456789+ a a a
-    type instance Apply (Let_0123456789+Sym1 a) a =
-        Let_0123456789+Sym2 a a
-    type instance Apply Let_0123456789+Sym0 a = Let_0123456789+Sym1 a
-    type family Let_0123456789z (a :: x) :: Nat
-    type instance Let_0123456789z x = x
-    data Let_0123456789zSym0 (k :: TyFun x Nat)
-    type instance Apply Let_0123456789zSym0 a = Let_0123456789z a
-    type family Let_0123456789+ (a :: x) (a :: Nat) (a :: Nat) :: Nat
-    type instance Let_0123456789+ x Zero m = m
-    type instance Let_0123456789+ x (Succ n) m =
-        Apply SuccSym0 (Apply (Apply (Apply Let_0123456789+Sym0 x) n) x)
-    data Let_0123456789+Sym2 (l :: x) (l :: Nat) (l :: TyFun Nat Nat)
-    data Let_0123456789+Sym1 (l :: x)
-                             (l :: TyFun Nat (TyFun Nat Nat -> *))
-    data Let_0123456789+Sym0 (k :: TyFun x (TyFun Nat (TyFun Nat Nat
-                                                       -> *)
-                                            -> *))
-    type instance Apply (Let_0123456789+Sym2 a a) a =
-        Let_0123456789+ a a a
-    type instance Apply (Let_0123456789+Sym1 a) a =
-        Let_0123456789+Sym2 a a
-    type instance Apply Let_0123456789+Sym0 a = Let_0123456789+Sym1 a
-    type family Let_0123456789bar (a :: x) :: a
-    type instance Let_0123456789bar x = x
-    data Let_0123456789barSym0 (k :: TyFun x a)
-    type instance Apply Let_0123456789barSym0 a = Let_0123456789bar a
-    type family Foo1 (a :: Nat) :: Nat
-    type instance Foo1 x = Apply Let_0123456789ySym0 x
-    data Foo1Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo1Sym0 a = Foo1 a
-    type family Foo3 (a :: Nat) :: Nat
-    type instance Foo3 x = Apply Let_0123456789ySym0 x
-    data Foo3Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo3Sym0 a = Foo3 a
-    type family Foo4 (a :: Nat) :: Nat
-    type instance Foo4 x = Apply (Apply Let_0123456789fSym0 x) x
-    data Foo4Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo4Sym0 a = Foo4 a
-    type family Foo5 (a :: Nat) :: Nat
-    type instance Foo5 x = Apply (Apply Let_0123456789fSym0 x) x
-    data Foo5Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo5Sym0 a = Foo5 a
-    type family Foo6 (a :: Nat) :: Nat
-    type instance Foo6 x = Apply Let_0123456789zSym0 x
-    data Foo6Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo6Sym0 a = Foo6 a
-    type family Foo7 (a :: Nat) :: Nat
-    type instance Foo7 x = Apply Let_0123456789xSym0 x
-    data Foo7Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo7Sym0 a = Foo7 a
-    type family Foo8 (a :: Nat) :: Nat
-    type instance Foo8 x = Apply Let_0123456789zSym0 x
-    data Foo8Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo8Sym0 a = Foo8 a
-    type family Foo9 (a :: Nat) :: Nat
-    type instance Foo9 x = Apply (Apply Let_0123456789zSym0 x) x
-    data Foo9Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo9Sym0 a = Foo9 a
-    type family Foo10 (a :: Nat) :: Nat
-    type instance Foo10 x =
-        Apply (Apply (Apply Let_0123456789+Sym0 x) (Apply SuccSym0 ZeroSym0)) x
-    data Foo10Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo10Sym0 a = Foo10 a
-    type family Foo11 (a :: Nat) :: Nat
-    type instance Foo11 x =
-        Apply (Apply (Apply Let_0123456789+Sym0 x) (Apply SuccSym0 ZeroSym0)) (Apply Let_0123456789zSym0 x)
-    data Foo11Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo11Sym0 a = Foo11 a
-    type family Foo12 (a :: Nat) :: Nat
-    type instance Foo12 x =
-        Apply (Apply (Apply Let_0123456789+Sym0 x) x) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))
-    data Foo12Sym0 (k :: TyFun Nat Nat)
-    type instance Apply Foo12Sym0 a = Foo12 a
-    type family Foo13 (a :: a) :: a
-    type instance Foo13 x =
-        Apply Foo13bSym0 (Apply Let_0123456789barSym0 x)
-    data Foo13Sym0 (k :: TyFun a a)
-    type instance Apply Foo13Sym0 a = Foo13 a
-    type family Foo13b (a :: a) :: a
-    type instance Foo13b y = y
-    data Foo13bSym0 (k :: TyFun a a)
-    type instance Apply Foo13bSym0 a = Foo13b a
diff --git a/tests/compile-and-dump/Singletons/LetStatements.ghc78.template b/tests/compile-and-dump/Singletons/LetStatements.ghc78.template
--- a/tests/compile-and-dump/Singletons/LetStatements.ghc78.template
+++ b/tests/compile-and-dump/Singletons/LetStatements.ghc78.template
@@ -191,9 +191,9 @@
     foo14 :: Nat -> (Nat, Nat)
     foo14 x = let (y, z) = (Succ x, x) in (z, y)
     type family Case_0123456789 x t where
-      Case_0123456789 x (GHC.Tuple.(,) y_0123456789 z) = y_0123456789
+      Case_0123456789 x '(y_0123456789, z) = y_0123456789
     type family Case_0123456789 x t where
-      Case_0123456789 x (GHC.Tuple.(,) z y_0123456789) = y_0123456789
+      Case_0123456789 x '(z, y_0123456789) = y_0123456789
     type Let_0123456789YSym1 t = Let_0123456789Y t
     instance SuppressUnusedWarnings Let_0123456789YSym0 where
       suppressUnusedWarnings _
@@ -517,7 +517,7 @@
     instance SuppressUnusedWarnings Foo14Sym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Foo14Sym0KindInference GHC.Tuple.())
-    data Foo14Sym0 (l :: TyFun Nat (GHC.Tuple.(,) Nat Nat))
+    data Foo14Sym0 (l :: TyFun Nat (Nat, Nat))
       = forall arg. KindOf (Apply Foo14Sym0 arg) ~ KindOf (Foo14Sym1 arg) =>
         Foo14Sym0KindInference
     type instance Apply Foo14Sym0 l = Foo14Sym1 l
@@ -626,7 +626,7 @@
       = forall arg. KindOf (Apply Foo1Sym0 arg) ~ KindOf (Foo1Sym1 arg) =>
         Foo1Sym0KindInference
     type instance Apply Foo1Sym0 l = Foo1Sym1 l
-    type family Foo14 (a :: Nat) :: GHC.Tuple.(,) Nat Nat where
+    type family Foo14 (a :: Nat) :: (Nat, Nat) where
       Foo14 x = Apply (Apply Tuple2Sym0 (Let_0123456789ZSym1 x)) (Let_0123456789YSym1 x)
     type family Foo13_ (a :: a) :: a where
       Foo13_ y = y
diff --git a/tests/compile-and-dump/Singletons/Maybe.ghc76.template b/tests/compile-and-dump/Singletons/Maybe.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/Maybe.ghc76.template
+++ /dev/null
@@ -1,59 +0,0 @@
-Singletons/Maybe.hs:0:0: Splicing declarations
-    singletons
-      [d| data Maybe a
-            = Nothing | Just a
-            deriving (Eq, Show) |]
-  ======>
-    Singletons/Maybe.hs:(0,0)-(0,0)
-    data Maybe a
-      = Nothing | Just a
-      deriving (Eq, Show)
-    type instance (:==) Nothing Nothing = TrueSym0
-    type instance (:==) Nothing (Just b) = FalseSym0
-    type instance (:==) (Just a) Nothing = FalseSym0
-    type instance (:==) (Just a) (Just b) = :== a b
-    type MaybeTyCtor = Maybe
-    data MaybeTyCtorSym0 (k :: TyFun * *)
-    type instance Apply MaybeTyCtorSym0 a = MaybeTyCtor a
-    type NothingSym0 = Nothing
-    data JustSym0 (k :: TyFun a (Maybe a))
-    type instance Apply JustSym0 a = Just a
-    data instance Sing (z :: Maybe a)
-      = z ~ Nothing => SNothing |
-        forall (n :: a). z ~ Just n => SJust (Sing n)
-    type SMaybe (z :: Maybe a) = Sing z
-    instance SingKind (KProxy :: KProxy a) =>
-             SingKind (KProxy :: KProxy (Maybe a)) where
-      type instance DemoteRep (KProxy :: KProxy (Maybe a)) =
-          Maybe (DemoteRep (KProxy :: KProxy a))
-      fromSing SNothing = Nothing
-      fromSing (SJust b) = Just (fromSing b)
-      toSing Nothing = SomeSing SNothing
-      toSing (Just b)
-        = case toSing b :: SomeSing (KProxy :: KProxy a) of {
-            SomeSing c -> SomeSing (SJust c) }
-    instance SEq (KProxy :: KProxy a) =>
-             SEq (KProxy :: KProxy (Maybe a)) where
-      %:== SNothing SNothing = STrue
-      %:== SNothing (SJust _) = SFalse
-      %:== (SJust _) SNothing = SFalse
-      %:== (SJust a) (SJust b) = (%:==) a b
-    instance SDecide (KProxy :: KProxy a) =>
-             SDecide (KProxy :: KProxy (Maybe a)) where
-      %~ SNothing SNothing = Proved Refl
-      %~ SNothing (SJust _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SJust _) SNothing
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SJust a) (SJust b)
-        = case (%~) a b of {
-            Proved Refl -> Proved Refl
-            Disproved contra -> Disproved (\ Refl -> contra Refl) }
-    instance SingI Nothing where
-      sing = SNothing
-    instance SingI n => SingI (Just (n :: a)) where
-      sing = SJust sing
diff --git a/tests/compile-and-dump/Singletons/Nat.ghc76.template b/tests/compile-and-dump/Singletons/Nat.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/Nat.ghc76.template
+++ /dev/null
@@ -1,89 +0,0 @@
-Singletons/Nat.hs:0:0: Splicing declarations
-    singletons
-      [d| plus :: Nat -> Nat -> Nat
-          plus Zero m = m
-          plus (Succ n) m = Succ (plus n m)
-          pred :: Nat -> Nat
-          pred Zero = Zero
-          pred (Succ n) = n
-          
-          data Nat
-            where
-              Zero :: Nat
-              Succ :: Nat -> Nat
-            deriving (Eq, Show, Read) |]
-  ======>
-    Singletons/Nat.hs:(0,0)-(0,0)
-    data Nat
-      = Zero | Succ Nat
-      deriving (Eq, Show, Read)
-    plus :: Nat -> Nat -> Nat
-    plus Zero m = m
-    plus (Succ n) m = Succ (plus n m)
-    pred :: Nat -> Nat
-    pred Zero = Zero
-    pred (Succ n) = n
-    type instance (:==) Zero Zero = TrueSym0
-    type instance (:==) Zero (Succ b) = FalseSym0
-    type instance (:==) (Succ a) Zero = FalseSym0
-    type instance (:==) (Succ a) (Succ b) = :== a b
-    type NatTyCtor = Nat
-    type NatTyCtorSym0 = NatTyCtor
-    type ZeroSym0 = Zero
-    data SuccSym0 (k :: TyFun Nat Nat)
-    type instance Apply SuccSym0 a = Succ a
-    type family Plus (a :: Nat) (a :: Nat) :: Nat
-    type instance Plus Zero m = m
-    type instance Plus (Succ n) m =
-        Apply SuccSym0 (Apply (Apply PlusSym0 n) m)
-    data PlusSym1 (l :: Nat) (l :: TyFun Nat Nat)
-    data PlusSym0 (k :: TyFun Nat (TyFun Nat Nat -> *))
-    type instance Apply (PlusSym1 a) a = Plus a a
-    type instance Apply PlusSym0 a = PlusSym1 a
-    type family Pred (a :: Nat) :: Nat
-    type instance Pred Zero = ZeroSym0
-    type instance Pred (Succ n) = n
-    data PredSym0 (k :: TyFun Nat Nat)
-    type instance Apply PredSym0 a = Pred a
-    data instance Sing (z :: Nat)
-      = z ~ Zero => SZero |
-        forall (n :: Nat). z ~ Succ n => SSucc (Sing n)
-    type SNat (z :: Nat) = Sing z
-    instance SingKind (KProxy :: KProxy Nat) where
-      type instance DemoteRep (KProxy :: KProxy Nat) = Nat
-      fromSing SZero = Zero
-      fromSing (SSucc b) = Succ (fromSing b)
-      toSing Zero = SomeSing SZero
-      toSing (Succ b)
-        = case toSing b :: SomeSing (KProxy :: KProxy Nat) of {
-            SomeSing c -> SomeSing (SSucc c) }
-    instance SEq (KProxy :: KProxy Nat) where
-      %:== SZero SZero = STrue
-      %:== SZero (SSucc _) = SFalse
-      %:== (SSucc _) SZero = SFalse
-      %:== (SSucc a) (SSucc b) = (%:==) a b
-    instance SDecide (KProxy :: KProxy Nat) where
-      %~ SZero SZero = Proved Refl
-      %~ SZero (SSucc _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SSucc _) SZero
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SSucc a) (SSucc b)
-        = case (%~) a b of {
-            Proved Refl -> Proved Refl
-            Disproved contra -> Disproved (\ Refl -> contra Refl) }
-    instance SingI Zero where
-      sing = SZero
-    instance SingI n => SingI (Succ (n :: Nat)) where
-      sing = SSucc sing
-    sPlus ::
-      forall (t :: Nat) (t :: Nat). Sing t -> Sing t -> Sing (Plus t t)
-    sPlus SZero m = m
-    sPlus (SSucc n) m = SSucc (sPlus n m)
-    sPred :: forall (t :: Nat). Sing t -> Sing (Pred t)
-    sPred SZero = SZero
-    sPred (SSucc n) = n
diff --git a/tests/compile-and-dump/Singletons/Operators.ghc76.template b/tests/compile-and-dump/Singletons/Operators.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/Operators.ghc76.template
+++ /dev/null
@@ -1,70 +0,0 @@
-Singletons/Operators.hs:0:0: Splicing declarations
-    singletons
-      [d| child :: Foo -> Foo
-          child FLeaf = FLeaf
-          child (a :+: _) = a
-          + :: Nat -> Nat -> Nat
-          Zero + m = m
-          (Succ n) + m = Succ (n + m)
-          
-          data Foo
-            where
-              FLeaf :: Foo
-              :+: :: Foo -> Foo -> Foo |]
-  ======>
-    Singletons/Operators.hs:(0,0)-(0,0)
-    data Foo = FLeaf | (:+:) Foo Foo
-    child :: Foo -> Foo
-    child FLeaf = FLeaf
-    child (a :+: _) = a
-    + :: Nat -> Nat -> Nat
-    + Zero m = m
-    + (Succ n) m = Succ (n + m)
-    type FooTyCtor = Foo
-    type FooTyCtorSym0 = FooTyCtor
-    type FLeafSym0 = FLeaf
-    data (:+:$$) (l :: Foo) (l :: TyFun Foo Foo)
-    data (:+:$) (k :: TyFun Foo (TyFun Foo Foo -> *))
-    type instance Apply (:+:$$ a) a = :+: a a
-    type instance Apply :+:$ a = :+:$$ a
-    type family Child (a :: Foo) :: Foo
-    type instance Child FLeaf = FLeafSym0
-    type instance Child (:+: a z) = a
-    data ChildSym0 (k :: TyFun Foo Foo)
-    type instance Apply ChildSym0 a = Child a
-    type family (:+) (a :: Nat) (a :: Nat) :: Nat
-    type instance (:+) Zero m = m
-    type instance (:+) (Succ n) m =
-        Apply SuccSym0 (Apply (Apply :+$ n) m)
-    data (:+$$) (l :: Nat) (l :: TyFun Nat Nat)
-    data (:+$) (k :: TyFun Nat (TyFun Nat Nat -> *))
-    type instance Apply (:+$$ a) a = :+ a a
-    type instance Apply :+$ a = :+$$ a
-    data instance Sing (z :: Foo)
-      = z ~ FLeaf => SFLeaf |
-        forall (n :: Foo) (n :: Foo). z ~ :+: n n =>
-        (:%+:) (Sing n) (Sing n)
-    type SFoo (z :: Foo) = Sing z
-    instance SingKind (KProxy :: KProxy Foo) where
-      type instance DemoteRep (KProxy :: KProxy Foo) = Foo
-      fromSing SFLeaf = FLeaf
-      fromSing (:%+: b b) = (:+:) (fromSing b) (fromSing b)
-      toSing FLeaf = SomeSing SFLeaf
-      toSing (:+: b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy Foo), 
-               toSing b :: SomeSing (KProxy :: KProxy Foo))
-          of {
-            (SomeSing c, SomeSing c) -> SomeSing ((:%+:) c c) }
-    instance SingI FLeaf where
-      sing = SFLeaf
-    instance (SingI n, SingI n) =>
-             SingI (:+: (n :: Foo) (n :: Foo)) where
-      sing = (:%+:) sing sing
-    sChild :: forall (t :: Foo). Sing t -> Sing (Child t)
-    sChild SFLeaf = SFLeaf
-    sChild (:%+: a _) = a
-    %:+ ::
-      forall (t :: Nat) (t :: Nat). Sing t -> Sing t -> Sing (:+ t t)
-    %:+ SZero m = m
-    %:+ (SSucc n) m = SSucc ((%:+) n m)
diff --git a/tests/compile-and-dump/Singletons/PatternMatching.ghc76.template b/tests/compile-and-dump/Singletons/PatternMatching.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/PatternMatching.ghc76.template
+++ /dev/null
@@ -1,131 +0,0 @@
-Promote/PatternMatching.hs:0:0: Splicing declarations
-    promote
-      [d| pr = Pair (Succ Zero) ([Zero])
-          complex = Pair (Pair (Just Zero) Zero) False
-          tuple = (False, Just Zero, True)
-          aList = [Zero, Succ Zero, Succ (Succ Zero)]
-          
-          data Pair a b
-            = Pair a b
-            deriving (Show) |]
-  ======>
-    Promote/PatternMatching.hs:(0,0)-(0,0)
-    data Pair a b
-      = Pair a b
-      deriving (Show)
-    pr = Pair (Succ Zero) [Zero]
-    complex = Pair (Pair (Just Zero) Zero) False
-    tuple = (False, Just Zero, True)
-    aList = [Zero, Succ Zero, Succ (Succ Zero)]
-    type PairTyCtor = Pair
-    data PairTyCtorSym1 (l :: *) (l :: TyFun * *)
-    data PairTyCtorSym0 (k :: TyFun * (TyFun * * -> *))
-    type instance Apply (PairTyCtorSym1 a) a = PairTyCtor a a
-    type instance Apply PairTyCtorSym0 a = PairTyCtorSym1 a
-    data PairSym1 (l :: a) (l :: TyFun b (Pair a b))
-    data PairSym0 (k :: TyFun a (TyFun b (Pair a b) -> *))
-    type instance Apply (PairSym1 a) a = Pair a a
-    type instance Apply PairSym0 a = PairSym1 a
-    type Pr =
-        Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) '[ZeroSym0]
-    type PrSym0 = Pr
-    type Complex =
-        Apply (Apply PairSym0 (Apply (Apply PairSym0 (Apply JustSym0 ZeroSym0)) ZeroSym0)) FalseSym0
-    type ComplexSym0 = Complex
-    type Tuple = '(FalseSym0, Apply JustSym0 ZeroSym0, TrueSym0)
-    type TupleSym0 = Tuple
-    type AList =
-        '[ZeroSym0,
-          Apply SuccSym0 ZeroSym0,
-          Apply SuccSym0 (Apply SuccSym0 ZeroSym0)]
-    type AListSym0 = AList
-Promote/PatternMatching.hs:0:0: Splicing declarations
-    promote
-      [d| Pair sz lz = pr
-          Pair (Pair jz zz) fls = complex
-          (tf, tjz, tt) = tuple
-          [_, lsz, (Succ blimy)] = aList
-          foo1 :: (a, b) -> a
-          foo1 (x, y) = (\ _ -> x) y
-          foo2 :: (# a, b #) -> a
-          foo2 t@(# x, y #) = case t of { (# a, b #) -> (\ _ -> a) b } |]
-  ======>
-    Promote/PatternMatching.hs:(0,0)-(0,0)
-    Pair sz lz = pr
-    Pair (Pair jz zz) fls = complex
-    (tf, tjz, tt) = tuple
-    [_, lsz, Succ blimy] = aList
-    foo1 :: forall a b. (a, b) -> a
-    foo1 (x, y) = \ _ -> x y
-    foo2 :: forall a b. (# a, b #) -> a
-    foo2 t@(# x, y #) = case t of { (# a, b #) -> \ _ -> a b }
-    type Sz = Extract_0123456789 PrSym0
-    type SzSym0 = Sz
-    type Lz = Extract_0123456789 PrSym0
-    type LzSym0 = Lz
-    type family Extract_0123456789 (a :: Pair a b) :: a
-    type family Extract_0123456789 (a :: Pair a b) :: b
-    type instance Extract_0123456789 (Pair a a) = a
-    type instance Extract_0123456789 (Pair a a) = a
-    type Jz = Extract_0123456789 (Extract_0123456789 ComplexSym0)
-    type JzSym0 = Jz
-    type Zz = Extract_0123456789 (Extract_0123456789 ComplexSym0)
-    type ZzSym0 = Zz
-    type Fls = Extract_0123456789 ComplexSym0
-    type FlsSym0 = Fls
-    type family Extract_0123456789 (a :: Pair a b) :: a
-    type family Extract_0123456789 (a :: Pair a b) :: b
-    type instance Extract_0123456789 (Pair a a) = a
-    type instance Extract_0123456789 (Pair a a) = a
-    type family Extract_0123456789 (a :: Pair a b) :: a
-    type family Extract_0123456789 (a :: Pair a b) :: b
-    type instance Extract_0123456789 (Pair a a) = a
-    type instance Extract_0123456789 (Pair a a) = a
-    type Tf = Extract_0123456789 TupleSym0
-    type TfSym0 = Tf
-    type Tjz = Extract_0123456789 TupleSym0
-    type TjzSym0 = Tjz
-    type Tt = Extract_0123456789 TupleSym0
-    type TtSym0 = Tt
-    type family Extract_0123456789 (a :: GHC.Tuple.(,,) a b c) :: a
-    type family Extract_0123456789 (a :: GHC.Tuple.(,,) a b c) :: b
-    type family Extract_0123456789 (a :: GHC.Tuple.(,,) a b c) :: c
-    type instance Extract_0123456789 (GHC.Tuple.(,,) a a a) = a
-    type instance Extract_0123456789 (GHC.Tuple.(,,) a a a) = a
-    type instance Extract_0123456789 (GHC.Tuple.(,,) a a a) = a
-    type Lsz = Head (Tail AListSym0)
-    type LszSym0 = Lsz
-    type Blimy = Extract_0123456789 (Head (Tail (Tail AListSym0)))
-    type BlimySym0 = Blimy
-    type family Extract_0123456789 (a :: Nat) :: Nat
-    type instance Extract_0123456789 (Succ a) = a
-    type family Lambda_0123456789 (x :: x) (y :: y) (t :: k) :: r
-    type instance Lambda_0123456789 x y z = x
-    data Lambda_0123456789Sym2 (l :: x) (l :: y) (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym2 a a) a =
-        Lambda_0123456789 a a a
-    type family Lambda_0123456789 (x :: x)
-                                  (y :: y)
-                                  (a :: a)
-                                  (b :: b)
-                                  (t :: k) :: r
-    type instance Lambda_0123456789 x y a b z = a
-    data Lambda_0123456789Sym4 (l :: x)
-                               (l :: y)
-                               (l :: a)
-                               (l :: b)
-                               (l :: TyFun k r)
-    type instance Apply (Lambda_0123456789Sym4 a a a a) a =
-        Lambda_0123456789 a a a a a
-    type family Case_0123456789 (t :: k) (x :: x) (y :: y) :: r
-    type instance Case_0123456789 '(a, b) x y =
-        Apply (Lambda_0123456789Sym4 x y a b) b
-    type family Foo1 (a :: (a, b)) :: a
-    type instance Foo1 '(x, y) = Apply (Lambda_0123456789Sym2 x y) y
-    data Foo1Sym0 (k :: TyFun (a, b) a)
-    type instance Apply Foo1Sym0 a = Foo1 a
-    type family Foo2 (a :: (a, b)) :: a
-    type instance Foo2 '(x, y) =
-        Case_0123456789 (Apply (Apply Tuple2Sym0 x) y) x y
-    data Foo2Sym0 (k :: TyFun (a, b) a)
-    type instance Apply Foo2Sym0 a = Foo2 a
diff --git a/tests/compile-and-dump/Singletons/PatternMatching.ghc78.template b/tests/compile-and-dump/Singletons/PatternMatching.ghc78.template
--- a/tests/compile-and-dump/Singletons/PatternMatching.ghc78.template
+++ b/tests/compile-and-dump/Singletons/PatternMatching.ghc78.template
@@ -37,13 +37,13 @@
     type ComplexSym0 = Complex
     type PrSym0 = Pr
     type AList =
-        Apply (Apply (:$) ZeroSym0) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:$) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))) GHC.Types.[]))
+        Apply (Apply (:$) ZeroSym0) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:$) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))) '[]))
     type Tuple =
         Apply (Apply (Apply Tuple3Sym0 FalseSym0) (Apply JustSym0 ZeroSym0)) TrueSym0
     type Complex =
         Apply (Apply PairSym0 (Apply (Apply PairSym0 (Apply JustSym0 ZeroSym0)) ZeroSym0)) FalseSym0
     type Pr =
-        Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:$) ZeroSym0) GHC.Types.[])
+        Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:$) ZeroSym0) '[])
     sAList :: Sing AListSym0
     sTuple :: Sing TupleSym0
     sComplex :: Sing ComplexSym0
@@ -210,7 +210,8 @@
         Lambda_0123456789Sym0KindInference
     type instance Apply Lambda_0123456789Sym0 l = Lambda_0123456789Sym1 l
     type family Case_0123456789 x y t where
-      Case_0123456789 x y (GHC.Tuple.(,) a b) = Apply (Apply (Apply (Apply (Apply Lambda_0123456789Sym0 x) y) a) b) b
+      Case_0123456789 x y '(a,
+                            b) = Apply (Apply (Apply (Apply (Apply Lambda_0123456789Sym0 x) y) a) b) b
     type family Case_0123456789 x y arg_0123456789 t where
       Case_0123456789 x y arg_0123456789 z = x
     type family Lambda_0123456789 x y t where
@@ -241,15 +242,15 @@
         Lambda_0123456789Sym0KindInference
     type instance Apply Lambda_0123456789Sym0 l = Lambda_0123456789Sym1 l
     type family Case_0123456789 t where
-      Case_0123456789 ((GHC.Types.:) z ((GHC.Types.:) y_0123456789 ((GHC.Types.:) (Succ z) GHC.Types.[]))) = y_0123456789
+      Case_0123456789 '[z, y_0123456789, Succ z] = y_0123456789
     type family Case_0123456789 t where
-      Case_0123456789 ((GHC.Types.:) z ((GHC.Types.:) z ((GHC.Types.:) (Succ y_0123456789) GHC.Types.[]))) = y_0123456789
+      Case_0123456789 '[z, z, Succ y_0123456789] = y_0123456789
     type family Case_0123456789 t where
-      Case_0123456789 (GHC.Tuple.(,,) y_0123456789 z z) = y_0123456789
+      Case_0123456789 '(y_0123456789, z, z) = y_0123456789
     type family Case_0123456789 t where
-      Case_0123456789 (GHC.Tuple.(,,) z y_0123456789 z) = y_0123456789
+      Case_0123456789 '(z, y_0123456789, z) = y_0123456789
     type family Case_0123456789 t where
-      Case_0123456789 (GHC.Tuple.(,,) z z y_0123456789) = y_0123456789
+      Case_0123456789 '(z, z, y_0123456789) = y_0123456789
     type family Case_0123456789 t where
       Case_0123456789 (Pair (Pair y_0123456789 z) z) = y_0123456789
     type family Case_0123456789 t where
@@ -260,19 +261,19 @@
       Case_0123456789 (Pair y_0123456789 z) = y_0123456789
     type family Case_0123456789 t where
       Case_0123456789 (Pair z y_0123456789) = y_0123456789
-    type Foo2Sym1 (t :: GHC.Tuple.(,) a b) = Foo2 t
+    type Foo2Sym1 (t :: (a, b)) = Foo2 t
     instance SuppressUnusedWarnings Foo2Sym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Foo2Sym0KindInference GHC.Tuple.())
-    data Foo2Sym0 (l :: TyFun (GHC.Tuple.(,) a b) a)
+    data Foo2Sym0 (l :: TyFun (a, b) a)
       = forall arg. KindOf (Apply Foo2Sym0 arg) ~ KindOf (Foo2Sym1 arg) =>
         Foo2Sym0KindInference
     type instance Apply Foo2Sym0 l = Foo2Sym1 l
-    type Foo1Sym1 (t :: GHC.Tuple.(,) a b) = Foo1 t
+    type Foo1Sym1 (t :: (a, b)) = Foo1 t
     instance SuppressUnusedWarnings Foo1Sym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Foo1Sym0KindInference GHC.Tuple.())
-    data Foo1Sym0 (l :: TyFun (GHC.Tuple.(,) a b) a)
+    data Foo1Sym0 (l :: TyFun (a, b) a)
       = forall arg. KindOf (Apply Foo1Sym0 arg) ~ KindOf (Foo1Sym1 arg) =>
         Foo1Sym0KindInference
     type instance Apply Foo1Sym0 l = Foo1Sym1 l
@@ -290,10 +291,11 @@
     type X_0123456789Sym0 = X_0123456789
     type X_0123456789Sym0 = X_0123456789
     type X_0123456789Sym0 = X_0123456789
-    type family Foo2 (a :: GHC.Tuple.(,) a b) :: a where
-      Foo2 (GHC.Tuple.(,) x y) = Case_0123456789 x y (Let_0123456789Scrutinee_0123456789Sym2 x y)
-    type family Foo1 (a :: GHC.Tuple.(,) a b) :: a where
-      Foo1 (GHC.Tuple.(,) x y) = Apply (Apply (Apply Lambda_0123456789Sym0 x) y) y
+    type family Foo2 (a :: (a, b)) :: a where
+      Foo2 '(x,
+             y) = Case_0123456789 x y (Let_0123456789Scrutinee_0123456789Sym2 x y)
+    type family Foo1 (a :: (a, b)) :: a where
+      Foo1 '(x, y) = Apply (Apply (Apply Lambda_0123456789Sym0 x) y) y
     type Lsz = (Case_0123456789 X_0123456789Sym0 :: Nat)
     type Blimy = Case_0123456789 X_0123456789Sym0
     type Tf = Case_0123456789 X_0123456789Sym0
@@ -308,10 +310,8 @@
     type X_0123456789 = ComplexSym0
     type X_0123456789 = TupleSym0
     type X_0123456789 = AListSym0
-    sFoo2 ::
-      forall (t :: GHC.Tuple.(,) a b). Sing t -> Sing (Apply Foo2Sym0 t)
-    sFoo1 ::
-      forall (t :: GHC.Tuple.(,) a b). Sing t -> Sing (Apply Foo1Sym0 t)
+    sFoo2 :: forall (t :: (a, b)). Sing t -> Sing (Apply Foo2Sym0 t)
+    sFoo1 :: forall (t :: (a, b)). Sing t -> Sing (Apply Foo1Sym0 t)
     sLsz :: Sing LszSym0
     sBlimy :: Sing BlimySym0
     sTf :: Sing TfSym0
@@ -408,7 +408,7 @@
                  lambda ::
                    forall y_0123456789 wild wild.
                    Sing y_0123456789
-                   -> Sing (Case_0123456789 (Apply (Apply (:$) wild) (Apply (Apply (:$) y_0123456789) (Apply (Apply (:$) (Apply SuccSym0 wild)) GHC.Types.[]))))
+                   -> Sing (Case_0123456789 (Apply (Apply (:$) wild) (Apply (Apply (:$) y_0123456789) (Apply (Apply (:$) (Apply SuccSym0 wild)) '[]))))
                  lambda y_0123456789 = y_0123456789
                in lambda sY_0123456789 }
     sBlimy
@@ -418,7 +418,7 @@
                  lambda ::
                    forall y_0123456789 wild wild.
                    Sing y_0123456789
-                   -> Sing (Case_0123456789 (Apply (Apply (:$) wild) (Apply (Apply (:$) wild) (Apply (Apply (:$) (Apply SuccSym0 y_0123456789)) GHC.Types.[]))))
+                   -> Sing (Case_0123456789 (Apply (Apply (:$) wild) (Apply (Apply (:$) wild) (Apply (Apply (:$) (Apply SuccSym0 y_0123456789)) '[]))))
                  lambda y_0123456789 = y_0123456789
                in lambda sY_0123456789 }
     sTf
diff --git a/tests/compile-and-dump/Singletons/ReturnFunc.ghc76.template b/tests/compile-and-dump/Singletons/ReturnFunc.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/ReturnFunc.ghc76.template
+++ /dev/null
diff --git a/tests/compile-and-dump/Singletons/Sections.ghc76.template b/tests/compile-and-dump/Singletons/Sections.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/Sections.ghc76.template
+++ /dev/null
@@ -1,48 +0,0 @@
-Promote/Sections.hs:0:0: Splicing declarations
-    promote
-      [d| + :: Nat -> Nat -> Nat
-          Zero + m = m
-          (Succ n) + m = Succ (n + m)
-          foo1 :: [Nat]
-          foo1 = map ((Succ Zero) +) [Zero, Succ Zero]
-          foo2 :: [Nat]
-          foo2 = map (+ (Succ Zero)) [Zero, Succ Zero]
-          foo3 :: [Nat]
-          foo3 = zipWith (+) [Succ Zero, Succ Zero] [Zero, Succ Zero] |]
-  ======>
-    Promote/Sections.hs:(0,0)-(0,0)
-    + :: Nat -> Nat -> Nat
-    + Zero m = m
-    + (Succ n) m = Succ (n + m)
-    foo1 :: [Nat]
-    foo1 = map (Succ Zero +) [Zero, Succ Zero]
-    foo2 :: [Nat]
-    foo2 = map (+ Succ Zero) [Zero, Succ Zero]
-    foo3 :: [Nat]
-    foo3 = zipWith (+) [Succ Zero, Succ Zero] [Zero, Succ Zero]
-    type Foo1 =
-        Apply (Apply MapSym0 (Apply :+$ (Apply SuccSym0 ZeroSym0))) '[ZeroSym0,
-                                                                      Apply SuccSym0 ZeroSym0]
-    type Foo1Sym0 = Foo1
-    type Foo2 =
-        Apply (Apply MapSym0 Lambda_0123456789Sym0) '[ZeroSym0,
-                                                      Apply SuccSym0 ZeroSym0]
-    type Foo2Sym0 = Foo2
-    type family Lambda_0123456789 (t :: k) :: r
-    type instance Lambda_0123456789 x =
-        Apply (Apply :+$ x) (Apply SuccSym0 ZeroSym0)
-    data Lambda_0123456789Sym0 (k :: TyFun k r)
-    type instance Apply Lambda_0123456789Sym0 a = Lambda_0123456789 a
-    type Foo3 =
-        Apply (Apply (Apply ZipWithSym0 :+$) '[Apply SuccSym0 ZeroSym0,
-                                               Apply SuccSym0 ZeroSym0]) '[ZeroSym0,
-                                                                           Apply SuccSym0 ZeroSym0]
-    type Foo3Sym0 = Foo3
-    type family (:+) (a :: Nat) (a :: Nat) :: Nat
-    type instance (:+) Zero m = m
-    type instance (:+) (Succ n) m =
-        Apply SuccSym0 (Apply (Apply :+$ n) m)
-    data (:+$$) (l :: Nat) (l :: TyFun Nat Nat)
-    data (:+$) (k :: TyFun Nat (TyFun Nat Nat -> *))
-    type instance Apply (:+$$ a) a = :+ a a
-    type instance Apply :+$ a = :+$$ a
diff --git a/tests/compile-and-dump/Singletons/Sections.ghc78.template b/tests/compile-and-dump/Singletons/Sections.ghc78.template
--- a/tests/compile-and-dump/Singletons/Sections.ghc78.template
+++ b/tests/compile-and-dump/Singletons/Sections.ghc78.template
@@ -53,11 +53,11 @@
       (:+) Zero m = m
       (:+) (Succ n) m = Apply SuccSym0 (Apply (Apply (:+$) n) m)
     type Foo1 =
-        (Apply (Apply MapSym0 (Apply (:+$) (Apply SuccSym0 ZeroSym0))) (Apply (Apply (:$) ZeroSym0) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) GHC.Types.[])) :: GHC.Types.[] Nat)
+        (Apply (Apply MapSym0 (Apply (:+$) (Apply SuccSym0 ZeroSym0))) (Apply (Apply (:$) ZeroSym0) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) '[])) :: [Nat])
     type Foo2 =
-        (Apply (Apply MapSym0 Lambda_0123456789Sym0) (Apply (Apply (:$) ZeroSym0) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) GHC.Types.[])) :: GHC.Types.[] Nat)
+        (Apply (Apply MapSym0 Lambda_0123456789Sym0) (Apply (Apply (:$) ZeroSym0) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) '[])) :: [Nat])
     type Foo3 =
-        (Apply (Apply (Apply ZipWithSym0 (:+$)) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) GHC.Types.[]))) (Apply (Apply (:$) ZeroSym0) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) GHC.Types.[])) :: GHC.Types.[] Nat)
+        (Apply (Apply (Apply ZipWithSym0 (:+$)) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) '[]))) (Apply (Apply (:$) ZeroSym0) (Apply (Apply (:$) (Apply SuccSym0 ZeroSym0)) '[])) :: [Nat])
     (%:+) ::
       forall (t :: Nat) (t :: Nat).
       Sing t -> Sing t -> Sing (Apply (Apply (:+$) t) t)
diff --git a/tests/compile-and-dump/Singletons/Star.ghc76.template b/tests/compile-and-dump/Singletons/Star.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/Star.ghc76.template
+++ /dev/null
@@ -1,188 +0,0 @@
-Singletons/Star.hs:0:0: Splicing declarations
-    singletonStar [''Nat, ''Int, ''String, ''Maybe, ''Vec]
-  ======>
-    Singletons/Star.hs:0:0:
-    data Rep
-      = Nat | Int | String | Maybe Rep | Vec Rep Nat
-      deriving (Eq, Show, Read)
-    type instance (:==) Nat Nat = TrueSym0
-    type instance (:==) Nat Int = FalseSym0
-    type instance (:==) Nat String = FalseSym0
-    type instance (:==) Nat (Maybe b) = FalseSym0
-    type instance (:==) Nat (Vec b b) = FalseSym0
-    type instance (:==) Int Nat = FalseSym0
-    type instance (:==) Int Int = TrueSym0
-    type instance (:==) Int String = FalseSym0
-    type instance (:==) Int (Maybe b) = FalseSym0
-    type instance (:==) Int (Vec b b) = FalseSym0
-    type instance (:==) String Nat = FalseSym0
-    type instance (:==) String Int = FalseSym0
-    type instance (:==) String String = TrueSym0
-    type instance (:==) String (Maybe b) = FalseSym0
-    type instance (:==) String (Vec b b) = FalseSym0
-    type instance (:==) (Maybe a) Nat = FalseSym0
-    type instance (:==) (Maybe a) Int = FalseSym0
-    type instance (:==) (Maybe a) String = FalseSym0
-    type instance (:==) (Maybe a) (Maybe b) = :== a b
-    type instance (:==) (Maybe a) (Vec b b) = FalseSym0
-    type instance (:==) (Vec a a) Nat = FalseSym0
-    type instance (:==) (Vec a a) Int = FalseSym0
-    type instance (:==) (Vec a a) String = FalseSym0
-    type instance (:==) (Vec a a) (Maybe b) = FalseSym0
-    type instance (:==) (Vec a a) (Vec b b) = :&& (:== a b) (:== a b)
-    data instance Sing (z :: *)
-      = z ~ Nat => SNat |
-        z ~ Int => SInt |
-        z ~ String => SString |
-        forall (n :: *). z ~ Maybe n => SMaybe (Sing n) |
-        forall (n :: *) (n :: Nat). z ~ Vec n n => SVec (Sing n) (Sing n)
-    type SRep (z :: *) = Sing z
-    instance SingKind (KProxy :: KProxy *) where
-      type instance DemoteRep (KProxy :: KProxy *) = Rep
-      fromSing SNat = Nat
-      fromSing SInt = Int
-      fromSing SString = String
-      fromSing (SMaybe b) = Maybe (fromSing b)
-      fromSing (SVec b b) = Vec (fromSing b) (fromSing b)
-      toSing Nat = SomeSing SNat
-      toSing Int = SomeSing SInt
-      toSing String = SomeSing SString
-      toSing (Maybe b)
-        = case toSing b :: SomeSing (KProxy :: KProxy *) of {
-            SomeSing c -> SomeSing (SMaybe c) }
-      toSing (Vec b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy *),
-               toSing b :: SomeSing (KProxy :: KProxy Nat))
-          of {
-            (SomeSing c, SomeSing c) -> SomeSing (SVec c c) }
-    instance SEq (KProxy :: KProxy *) where
-      %:== SNat SNat = STrue
-      %:== SNat SInt = SFalse
-      %:== SNat SString = SFalse
-      %:== SNat (SMaybe _) = SFalse
-      %:== SNat (SVec _ _) = SFalse
-      %:== SInt SNat = SFalse
-      %:== SInt SInt = STrue
-      %:== SInt SString = SFalse
-      %:== SInt (SMaybe _) = SFalse
-      %:== SInt (SVec _ _) = SFalse
-      %:== SString SNat = SFalse
-      %:== SString SInt = SFalse
-      %:== SString SString = STrue
-      %:== SString (SMaybe _) = SFalse
-      %:== SString (SVec _ _) = SFalse
-      %:== (SMaybe _) SNat = SFalse
-      %:== (SMaybe _) SInt = SFalse
-      %:== (SMaybe _) SString = SFalse
-      %:== (SMaybe a) (SMaybe b) = (%:==) a b
-      %:== (SMaybe _) (SVec _ _) = SFalse
-      %:== (SVec _ _) SNat = SFalse
-      %:== (SVec _ _) SInt = SFalse
-      %:== (SVec _ _) SString = SFalse
-      %:== (SVec _ _) (SMaybe _) = SFalse
-      %:== (SVec a a) (SVec b b) = (%:&&) ((%:==) a b) ((%:==) a b)
-    instance SDecide (KProxy :: KProxy *) where
-      %~ SNat SNat = Proved Refl
-      %~ SNat SInt
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SNat SString
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SNat (SMaybe _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SNat (SVec _ _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SInt SNat
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SInt SInt = Proved Refl
-      %~ SInt SString
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SInt (SMaybe _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SInt (SVec _ _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SString SNat
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SString SInt
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SString SString = Proved Refl
-      %~ SString (SMaybe _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ SString (SVec _ _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SMaybe _) SNat
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SMaybe _) SInt
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SMaybe _) SString
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SMaybe a) (SMaybe b)
-        = case (%~) a b of {
-            Proved Refl -> Proved Refl
-            Disproved contra -> Disproved (\ Refl -> contra Refl) }
-      %~ (SMaybe _) (SVec _ _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SVec _ _) SNat
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SVec _ _) SInt
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SVec _ _) SString
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SVec _ _) (SMaybe _)
-        = Disproved
-            (\case {
-               _ -> error "Empty case reached -- this should be impossible" })
-      %~ (SVec a a) (SVec b b)
-        = case ((%~) a b, (%~) a b) of {
-            (Proved Refl, Proved Refl) -> Proved Refl
-            (Disproved contra, _) -> Disproved (\ Refl -> contra Refl)
-            (_, Disproved contra) -> Disproved (\ Refl -> contra Refl) }
-    instance SingI Nat where
-      sing = SNat
-    instance SingI Int where
-      sing = SInt
-    instance SingI String where
-      sing = SString
-    instance SingI n => SingI (Maybe (n :: *)) where
-      sing = SMaybe sing
-    instance (SingI n, SingI n) =>
-             SingI (Vec (n :: *) (n :: Nat)) where
-      sing = SVec sing sing
diff --git a/tests/compile-and-dump/Singletons/T33.ghc78.template b/tests/compile-and-dump/Singletons/T33.ghc78.template
--- a/tests/compile-and-dump/Singletons/T33.ghc78.template
+++ b/tests/compile-and-dump/Singletons/T33.ghc78.template
@@ -6,19 +6,18 @@
     Singletons/T33.hs:(0,0)-(0,0)
     foo :: (Bool, Bool) -> ()
     foo ~(_, _) = GHC.Tuple.()
-    type FooSym1 (t :: GHC.Tuple.(,) Bool Bool) = Foo t
+    type FooSym1 (t :: (Bool, Bool)) = Foo t
     instance SuppressUnusedWarnings FooSym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) FooSym0KindInference GHC.Tuple.())
-    data FooSym0 (l :: TyFun (GHC.Tuple.(,) Bool Bool) GHC.Tuple.())
+    data FooSym0 (l :: TyFun (Bool, Bool) ())
       = forall arg. KindOf (Apply FooSym0 arg) ~ KindOf (FooSym1 arg) =>
         FooSym0KindInference
     type instance Apply FooSym0 l = FooSym1 l
-    type family Foo (a :: GHC.Tuple.(,) Bool Bool) :: GHC.Tuple.() where
-      Foo (GHC.Tuple.(,) z z) = Tuple0Sym0
+    type family Foo (a :: (Bool, Bool)) :: () where
+      Foo '(z, z) = Tuple0Sym0
     sFoo ::
-      forall (t :: GHC.Tuple.(,) Bool Bool).
-      Sing t -> Sing (Apply FooSym0 t)
+      forall (t :: (Bool, Bool)). Sing t -> Sing (Apply FooSym0 t)
     sFoo (STuple2 _ _)
       = let
           lambda ::
diff --git a/tests/compile-and-dump/Singletons/TopLevelPatterns.ghc76.template b/tests/compile-and-dump/Singletons/TopLevelPatterns.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/TopLevelPatterns.ghc76.template
+++ /dev/null
@@ -1,98 +0,0 @@
-Promote/TopLevelPatterns.hs:0:0: Splicing declarations
-    promote
-      [d| data Bool = False | True
-          data Foo = Bar Bool Bool |]
-  ======>
-    Promote/TopLevelPatterns.hs:(0,0)-(0,0)
-    data Bool = False | True
-    data Foo = Bar Bool Bool
-    type BoolTyCtor = Bool
-    type BoolTyCtorSym0 = BoolTyCtor
-    type FalseSym0 = False
-    type TrueSym0 = True
-    type FooTyCtor = Foo
-    type FooTyCtorSym0 = FooTyCtor
-    data BarSym1 (l :: Bool) (l :: TyFun Bool Foo)
-    data BarSym0 (k :: TyFun Bool (TyFun Bool Foo -> *))
-    type instance Apply (BarSym1 a) a = Bar a a
-    type instance Apply BarSym0 a = BarSym1 a
-Promote/TopLevelPatterns.hs:0:0: Splicing declarations
-    promote
-      [d| otherwise :: Bool
-          otherwise = True
-          id :: a -> a
-          id x = x
-          not :: Bool -> Bool
-          not True = False
-          not False = True
-          false_ = False
-          f, g :: Bool -> Bool
-          [f, g] = [not, id]
-          h, i :: Bool -> Bool
-          (h, i) = (f, g)
-          j, k :: Bool
-          (Bar j k) = Bar True (h False)
-          l, m :: Bool
-          [l, m] = [not True, id False] |]
-  ======>
-    Promote/TopLevelPatterns.hs:(0,0)-(0,0)
-    otherwise :: Bool
-    otherwise = True
-    id :: forall a. a -> a
-    id x = x
-    not :: Bool -> Bool
-    not True = False
-    not False = True
-    false_ = False
-    f :: Bool -> Bool
-    g :: Bool -> Bool
-    [f, g] = [not, id]
-    h :: Bool -> Bool
-    i :: Bool -> Bool
-    (h, i) = (f, g)
-    j :: Bool
-    k :: Bool
-    Bar j k = Bar True (h False)
-    l :: Bool
-    m :: Bool
-    [l, m] = [not True, id False]
-    type Otherwise = TrueSym0
-    type OtherwiseSym0 = Otherwise
-    type False_ = FalseSym0
-    type False_Sym0 = False_
-    type F = Head '[NotSym0, IdSym0]
-    type FSym0 = F
-    type G = Head (Tail '[NotSym0, IdSym0])
-    type GSym0 = G
-    type H = Extract_0123456789 '(FSym0, GSym0)
-    type HSym0 = H
-    type I = Extract_0123456789 '(FSym0, GSym0)
-    type ISym0 = I
-    type family Extract_0123456789 (a :: GHC.Tuple.(,) a b) :: a
-    type family Extract_0123456789 (a :: GHC.Tuple.(,) a b) :: b
-    type instance Extract_0123456789 (GHC.Tuple.(,) a a) = a
-    type instance Extract_0123456789 (GHC.Tuple.(,) a a) = a
-    type J =
-        Extract_0123456789 (Apply (Apply BarSym0 TrueSym0) (Apply HSym0 FalseSym0))
-    type JSym0 = J
-    type K =
-        Extract_0123456789 (Apply (Apply BarSym0 TrueSym0) (Apply HSym0 FalseSym0))
-    type KSym0 = K
-    type family Extract_0123456789 (a :: Foo) :: Bool
-    type family Extract_0123456789 (a :: Foo) :: Bool
-    type instance Extract_0123456789 (Bar a a) = a
-    type instance Extract_0123456789 (Bar a a) = a
-    type L = Head '[Apply NotSym0 TrueSym0, Apply IdSym0 FalseSym0]
-    type LSym0 = L
-    type M =
-        Head (Tail '[Apply NotSym0 TrueSym0, Apply IdSym0 FalseSym0])
-    type MSym0 = M
-    type family Id (a :: a) :: a
-    type instance Id x = x
-    data IdSym0 (k :: TyFun a a)
-    type instance Apply IdSym0 a = Id a
-    type family Not (a :: Bool) :: Bool
-    type instance Not True = FalseSym0
-    type instance Not False = TrueSym0
-    data NotSym0 (k :: TyFun Bool Bool)
-    type instance Apply NotSym0 a = Not a
diff --git a/tests/compile-and-dump/Singletons/Tuples.ghc76.template b/tests/compile-and-dump/Singletons/Tuples.ghc76.template
deleted file mode 100644
--- a/tests/compile-and-dump/Singletons/Tuples.ghc76.template
+++ /dev/null
@@ -1,532 +0,0 @@
-Singletons/Tuples.hs:0:0: Splicing declarations
-    genSingletons
-      [''(), ''(,), ''(,,), ''(,,,), ''(,,,,), ''(,,,,,), ''(,,,,,,)]
-  ======>
-    Singletons/Tuples.hs:(0,0)-(0,0)
-    type TupleTyCtor0 = GHC.Tuple.()
-    type TupleTyCtor0Sym0 = TupleTyCtor0
-    type Tuple0Sym0 = GHC.Tuple.()
-    data instance Sing (z :: GHC.Tuple.())
-      = z ~ GHC.Tuple.() => STuple0
-    type STuple0 (z :: GHC.Tuple.()) = Sing z
-    instance SingKind (KProxy :: KProxy GHC.Tuple.()) where
-      type instance DemoteRep (KProxy :: KProxy GHC.Tuple.()) =
-          GHC.Tuple.()
-      fromSing STuple0 = GHC.Tuple.()
-      toSing GHC.Tuple.() = SomeSing STuple0
-    instance SingI GHC.Tuple.() where
-      sing = STuple0
-    type TupleTyCtor2 = GHC.Tuple.(,)
-    data TupleTyCtor2Sym1 (l :: *) (l :: TyFun * *)
-    data TupleTyCtor2Sym0 (k :: TyFun * (TyFun * * -> *))
-    type instance Apply (TupleTyCtor2Sym1 a) a = TupleTyCtor2 a a
-    type instance Apply TupleTyCtor2Sym0 a = TupleTyCtor2Sym1 a
-    data Tuple2Sym1 (l :: a) (l :: TyFun b (GHC.Tuple.(,) a b))
-    data Tuple2Sym0 (k :: TyFun a (TyFun b (GHC.Tuple.(,) a b) -> *))
-    type instance Apply (Tuple2Sym1 a) a = GHC.Tuple.(,) a a
-    type instance Apply Tuple2Sym0 a = Tuple2Sym1 a
-    data instance Sing (z :: GHC.Tuple.(,) a b)
-      = forall (n :: a) (n :: b). z ~ GHC.Tuple.(,) n n =>
-        STuple2 (Sing n) (Sing n)
-    type STuple2 (z :: GHC.Tuple.(,) a b) = Sing z
-    instance (SingKind (KProxy :: KProxy a),
-              SingKind (KProxy :: KProxy b)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,) a b)) where
-      type instance DemoteRep (KProxy :: KProxy (GHC.Tuple.(,) a b)) =
-          GHC.Tuple.(,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b))
-      fromSing (STuple2 b b) = GHC.Tuple.(,) (fromSing b) (fromSing b)
-      toSing (GHC.Tuple.(,) b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy a), 
-               toSing b :: SomeSing (KProxy :: KProxy b))
-          of {
-            (SomeSing c, SomeSing c) -> SomeSing (STuple2 c c) }
-    instance (SingI n, SingI n) =>
-             SingI (GHC.Tuple.(,) (n :: a) (n :: b)) where
-      sing = STuple2 sing sing
-    type TupleTyCtor3 = GHC.Tuple.(,,)
-    data TupleTyCtor3Sym2 (l :: *) (l :: *) (l :: TyFun * *)
-    data TupleTyCtor3Sym1 (l :: *) (l :: TyFun * (TyFun * * -> *))
-    data TupleTyCtor3Sym0 (k :: TyFun * (TyFun * (TyFun * * -> *)
-                                         -> *))
-    type instance Apply (TupleTyCtor3Sym2 a a) a = TupleTyCtor3 a a a
-    type instance Apply (TupleTyCtor3Sym1 a) a = TupleTyCtor3Sym2 a a
-    type instance Apply TupleTyCtor3Sym0 a = TupleTyCtor3Sym1 a
-    data Tuple3Sym2 (l :: a)
-                    (l :: b)
-                    (l :: TyFun c (GHC.Tuple.(,,) a b c))
-    data Tuple3Sym1 (l :: a)
-                    (l :: TyFun b (TyFun c (GHC.Tuple.(,,) a b c) -> *))
-    data Tuple3Sym0 (k :: TyFun a (TyFun b (TyFun c (GHC.Tuple.(,,) a b c)
-                                            -> *)
-                                   -> *))
-    type instance Apply (Tuple3Sym2 a a) a = GHC.Tuple.(,,) a a a
-    type instance Apply (Tuple3Sym1 a) a = Tuple3Sym2 a a
-    type instance Apply Tuple3Sym0 a = Tuple3Sym1 a
-    data instance Sing (z :: GHC.Tuple.(,,) a b c)
-      = forall (n :: a) (n :: b) (n :: c). z ~ GHC.Tuple.(,,) n n n =>
-        STuple3 (Sing n) (Sing n) (Sing n)
-    type STuple3 (z :: GHC.Tuple.(,,) a b c) = Sing z
-    instance (SingKind (KProxy :: KProxy a),
-              SingKind (KProxy :: KProxy b),
-              SingKind (KProxy :: KProxy c)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,,) a b c)) where
-      type instance DemoteRep (KProxy :: KProxy (GHC.Tuple.(,,) a b c)) =
-          GHC.Tuple.(,,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b)) (DemoteRep (KProxy :: KProxy c))
-      fromSing (STuple3 b b b)
-        = GHC.Tuple.(,,) (fromSing b) (fromSing b) (fromSing b)
-      toSing (GHC.Tuple.(,,) b b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy a), 
-               toSing b :: SomeSing (KProxy :: KProxy b), 
-               toSing b :: SomeSing (KProxy :: KProxy c))
-          of {
-            (SomeSing c, SomeSing c, SomeSing c) -> SomeSing (STuple3 c c c) }
-    instance (SingI n, SingI n, SingI n) =>
-             SingI (GHC.Tuple.(,,) (n :: a) (n :: b) (n :: c)) where
-      sing = STuple3 sing sing sing
-    type TupleTyCtor4 = GHC.Tuple.(,,,)
-    data TupleTyCtor4Sym3 (l :: *) (l :: *) (l :: *) (l :: TyFun * *)
-    data TupleTyCtor4Sym2 (l :: *)
-                          (l :: *)
-                          (l :: TyFun * (TyFun * * -> *))
-    data TupleTyCtor4Sym1 (l :: *)
-                          (l :: TyFun * (TyFun * (TyFun * * -> *) -> *))
-    data TupleTyCtor4Sym0 (k :: TyFun * (TyFun * (TyFun * (TyFun * *
-                                                           -> *)
-                                                  -> *)
-                                         -> *))
-    type instance Apply (TupleTyCtor4Sym3 a a a) a =
-        TupleTyCtor4 a a a a
-    type instance Apply (TupleTyCtor4Sym2 a a) a =
-        TupleTyCtor4Sym3 a a a
-    type instance Apply (TupleTyCtor4Sym1 a) a = TupleTyCtor4Sym2 a a
-    type instance Apply TupleTyCtor4Sym0 a = TupleTyCtor4Sym1 a
-    data Tuple4Sym3 (l :: a)
-                    (l :: b)
-                    (l :: c)
-                    (l :: TyFun d (GHC.Tuple.(,,,) a b c d))
-    data Tuple4Sym2 (l :: a)
-                    (l :: b)
-                    (l :: TyFun c (TyFun d (GHC.Tuple.(,,,) a b c d) -> *))
-    data Tuple4Sym1 (l :: a)
-                    (l :: TyFun b (TyFun c (TyFun d (GHC.Tuple.(,,,) a b c d) -> *)
-                                   -> *))
-    data Tuple4Sym0 (k :: TyFun a (TyFun b (TyFun c (TyFun d (GHC.Tuple.(,,,) a b c d)
-                                                     -> *)
-                                            -> *)
-                                   -> *))
-    type instance Apply (Tuple4Sym3 a a a) a = GHC.Tuple.(,,,) a a a a
-    type instance Apply (Tuple4Sym2 a a) a = Tuple4Sym3 a a a
-    type instance Apply (Tuple4Sym1 a) a = Tuple4Sym2 a a
-    type instance Apply Tuple4Sym0 a = Tuple4Sym1 a
-    data instance Sing (z :: GHC.Tuple.(,,,) a b c d)
-      = forall (n :: a)
-               (n :: b)
-               (n :: c)
-               (n :: d). z ~ GHC.Tuple.(,,,) n n n n =>
-        STuple4 (Sing n) (Sing n) (Sing n) (Sing n)
-    type STuple4 (z :: GHC.Tuple.(,,,) a b c d) = Sing z
-    instance (SingKind (KProxy :: KProxy a),
-              SingKind (KProxy :: KProxy b),
-              SingKind (KProxy :: KProxy c),
-              SingKind (KProxy :: KProxy d)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,,,) a b c d)) where
-      type instance DemoteRep (KProxy :: KProxy (GHC.Tuple.(,,,) a b c d)) =
-          GHC.Tuple.(,,,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b)) (DemoteRep (KProxy :: KProxy c)) (DemoteRep (KProxy :: KProxy d))
-      fromSing (STuple4 b b b b)
-        = GHC.Tuple.(,,,)
-            (fromSing b) (fromSing b) (fromSing b) (fromSing b)
-      toSing (GHC.Tuple.(,,,) b b b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy a), 
-               toSing b :: SomeSing (KProxy :: KProxy b), 
-               toSing b :: SomeSing (KProxy :: KProxy c), 
-               toSing b :: SomeSing (KProxy :: KProxy d))
-          of {
-            (SomeSing c, SomeSing c, SomeSing c, SomeSing c)
-              -> SomeSing (STuple4 c c c c) }
-    instance (SingI n, SingI n, SingI n, SingI n) =>
-             SingI (GHC.Tuple.(,,,) (n :: a) (n :: b) (n :: c) (n :: d)) where
-      sing = STuple4 sing sing sing sing
-    type TupleTyCtor5 = GHC.Tuple.(,,,,)
-    data TupleTyCtor5Sym4 (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: TyFun * *)
-    data TupleTyCtor5Sym3 (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: TyFun * (TyFun * * -> *))
-    data TupleTyCtor5Sym2 (l :: *)
-                          (l :: *)
-                          (l :: TyFun * (TyFun * (TyFun * * -> *) -> *))
-    data TupleTyCtor5Sym1 (l :: *)
-                          (l :: TyFun * (TyFun * (TyFun * (TyFun * * -> *) -> *) -> *))
-    data TupleTyCtor5Sym0 (k :: TyFun * (TyFun * (TyFun * (TyFun * (TyFun * *
-                                                                    -> *)
-                                                           -> *)
-                                                  -> *)
-                                         -> *))
-    type instance Apply (TupleTyCtor5Sym4 a a a a) a =
-        TupleTyCtor5 a a a a a
-    type instance Apply (TupleTyCtor5Sym3 a a a) a =
-        TupleTyCtor5Sym4 a a a a
-    type instance Apply (TupleTyCtor5Sym2 a a) a =
-        TupleTyCtor5Sym3 a a a
-    type instance Apply (TupleTyCtor5Sym1 a) a = TupleTyCtor5Sym2 a a
-    type instance Apply TupleTyCtor5Sym0 a = TupleTyCtor5Sym1 a
-    data Tuple5Sym4 (l :: a)
-                    (l :: b)
-                    (l :: c)
-                    (l :: d)
-                    (l :: TyFun e (GHC.Tuple.(,,,,) a b c d e))
-    data Tuple5Sym3 (l :: a)
-                    (l :: b)
-                    (l :: c)
-                    (l :: TyFun d (TyFun e (GHC.Tuple.(,,,,) a b c d e) -> *))
-    data Tuple5Sym2 (l :: a)
-                    (l :: b)
-                    (l :: TyFun c (TyFun d (TyFun e (GHC.Tuple.(,,,,) a b c d e) -> *)
-                                   -> *))
-    data Tuple5Sym1 (l :: a)
-                    (l :: TyFun b (TyFun c (TyFun d (TyFun e (GHC.Tuple.(,,,,) a b c d e)
-                                                     -> *)
-                                            -> *)
-                                   -> *))
-    data Tuple5Sym0 (k :: TyFun a (TyFun b (TyFun c (TyFun d (TyFun e (GHC.Tuple.(,,,,) a b c d e)
-                                                              -> *)
-                                                     -> *)
-                                            -> *)
-                                   -> *))
-    type instance Apply (Tuple5Sym4 a a a a) a =
-        GHC.Tuple.(,,,,) a a a a a
-    type instance Apply (Tuple5Sym3 a a a) a = Tuple5Sym4 a a a a
-    type instance Apply (Tuple5Sym2 a a) a = Tuple5Sym3 a a a
-    type instance Apply (Tuple5Sym1 a) a = Tuple5Sym2 a a
-    type instance Apply Tuple5Sym0 a = Tuple5Sym1 a
-    data instance Sing (z :: GHC.Tuple.(,,,,) a b c d e)
-      = forall (n :: a)
-               (n :: b)
-               (n :: c)
-               (n :: d)
-               (n :: e). z ~ GHC.Tuple.(,,,,) n n n n n =>
-        STuple5 (Sing n) (Sing n) (Sing n) (Sing n) (Sing n)
-    type STuple5 (z :: GHC.Tuple.(,,,,) a b c d e) = Sing z
-    instance (SingKind (KProxy :: KProxy a),
-              SingKind (KProxy :: KProxy b),
-              SingKind (KProxy :: KProxy c),
-              SingKind (KProxy :: KProxy d),
-              SingKind (KProxy :: KProxy e)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,,,,) a b c d e)) where
-      type instance DemoteRep (KProxy :: KProxy (GHC.Tuple.(,,,,) a b c d e)) =
-          GHC.Tuple.(,,,,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b)) (DemoteRep (KProxy :: KProxy c)) (DemoteRep (KProxy :: KProxy d)) (DemoteRep (KProxy :: KProxy e))
-      fromSing (STuple5 b b b b b)
-        = GHC.Tuple.(,,,,)
-            (fromSing b) (fromSing b) (fromSing b) (fromSing b) (fromSing b)
-      toSing (GHC.Tuple.(,,,,) b b b b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy a), 
-               toSing b :: SomeSing (KProxy :: KProxy b), 
-               toSing b :: SomeSing (KProxy :: KProxy c), 
-               toSing b :: SomeSing (KProxy :: KProxy d), 
-               toSing b :: SomeSing (KProxy :: KProxy e))
-          of {
-            (SomeSing c, SomeSing c, SomeSing c, SomeSing c, SomeSing c)
-              -> SomeSing (STuple5 c c c c c) }
-    instance (SingI n, SingI n, SingI n, SingI n, SingI n) =>
-             SingI (GHC.Tuple.(,,,,) (n :: a) (n :: b) (n :: c) (n :: d) (n :: e)) where
-      sing = STuple5 sing sing sing sing sing
-    type TupleTyCtor6 = GHC.Tuple.(,,,,,)
-    data TupleTyCtor6Sym5 (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: TyFun * *)
-    data TupleTyCtor6Sym4 (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: TyFun * (TyFun * * -> *))
-    data TupleTyCtor6Sym3 (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: TyFun * (TyFun * (TyFun * * -> *) -> *))
-    data TupleTyCtor6Sym2 (l :: *)
-                          (l :: *)
-                          (l :: TyFun * (TyFun * (TyFun * (TyFun * * -> *) -> *) -> *))
-    data TupleTyCtor6Sym1 (l :: *)
-                          (l :: TyFun * (TyFun * (TyFun * (TyFun * (TyFun * * -> *) -> *)
-                                                  -> *)
-                                         -> *))
-    data TupleTyCtor6Sym0 (k :: TyFun * (TyFun * (TyFun * (TyFun * (TyFun * (TyFun * *
-                                                                             -> *)
-                                                                    -> *)
-                                                           -> *)
-                                                  -> *)
-                                         -> *))
-    type instance Apply (TupleTyCtor6Sym5 a a a a a) a =
-        TupleTyCtor6 a a a a a a
-    type instance Apply (TupleTyCtor6Sym4 a a a a) a =
-        TupleTyCtor6Sym5 a a a a a
-    type instance Apply (TupleTyCtor6Sym3 a a a) a =
-        TupleTyCtor6Sym4 a a a a
-    type instance Apply (TupleTyCtor6Sym2 a a) a =
-        TupleTyCtor6Sym3 a a a
-    type instance Apply (TupleTyCtor6Sym1 a) a = TupleTyCtor6Sym2 a a
-    type instance Apply TupleTyCtor6Sym0 a = TupleTyCtor6Sym1 a
-    data Tuple6Sym5 (l :: a)
-                    (l :: b)
-                    (l :: c)
-                    (l :: d)
-                    (l :: e)
-                    (l :: TyFun f (GHC.Tuple.(,,,,,) a b c d e f))
-    data Tuple6Sym4 (l :: a)
-                    (l :: b)
-                    (l :: c)
-                    (l :: d)
-                    (l :: TyFun e (TyFun f (GHC.Tuple.(,,,,,) a b c d e f) -> *))
-    data Tuple6Sym3 (l :: a)
-                    (l :: b)
-                    (l :: c)
-                    (l :: TyFun d (TyFun e (TyFun f (GHC.Tuple.(,,,,,) a b c d e f)
-                                            -> *)
-                                   -> *))
-    data Tuple6Sym2 (l :: a)
-                    (l :: b)
-                    (l :: TyFun c (TyFun d (TyFun e (TyFun f (GHC.Tuple.(,,,,,) a b c d e f)
-                                                     -> *)
-                                            -> *)
-                                   -> *))
-    data Tuple6Sym1 (l :: a)
-                    (l :: TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (GHC.Tuple.(,,,,,) a b c d e f)
-                                                              -> *)
-                                                     -> *)
-                                            -> *)
-                                   -> *))
-    data Tuple6Sym0 (k :: TyFun a (TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (GHC.Tuple.(,,,,,) a b c d e f)
-                                                                       -> *)
-                                                              -> *)
-                                                     -> *)
-                                            -> *)
-                                   -> *))
-    type instance Apply (Tuple6Sym5 a a a a a) a =
-        GHC.Tuple.(,,,,,) a a a a a a
-    type instance Apply (Tuple6Sym4 a a a a) a = Tuple6Sym5 a a a a a
-    type instance Apply (Tuple6Sym3 a a a) a = Tuple6Sym4 a a a a
-    type instance Apply (Tuple6Sym2 a a) a = Tuple6Sym3 a a a
-    type instance Apply (Tuple6Sym1 a) a = Tuple6Sym2 a a
-    type instance Apply Tuple6Sym0 a = Tuple6Sym1 a
-    data instance Sing (z :: GHC.Tuple.(,,,,,) a b c d e f)
-      = forall (n :: a)
-               (n :: b)
-               (n :: c)
-               (n :: d)
-               (n :: e)
-               (n :: f). z ~ GHC.Tuple.(,,,,,) n n n n n n =>
-        STuple6 (Sing n) (Sing n) (Sing n) (Sing n) (Sing n) (Sing n)
-    type STuple6 (z :: GHC.Tuple.(,,,,,) a b c d e f) = Sing z
-    instance (SingKind (KProxy :: KProxy a),
-              SingKind (KProxy :: KProxy b),
-              SingKind (KProxy :: KProxy c),
-              SingKind (KProxy :: KProxy d),
-              SingKind (KProxy :: KProxy e),
-              SingKind (KProxy :: KProxy f)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,,,,,) a b c d e f)) where
-      type instance DemoteRep (KProxy :: KProxy (GHC.Tuple.(,,,,,) a b c d e f)) =
-          GHC.Tuple.(,,,,,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b)) (DemoteRep (KProxy :: KProxy c)) (DemoteRep (KProxy :: KProxy d)) (DemoteRep (KProxy :: KProxy e)) (DemoteRep (KProxy :: KProxy f))
-      fromSing (STuple6 b b b b b b)
-        = GHC.Tuple.(,,,,,)
-            (fromSing b)
-            (fromSing b)
-            (fromSing b)
-            (fromSing b)
-            (fromSing b)
-            (fromSing b)
-      toSing (GHC.Tuple.(,,,,,) b b b b b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy a), 
-               toSing b :: SomeSing (KProxy :: KProxy b), 
-               toSing b :: SomeSing (KProxy :: KProxy c), 
-               toSing b :: SomeSing (KProxy :: KProxy d), 
-               toSing b :: SomeSing (KProxy :: KProxy e), 
-               toSing b :: SomeSing (KProxy :: KProxy f))
-          of {
-            (SomeSing c,
-             SomeSing c,
-             SomeSing c,
-             SomeSing c,
-             SomeSing c,
-             SomeSing c)
-              -> SomeSing (STuple6 c c c c c c) }
-    instance (SingI n, SingI n, SingI n, SingI n, SingI n, SingI n) =>
-             SingI (GHC.Tuple.(,,,,,) (n :: a) (n :: b) (n :: c) (n :: d) (n :: e) (n :: f)) where
-      sing = STuple6 sing sing sing sing sing sing
-    type TupleTyCtor7 = GHC.Tuple.(,,,,,,)
-    data TupleTyCtor7Sym6 (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: TyFun * *)
-    data TupleTyCtor7Sym5 (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: TyFun * (TyFun * * -> *))
-    data TupleTyCtor7Sym4 (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: TyFun * (TyFun * (TyFun * * -> *) -> *))
-    data TupleTyCtor7Sym3 (l :: *)
-                          (l :: *)
-                          (l :: *)
-                          (l :: TyFun * (TyFun * (TyFun * (TyFun * * -> *) -> *) -> *))
-    data TupleTyCtor7Sym2 (l :: *)
-                          (l :: *)
-                          (l :: TyFun * (TyFun * (TyFun * (TyFun * (TyFun * * -> *) -> *)
-                                                  -> *)
-                                         -> *))
-    data TupleTyCtor7Sym1 (l :: *)
-                          (l :: TyFun * (TyFun * (TyFun * (TyFun * (TyFun * (TyFun * * -> *)
-                                                                    -> *)
-                                                           -> *)
-                                                  -> *)
-                                         -> *))
-    data TupleTyCtor7Sym0 (k :: TyFun * (TyFun * (TyFun * (TyFun * (TyFun * (TyFun * (TyFun * *
-                                                                                      -> *)
-                                                                             -> *)
-                                                                    -> *)
-                                                           -> *)
-                                                  -> *)
-                                         -> *))
-    type instance Apply (TupleTyCtor7Sym6 a a a a a a) a =
-        TupleTyCtor7 a a a a a a a
-    type instance Apply (TupleTyCtor7Sym5 a a a a a) a =
-        TupleTyCtor7Sym6 a a a a a a
-    type instance Apply (TupleTyCtor7Sym4 a a a a) a =
-        TupleTyCtor7Sym5 a a a a a
-    type instance Apply (TupleTyCtor7Sym3 a a a) a =
-        TupleTyCtor7Sym4 a a a a
-    type instance Apply (TupleTyCtor7Sym2 a a) a =
-        TupleTyCtor7Sym3 a a a
-    type instance Apply (TupleTyCtor7Sym1 a) a = TupleTyCtor7Sym2 a a
-    type instance Apply TupleTyCtor7Sym0 a = TupleTyCtor7Sym1 a
-    data Tuple7Sym6 (l :: a)
-                    (l :: b)
-                    (l :: c)
-                    (l :: d)
-                    (l :: e)
-                    (l :: f)
-                    (l :: TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g))
-    data Tuple7Sym5 (l :: a)
-                    (l :: b)
-                    (l :: c)
-                    (l :: d)
-                    (l :: e)
-                    (l :: TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g) -> *))
-    data Tuple7Sym4 (l :: a)
-                    (l :: b)
-                    (l :: c)
-                    (l :: d)
-                    (l :: TyFun e (TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g)
-                                            -> *)
-                                   -> *))
-    data Tuple7Sym3 (l :: a)
-                    (l :: b)
-                    (l :: c)
-                    (l :: TyFun d (TyFun e (TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g)
-                                                     -> *)
-                                            -> *)
-                                   -> *))
-    data Tuple7Sym2 (l :: a)
-                    (l :: b)
-                    (l :: TyFun c (TyFun d (TyFun e (TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g)
-                                                              -> *)
-                                                     -> *)
-                                            -> *)
-                                   -> *))
-    data Tuple7Sym1 (l :: a)
-                    (l :: TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g)
-                                                                       -> *)
-                                                              -> *)
-                                                     -> *)
-                                            -> *)
-                                   -> *))
-    data Tuple7Sym0 (k :: TyFun a (TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g)
-                                                                                -> *)
-                                                                       -> *)
-                                                              -> *)
-                                                     -> *)
-                                            -> *)
-                                   -> *))
-    type instance Apply (Tuple7Sym6 a a a a a a) a =
-        GHC.Tuple.(,,,,,,) a a a a a a a
-    type instance Apply (Tuple7Sym5 a a a a a) a =
-        Tuple7Sym6 a a a a a a
-    type instance Apply (Tuple7Sym4 a a a a) a = Tuple7Sym5 a a a a a
-    type instance Apply (Tuple7Sym3 a a a) a = Tuple7Sym4 a a a a
-    type instance Apply (Tuple7Sym2 a a) a = Tuple7Sym3 a a a
-    type instance Apply (Tuple7Sym1 a) a = Tuple7Sym2 a a
-    type instance Apply Tuple7Sym0 a = Tuple7Sym1 a
-    data instance Sing (z :: GHC.Tuple.(,,,,,,) a b c d e f g)
-      = forall (n :: a)
-               (n :: b)
-               (n :: c)
-               (n :: d)
-               (n :: e)
-               (n :: f)
-               (n :: g). z ~ GHC.Tuple.(,,,,,,) n n n n n n n =>
-        STuple7 (Sing n) (Sing n) (Sing n) (Sing n) (Sing n) (Sing n) (Sing n)
-    type STuple7 (z :: GHC.Tuple.(,,,,,,) a b c d e f g) = Sing z
-    instance (SingKind (KProxy :: KProxy a),
-              SingKind (KProxy :: KProxy b),
-              SingKind (KProxy :: KProxy c),
-              SingKind (KProxy :: KProxy d),
-              SingKind (KProxy :: KProxy e),
-              SingKind (KProxy :: KProxy f),
-              SingKind (KProxy :: KProxy g)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,,,,,,) a b c d e f g)) where
-      type instance DemoteRep (KProxy :: KProxy (GHC.Tuple.(,,,,,,) a b c d e f g)) =
-          GHC.Tuple.(,,,,,,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b)) (DemoteRep (KProxy :: KProxy c)) (DemoteRep (KProxy :: KProxy d)) (DemoteRep (KProxy :: KProxy e)) (DemoteRep (KProxy :: KProxy f)) (DemoteRep (KProxy :: KProxy g))
-      fromSing (STuple7 b b b b b b b)
-        = GHC.Tuple.(,,,,,,)
-            (fromSing b)
-            (fromSing b)
-            (fromSing b)
-            (fromSing b)
-            (fromSing b)
-            (fromSing b)
-            (fromSing b)
-      toSing (GHC.Tuple.(,,,,,,) b b b b b b b)
-        = case
-              (toSing b :: SomeSing (KProxy :: KProxy a), 
-               toSing b :: SomeSing (KProxy :: KProxy b), 
-               toSing b :: SomeSing (KProxy :: KProxy c), 
-               toSing b :: SomeSing (KProxy :: KProxy d), 
-               toSing b :: SomeSing (KProxy :: KProxy e), 
-               toSing b :: SomeSing (KProxy :: KProxy f), 
-               toSing b :: SomeSing (KProxy :: KProxy g))
-          of {
-            (SomeSing c,
-             SomeSing c,
-             SomeSing c,
-             SomeSing c,
-             SomeSing c,
-             SomeSing c,
-             SomeSing c)
-              -> SomeSing (STuple7 c c c c c c c) }
-    instance (SingI n,
-              SingI n,
-              SingI n,
-              SingI n,
-              SingI n,
-              SingI n,
-              SingI n) =>
-             SingI (GHC.Tuple.(,,,,,,) (n :: a) (n :: b) (n :: c) (n :: d) (n :: e) (n :: f) (n :: g)) where
-      sing = STuple7 sing sing sing sing sing sing sing
diff --git a/tests/compile-and-dump/Singletons/Tuples.ghc78.template b/tests/compile-and-dump/Singletons/Tuples.ghc78.template
--- a/tests/compile-and-dump/Singletons/Tuples.ghc78.template
+++ b/tests/compile-and-dump/Singletons/Tuples.ghc78.template
@@ -3,39 +3,40 @@
       [''(), ''(,), ''(,,), ''(,,,), ''(,,,,), ''(,,,,,), ''(,,,,,,)]
   ======>
     Singletons/Tuples.hs:(0,0)-(0,0)
-    type Tuple0Sym0 = GHC.Tuple.()
-    data instance Sing (z :: GHC.Tuple.())
-      = z ~ GHC.Tuple.() => STuple0
-    type STuple0 (z :: GHC.Tuple.()) = Sing z
-    instance SingKind (KProxy :: KProxy GHC.Tuple.()) where
-      type DemoteRep (KProxy :: KProxy GHC.Tuple.()) = GHC.Tuple.()
+    type Tuple0Sym0 = '()
+    data instance Sing (z :: ()) = z ~ '() => STuple0
+    type STuple0 (z :: ()) = Sing z
+    instance SingKind (KProxy :: KProxy ()) where
+      type DemoteRep (KProxy :: KProxy ()) = ()
       fromSing STuple0 = GHC.Tuple.()
       toSing GHC.Tuple.() = SomeSing STuple0
-    instance SingI GHC.Tuple.() where
+    instance SingI '() where
       sing = STuple0
-    type Tuple2Sym2 (t :: a) (t :: b) = GHC.Tuple.(,) t t
+    type Tuple2Sym2 (t :: a) (t :: b) = '(t, t)
     instance SuppressUnusedWarnings Tuple2Sym1 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple2Sym1KindInference GHC.Tuple.())
-    data Tuple2Sym1 (l :: a) (l :: TyFun b (GHC.Tuple.(,) a b))
+    data Tuple2Sym1 (l :: a) (l :: TyFun b (a, b))
       = forall arg. KindOf (Apply (Tuple2Sym1 l) arg) ~ KindOf (Tuple2Sym2 l arg) =>
         Tuple2Sym1KindInference
     type instance Apply (Tuple2Sym1 l) l = Tuple2Sym2 l l
     instance SuppressUnusedWarnings Tuple2Sym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple2Sym0KindInference GHC.Tuple.())
-    data Tuple2Sym0 (l :: TyFun a (TyFun b (GHC.Tuple.(,) a b) -> *))
+    data Tuple2Sym0 (l :: TyFun a (TyFun b (a, b) -> *))
       = forall arg. KindOf (Apply Tuple2Sym0 arg) ~ KindOf (Tuple2Sym1 arg) =>
         Tuple2Sym0KindInference
     type instance Apply Tuple2Sym0 l = Tuple2Sym1 l
-    data instance Sing (z :: GHC.Tuple.(,) a b)
-      = forall (n :: a) (n :: b). z ~ GHC.Tuple.(,) n n =>
+    data instance Sing (z :: (a, b))
+      = forall (n :: a) (n :: b). z ~ '(n, n) =>
         STuple2 (Sing n) (Sing n)
-    type STuple2 (z :: GHC.Tuple.(,) a b) = Sing z
+    type STuple2 (z :: (a, b)) = Sing z
     instance (SingKind (KProxy :: KProxy a),
               SingKind (KProxy :: KProxy b)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,) a b)) where
-      type DemoteRep (KProxy :: KProxy (GHC.Tuple.(,) a b)) = GHC.Tuple.(,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b))
+             SingKind (KProxy :: KProxy (a, b)) where
+      type DemoteRep (KProxy :: KProxy (a,
+                                        b)) = (DemoteRep (KProxy :: KProxy a),
+                                               DemoteRep (KProxy :: KProxy b))
       fromSing (STuple2 b b) = GHC.Tuple.(,) (fromSing b) (fromSing b)
       toSing (GHC.Tuple.(,) b b)
         = case
@@ -44,45 +45,44 @@
                 (toSing b :: SomeSing (KProxy :: KProxy b))
           of {
             GHC.Tuple.(,) (SomeSing c) (SomeSing c) -> SomeSing (STuple2 c c) }
-    instance (SingI n, SingI n) =>
-             SingI (GHC.Tuple.(,) (n :: a) (n :: b)) where
+    instance (SingI n, SingI n) => SingI '((n :: a), (n :: b)) where
       sing = STuple2 sing sing
-    type Tuple3Sym3 (t :: a) (t :: b) (t :: c) = GHC.Tuple.(,,) t t t
+    type Tuple3Sym3 (t :: a) (t :: b) (t :: c) = '(t, t, t)
     instance SuppressUnusedWarnings Tuple3Sym2 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple3Sym2KindInference GHC.Tuple.())
-    data Tuple3Sym2 (l :: a)
-                    (l :: b)
-                    (l :: TyFun c (GHC.Tuple.(,,) a b c))
+    data Tuple3Sym2 (l :: a) (l :: b) (l :: TyFun c (a, b, c))
       = forall arg. KindOf (Apply (Tuple3Sym2 l l) arg) ~ KindOf (Tuple3Sym3 l l arg) =>
         Tuple3Sym2KindInference
     type instance Apply (Tuple3Sym2 l l) l = Tuple3Sym3 l l l
     instance SuppressUnusedWarnings Tuple3Sym1 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple3Sym1KindInference GHC.Tuple.())
-    data Tuple3Sym1 (l :: a)
-                    (l :: TyFun b (TyFun c (GHC.Tuple.(,,) a b c) -> *))
+    data Tuple3Sym1 (l :: a) (l :: TyFun b (TyFun c (a, b, c) -> *))
       = forall arg. KindOf (Apply (Tuple3Sym1 l) arg) ~ KindOf (Tuple3Sym2 l arg) =>
         Tuple3Sym1KindInference
     type instance Apply (Tuple3Sym1 l) l = Tuple3Sym2 l l
     instance SuppressUnusedWarnings Tuple3Sym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple3Sym0KindInference GHC.Tuple.())
-    data Tuple3Sym0 (l :: TyFun a (TyFun b (TyFun c (GHC.Tuple.(,,) a b c)
-                                            -> *)
+    data Tuple3Sym0 (l :: TyFun a (TyFun b (TyFun c (a, b, c) -> *)
                                    -> *))
       = forall arg. KindOf (Apply Tuple3Sym0 arg) ~ KindOf (Tuple3Sym1 arg) =>
         Tuple3Sym0KindInference
     type instance Apply Tuple3Sym0 l = Tuple3Sym1 l
-    data instance Sing (z :: GHC.Tuple.(,,) a b c)
-      = forall (n :: a) (n :: b) (n :: c). z ~ GHC.Tuple.(,,) n n n =>
+    data instance Sing (z :: (a, b, c))
+      = forall (n :: a) (n :: b) (n :: c). z ~ '(n, n, n) =>
         STuple3 (Sing n) (Sing n) (Sing n)
-    type STuple3 (z :: GHC.Tuple.(,,) a b c) = Sing z
+    type STuple3 (z :: (a, b, c)) = Sing z
     instance (SingKind (KProxy :: KProxy a),
               SingKind (KProxy :: KProxy b),
               SingKind (KProxy :: KProxy c)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,,) a b c)) where
-      type DemoteRep (KProxy :: KProxy (GHC.Tuple.(,,) a b c)) = GHC.Tuple.(,,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b)) (DemoteRep (KProxy :: KProxy c))
+             SingKind (KProxy :: KProxy (a, b, c)) where
+      type DemoteRep (KProxy :: KProxy (a,
+                                        b,
+                                        c)) = (DemoteRep (KProxy :: KProxy a),
+                                               DemoteRep (KProxy :: KProxy b),
+                                               DemoteRep (KProxy :: KProxy c))
       fromSing (STuple3 b b b)
         = GHC.Tuple.(,,) (fromSing b) (fromSing b) (fromSing b)
       toSing (GHC.Tuple.(,,) b b b)
@@ -95,17 +95,16 @@
             GHC.Tuple.(,,) (SomeSing c) (SomeSing c) (SomeSing c)
               -> SomeSing (STuple3 c c c) }
     instance (SingI n, SingI n, SingI n) =>
-             SingI (GHC.Tuple.(,,) (n :: a) (n :: b) (n :: c)) where
+             SingI '((n :: a), (n :: b), (n :: c)) where
       sing = STuple3 sing sing sing
-    type Tuple4Sym4 (t :: a) (t :: b) (t :: c) (t :: d) =
-        GHC.Tuple.(,,,) t t t t
+    type Tuple4Sym4 (t :: a) (t :: b) (t :: c) (t :: d) = '(t, t, t, t)
     instance SuppressUnusedWarnings Tuple4Sym3 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple4Sym3KindInference GHC.Tuple.())
     data Tuple4Sym3 (l :: a)
                     (l :: b)
                     (l :: c)
-                    (l :: TyFun d (GHC.Tuple.(,,,) a b c d))
+                    (l :: TyFun d (a, b, c, d))
       = forall arg. KindOf (Apply (Tuple4Sym3 l l l) arg) ~ KindOf (Tuple4Sym4 l l l arg) =>
         Tuple4Sym3KindInference
     type instance Apply (Tuple4Sym3 l l l) l = Tuple4Sym4 l l l l
@@ -114,7 +113,7 @@
         = snd (GHC.Tuple.(,) Tuple4Sym2KindInference GHC.Tuple.())
     data Tuple4Sym2 (l :: a)
                     (l :: b)
-                    (l :: TyFun c (TyFun d (GHC.Tuple.(,,,) a b c d) -> *))
+                    (l :: TyFun c (TyFun d (a, b, c, d) -> *))
       = forall arg. KindOf (Apply (Tuple4Sym2 l l) arg) ~ KindOf (Tuple4Sym3 l l arg) =>
         Tuple4Sym2KindInference
     type instance Apply (Tuple4Sym2 l l) l = Tuple4Sym3 l l l
@@ -122,34 +121,39 @@
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple4Sym1KindInference GHC.Tuple.())
     data Tuple4Sym1 (l :: a)
-                    (l :: TyFun b (TyFun c (TyFun d (GHC.Tuple.(,,,) a b c d) -> *)
-                                   -> *))
+                    (l :: TyFun b (TyFun c (TyFun d (a, b, c, d) -> *) -> *))
       = forall arg. KindOf (Apply (Tuple4Sym1 l) arg) ~ KindOf (Tuple4Sym2 l arg) =>
         Tuple4Sym1KindInference
     type instance Apply (Tuple4Sym1 l) l = Tuple4Sym2 l l
     instance SuppressUnusedWarnings Tuple4Sym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple4Sym0KindInference GHC.Tuple.())
-    data Tuple4Sym0 (l :: TyFun a (TyFun b (TyFun c (TyFun d (GHC.Tuple.(,,,) a b c d)
+    data Tuple4Sym0 (l :: TyFun a (TyFun b (TyFun c (TyFun d (a,
+                                                              b,
+                                                              c,
+                                                              d)
                                                      -> *)
                                             -> *)
                                    -> *))
       = forall arg. KindOf (Apply Tuple4Sym0 arg) ~ KindOf (Tuple4Sym1 arg) =>
         Tuple4Sym0KindInference
     type instance Apply Tuple4Sym0 l = Tuple4Sym1 l
-    data instance Sing (z :: GHC.Tuple.(,,,) a b c d)
-      = forall (n :: a)
-               (n :: b)
-               (n :: c)
-               (n :: d). z ~ GHC.Tuple.(,,,) n n n n =>
+    data instance Sing (z :: (a, b, c, d))
+      = forall (n :: a) (n :: b) (n :: c) (n :: d). z ~ '(n, n, n, n) =>
         STuple4 (Sing n) (Sing n) (Sing n) (Sing n)
-    type STuple4 (z :: GHC.Tuple.(,,,) a b c d) = Sing z
+    type STuple4 (z :: (a, b, c, d)) = Sing z
     instance (SingKind (KProxy :: KProxy a),
               SingKind (KProxy :: KProxy b),
               SingKind (KProxy :: KProxy c),
               SingKind (KProxy :: KProxy d)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,,,) a b c d)) where
-      type DemoteRep (KProxy :: KProxy (GHC.Tuple.(,,,) a b c d)) = GHC.Tuple.(,,,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b)) (DemoteRep (KProxy :: KProxy c)) (DemoteRep (KProxy :: KProxy d))
+             SingKind (KProxy :: KProxy (a, b, c, d)) where
+      type DemoteRep (KProxy :: KProxy (a,
+                                        b,
+                                        c,
+                                        d)) = (DemoteRep (KProxy :: KProxy a),
+                                               DemoteRep (KProxy :: KProxy b),
+                                               DemoteRep (KProxy :: KProxy c),
+                                               DemoteRep (KProxy :: KProxy d))
       fromSing (STuple4 b b b b)
         = GHC.Tuple.(,,,)
             (fromSing b) (fromSing b) (fromSing b) (fromSing b)
@@ -164,10 +168,10 @@
             GHC.Tuple.(,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)
               -> SomeSing (STuple4 c c c c) }
     instance (SingI n, SingI n, SingI n, SingI n) =>
-             SingI (GHC.Tuple.(,,,) (n :: a) (n :: b) (n :: c) (n :: d)) where
+             SingI '((n :: a), (n :: b), (n :: c), (n :: d)) where
       sing = STuple4 sing sing sing sing
     type Tuple5Sym5 (t :: a) (t :: b) (t :: c) (t :: d) (t :: e) =
-        GHC.Tuple.(,,,,) t t t t t
+        '(t, t, t, t, t)
     instance SuppressUnusedWarnings Tuple5Sym4 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple5Sym4KindInference GHC.Tuple.())
@@ -175,7 +179,7 @@
                     (l :: b)
                     (l :: c)
                     (l :: d)
-                    (l :: TyFun e (GHC.Tuple.(,,,,) a b c d e))
+                    (l :: TyFun e (a, b, c, d, e))
       = forall arg. KindOf (Apply (Tuple5Sym4 l l l l) arg) ~ KindOf (Tuple5Sym5 l l l l arg) =>
         Tuple5Sym4KindInference
     type instance Apply (Tuple5Sym4 l l l l) l = Tuple5Sym5 l l l l l
@@ -185,7 +189,7 @@
     data Tuple5Sym3 (l :: a)
                     (l :: b)
                     (l :: c)
-                    (l :: TyFun d (TyFun e (GHC.Tuple.(,,,,) a b c d e) -> *))
+                    (l :: TyFun d (TyFun e (a, b, c, d, e) -> *))
       = forall arg. KindOf (Apply (Tuple5Sym3 l l l) arg) ~ KindOf (Tuple5Sym4 l l l arg) =>
         Tuple5Sym3KindInference
     type instance Apply (Tuple5Sym3 l l l) l = Tuple5Sym4 l l l l
@@ -194,8 +198,7 @@
         = snd (GHC.Tuple.(,) Tuple5Sym2KindInference GHC.Tuple.())
     data Tuple5Sym2 (l :: a)
                     (l :: b)
-                    (l :: TyFun c (TyFun d (TyFun e (GHC.Tuple.(,,,,) a b c d e) -> *)
-                                   -> *))
+                    (l :: TyFun c (TyFun d (TyFun e (a, b, c, d, e) -> *) -> *))
       = forall arg. KindOf (Apply (Tuple5Sym2 l l) arg) ~ KindOf (Tuple5Sym3 l l arg) =>
         Tuple5Sym2KindInference
     type instance Apply (Tuple5Sym2 l l) l = Tuple5Sym3 l l l
@@ -203,8 +206,7 @@
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple5Sym1KindInference GHC.Tuple.())
     data Tuple5Sym1 (l :: a)
-                    (l :: TyFun b (TyFun c (TyFun d (TyFun e (GHC.Tuple.(,,,,) a b c d e)
-                                                     -> *)
+                    (l :: TyFun b (TyFun c (TyFun d (TyFun e (a, b, c, d, e) -> *)
                                             -> *)
                                    -> *))
       = forall arg. KindOf (Apply (Tuple5Sym1 l) arg) ~ KindOf (Tuple5Sym2 l arg) =>
@@ -213,7 +215,11 @@
     instance SuppressUnusedWarnings Tuple5Sym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple5Sym0KindInference GHC.Tuple.())
-    data Tuple5Sym0 (l :: TyFun a (TyFun b (TyFun c (TyFun d (TyFun e (GHC.Tuple.(,,,,) a b c d e)
+    data Tuple5Sym0 (l :: TyFun a (TyFun b (TyFun c (TyFun d (TyFun e (a,
+                                                                       b,
+                                                                       c,
+                                                                       d,
+                                                                       e)
                                                               -> *)
                                                      -> *)
                                             -> *)
@@ -221,21 +227,29 @@
       = forall arg. KindOf (Apply Tuple5Sym0 arg) ~ KindOf (Tuple5Sym1 arg) =>
         Tuple5Sym0KindInference
     type instance Apply Tuple5Sym0 l = Tuple5Sym1 l
-    data instance Sing (z :: GHC.Tuple.(,,,,) a b c d e)
-      = forall (n :: a)
-               (n :: b)
-               (n :: c)
-               (n :: d)
-               (n :: e). z ~ GHC.Tuple.(,,,,) n n n n n =>
+    data instance Sing (z :: (a, b, c, d, e))
+      = forall (n :: a) (n :: b) (n :: c) (n :: d) (n :: e). z ~ '(n,
+                                                                   n,
+                                                                   n,
+                                                                   n,
+                                                                   n) =>
         STuple5 (Sing n) (Sing n) (Sing n) (Sing n) (Sing n)
-    type STuple5 (z :: GHC.Tuple.(,,,,) a b c d e) = Sing z
+    type STuple5 (z :: (a, b, c, d, e)) = Sing z
     instance (SingKind (KProxy :: KProxy a),
               SingKind (KProxy :: KProxy b),
               SingKind (KProxy :: KProxy c),
               SingKind (KProxy :: KProxy d),
               SingKind (KProxy :: KProxy e)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,,,,) a b c d e)) where
-      type DemoteRep (KProxy :: KProxy (GHC.Tuple.(,,,,) a b c d e)) = GHC.Tuple.(,,,,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b)) (DemoteRep (KProxy :: KProxy c)) (DemoteRep (KProxy :: KProxy d)) (DemoteRep (KProxy :: KProxy e))
+             SingKind (KProxy :: KProxy (a, b, c, d, e)) where
+      type DemoteRep (KProxy :: KProxy (a,
+                                        b,
+                                        c,
+                                        d,
+                                        e)) = (DemoteRep (KProxy :: KProxy a),
+                                               DemoteRep (KProxy :: KProxy b),
+                                               DemoteRep (KProxy :: KProxy c),
+                                               DemoteRep (KProxy :: KProxy d),
+                                               DemoteRep (KProxy :: KProxy e))
       fromSing (STuple5 b b b b b)
         = GHC.Tuple.(,,,,)
             (fromSing b) (fromSing b) (fromSing b) (fromSing b) (fromSing b)
@@ -255,7 +269,7 @@
                              (SomeSing c)
               -> SomeSing (STuple5 c c c c c) }
     instance (SingI n, SingI n, SingI n, SingI n, SingI n) =>
-             SingI (GHC.Tuple.(,,,,) (n :: a) (n :: b) (n :: c) (n :: d) (n :: e)) where
+             SingI '((n :: a), (n :: b), (n :: c), (n :: d), (n :: e)) where
       sing = STuple5 sing sing sing sing sing
     type Tuple6Sym6 (t :: a)
                     (t :: b)
@@ -263,7 +277,7 @@
                     (t :: d)
                     (t :: e)
                     (t :: f) =
-        GHC.Tuple.(,,,,,) t t t t t t
+        '(t, t, t, t, t, t)
     instance SuppressUnusedWarnings Tuple6Sym5 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple6Sym5KindInference GHC.Tuple.())
@@ -272,7 +286,7 @@
                     (l :: c)
                     (l :: d)
                     (l :: e)
-                    (l :: TyFun f (GHC.Tuple.(,,,,,) a b c d e f))
+                    (l :: TyFun f (a, b, c, d, e, f))
       = forall arg. KindOf (Apply (Tuple6Sym5 l l l l l) arg) ~ KindOf (Tuple6Sym6 l l l l l arg) =>
         Tuple6Sym5KindInference
     type instance Apply (Tuple6Sym5 l l l l l) l = Tuple6Sym6 l l l l l l
@@ -283,7 +297,7 @@
                     (l :: b)
                     (l :: c)
                     (l :: d)
-                    (l :: TyFun e (TyFun f (GHC.Tuple.(,,,,,) a b c d e f) -> *))
+                    (l :: TyFun e (TyFun f (a, b, c, d, e, f) -> *))
       = forall arg. KindOf (Apply (Tuple6Sym4 l l l l) arg) ~ KindOf (Tuple6Sym5 l l l l arg) =>
         Tuple6Sym4KindInference
     type instance Apply (Tuple6Sym4 l l l l) l = Tuple6Sym5 l l l l l
@@ -293,9 +307,7 @@
     data Tuple6Sym3 (l :: a)
                     (l :: b)
                     (l :: c)
-                    (l :: TyFun d (TyFun e (TyFun f (GHC.Tuple.(,,,,,) a b c d e f)
-                                            -> *)
-                                   -> *))
+                    (l :: TyFun d (TyFun e (TyFun f (a, b, c, d, e, f) -> *) -> *))
       = forall arg. KindOf (Apply (Tuple6Sym3 l l l) arg) ~ KindOf (Tuple6Sym4 l l l arg) =>
         Tuple6Sym3KindInference
     type instance Apply (Tuple6Sym3 l l l) l = Tuple6Sym4 l l l l
@@ -304,8 +316,7 @@
         = snd (GHC.Tuple.(,) Tuple6Sym2KindInference GHC.Tuple.())
     data Tuple6Sym2 (l :: a)
                     (l :: b)
-                    (l :: TyFun c (TyFun d (TyFun e (TyFun f (GHC.Tuple.(,,,,,) a b c d e f)
-                                                     -> *)
+                    (l :: TyFun c (TyFun d (TyFun e (TyFun f (a, b, c, d, e, f) -> *)
                                             -> *)
                                    -> *))
       = forall arg. KindOf (Apply (Tuple6Sym2 l l) arg) ~ KindOf (Tuple6Sym3 l l arg) =>
@@ -315,7 +326,12 @@
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple6Sym1KindInference GHC.Tuple.())
     data Tuple6Sym1 (l :: a)
-                    (l :: TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (GHC.Tuple.(,,,,,) a b c d e f)
+                    (l :: TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (a,
+                                                                       b,
+                                                                       c,
+                                                                       d,
+                                                                       e,
+                                                                       f)
                                                               -> *)
                                                      -> *)
                                             -> *)
@@ -326,7 +342,12 @@
     instance SuppressUnusedWarnings Tuple6Sym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple6Sym0KindInference GHC.Tuple.())
-    data Tuple6Sym0 (l :: TyFun a (TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (GHC.Tuple.(,,,,,) a b c d e f)
+    data Tuple6Sym0 (l :: TyFun a (TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (a,
+                                                                                b,
+                                                                                c,
+                                                                                d,
+                                                                                e,
+                                                                                f)
                                                                        -> *)
                                                               -> *)
                                                      -> *)
@@ -335,23 +356,33 @@
       = forall arg. KindOf (Apply Tuple6Sym0 arg) ~ KindOf (Tuple6Sym1 arg) =>
         Tuple6Sym0KindInference
     type instance Apply Tuple6Sym0 l = Tuple6Sym1 l
-    data instance Sing (z :: GHC.Tuple.(,,,,,) a b c d e f)
+    data instance Sing (z :: (a, b, c, d, e, f))
       = forall (n :: a)
                (n :: b)
                (n :: c)
                (n :: d)
                (n :: e)
-               (n :: f). z ~ GHC.Tuple.(,,,,,) n n n n n n =>
+               (n :: f). z ~ '(n, n, n, n, n, n) =>
         STuple6 (Sing n) (Sing n) (Sing n) (Sing n) (Sing n) (Sing n)
-    type STuple6 (z :: GHC.Tuple.(,,,,,) a b c d e f) = Sing z
+    type STuple6 (z :: (a, b, c, d, e, f)) = Sing z
     instance (SingKind (KProxy :: KProxy a),
               SingKind (KProxy :: KProxy b),
               SingKind (KProxy :: KProxy c),
               SingKind (KProxy :: KProxy d),
               SingKind (KProxy :: KProxy e),
               SingKind (KProxy :: KProxy f)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,,,,,) a b c d e f)) where
-      type DemoteRep (KProxy :: KProxy (GHC.Tuple.(,,,,,) a b c d e f)) = GHC.Tuple.(,,,,,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b)) (DemoteRep (KProxy :: KProxy c)) (DemoteRep (KProxy :: KProxy d)) (DemoteRep (KProxy :: KProxy e)) (DemoteRep (KProxy :: KProxy f))
+             SingKind (KProxy :: KProxy (a, b, c, d, e, f)) where
+      type DemoteRep (KProxy :: KProxy (a,
+                                        b,
+                                        c,
+                                        d,
+                                        e,
+                                        f)) = (DemoteRep (KProxy :: KProxy a),
+                                               DemoteRep (KProxy :: KProxy b),
+                                               DemoteRep (KProxy :: KProxy c),
+                                               DemoteRep (KProxy :: KProxy d),
+                                               DemoteRep (KProxy :: KProxy e),
+                                               DemoteRep (KProxy :: KProxy f))
       fromSing (STuple6 b b b b b b)
         = GHC.Tuple.(,,,,,)
             (fromSing b)
@@ -378,7 +409,12 @@
                               (SomeSing c)
               -> SomeSing (STuple6 c c c c c c) }
     instance (SingI n, SingI n, SingI n, SingI n, SingI n, SingI n) =>
-             SingI (GHC.Tuple.(,,,,,) (n :: a) (n :: b) (n :: c) (n :: d) (n :: e) (n :: f)) where
+             SingI '((n :: a),
+                     (n :: b),
+                     (n :: c),
+                     (n :: d),
+                     (n :: e),
+                     (n :: f)) where
       sing = STuple6 sing sing sing sing sing sing
     type Tuple7Sym7 (t :: a)
                     (t :: b)
@@ -387,7 +423,7 @@
                     (t :: e)
                     (t :: f)
                     (t :: g) =
-        GHC.Tuple.(,,,,,,) t t t t t t t
+        '(t, t, t, t, t, t, t)
     instance SuppressUnusedWarnings Tuple7Sym6 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple7Sym6KindInference GHC.Tuple.())
@@ -397,7 +433,7 @@
                     (l :: d)
                     (l :: e)
                     (l :: f)
-                    (l :: TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g))
+                    (l :: TyFun g (a, b, c, d, e, f, g))
       = forall arg. KindOf (Apply (Tuple7Sym6 l l l l l l) arg) ~ KindOf (Tuple7Sym7 l l l l l l arg) =>
         Tuple7Sym6KindInference
     type instance Apply (Tuple7Sym6 l l l l l l) l = Tuple7Sym7 l l l l l l l
@@ -409,7 +445,7 @@
                     (l :: c)
                     (l :: d)
                     (l :: e)
-                    (l :: TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g) -> *))
+                    (l :: TyFun f (TyFun g (a, b, c, d, e, f, g) -> *))
       = forall arg. KindOf (Apply (Tuple7Sym5 l l l l l) arg) ~ KindOf (Tuple7Sym6 l l l l l arg) =>
         Tuple7Sym5KindInference
     type instance Apply (Tuple7Sym5 l l l l l) l = Tuple7Sym6 l l l l l l
@@ -420,9 +456,7 @@
                     (l :: b)
                     (l :: c)
                     (l :: d)
-                    (l :: TyFun e (TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g)
-                                            -> *)
-                                   -> *))
+                    (l :: TyFun e (TyFun f (TyFun g (a, b, c, d, e, f, g) -> *) -> *))
       = forall arg. KindOf (Apply (Tuple7Sym4 l l l l) arg) ~ KindOf (Tuple7Sym5 l l l l arg) =>
         Tuple7Sym4KindInference
     type instance Apply (Tuple7Sym4 l l l l) l = Tuple7Sym5 l l l l l
@@ -432,7 +466,7 @@
     data Tuple7Sym3 (l :: a)
                     (l :: b)
                     (l :: c)
-                    (l :: TyFun d (TyFun e (TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g)
+                    (l :: TyFun d (TyFun e (TyFun f (TyFun g (a, b, c, d, e, f, g)
                                                      -> *)
                                             -> *)
                                    -> *))
@@ -444,7 +478,13 @@
         = snd (GHC.Tuple.(,) Tuple7Sym2KindInference GHC.Tuple.())
     data Tuple7Sym2 (l :: a)
                     (l :: b)
-                    (l :: TyFun c (TyFun d (TyFun e (TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g)
+                    (l :: TyFun c (TyFun d (TyFun e (TyFun f (TyFun g (a,
+                                                                       b,
+                                                                       c,
+                                                                       d,
+                                                                       e,
+                                                                       f,
+                                                                       g)
                                                               -> *)
                                                      -> *)
                                             -> *)
@@ -456,7 +496,13 @@
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple7Sym1KindInference GHC.Tuple.())
     data Tuple7Sym1 (l :: a)
-                    (l :: TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g)
+                    (l :: TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (TyFun g (a,
+                                                                                b,
+                                                                                c,
+                                                                                d,
+                                                                                e,
+                                                                                f,
+                                                                                g)
                                                                        -> *)
                                                               -> *)
                                                      -> *)
@@ -468,7 +514,13 @@
     instance SuppressUnusedWarnings Tuple7Sym0 where
       suppressUnusedWarnings _
         = snd (GHC.Tuple.(,) Tuple7Sym0KindInference GHC.Tuple.())
-    data Tuple7Sym0 (l :: TyFun a (TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (TyFun g (GHC.Tuple.(,,,,,,) a b c d e f g)
+    data Tuple7Sym0 (l :: TyFun a (TyFun b (TyFun c (TyFun d (TyFun e (TyFun f (TyFun g (a,
+                                                                                         b,
+                                                                                         c,
+                                                                                         d,
+                                                                                         e,
+                                                                                         f,
+                                                                                         g)
                                                                                 -> *)
                                                                        -> *)
                                                               -> *)
@@ -478,16 +530,16 @@
       = forall arg. KindOf (Apply Tuple7Sym0 arg) ~ KindOf (Tuple7Sym1 arg) =>
         Tuple7Sym0KindInference
     type instance Apply Tuple7Sym0 l = Tuple7Sym1 l
-    data instance Sing (z :: GHC.Tuple.(,,,,,,) a b c d e f g)
+    data instance Sing (z :: (a, b, c, d, e, f, g))
       = forall (n :: a)
                (n :: b)
                (n :: c)
                (n :: d)
                (n :: e)
                (n :: f)
-               (n :: g). z ~ GHC.Tuple.(,,,,,,) n n n n n n n =>
+               (n :: g). z ~ '(n, n, n, n, n, n, n) =>
         STuple7 (Sing n) (Sing n) (Sing n) (Sing n) (Sing n) (Sing n) (Sing n)
-    type STuple7 (z :: GHC.Tuple.(,,,,,,) a b c d e f g) = Sing z
+    type STuple7 (z :: (a, b, c, d, e, f, g)) = Sing z
     instance (SingKind (KProxy :: KProxy a),
               SingKind (KProxy :: KProxy b),
               SingKind (KProxy :: KProxy c),
@@ -495,8 +547,20 @@
               SingKind (KProxy :: KProxy e),
               SingKind (KProxy :: KProxy f),
               SingKind (KProxy :: KProxy g)) =>
-             SingKind (KProxy :: KProxy (GHC.Tuple.(,,,,,,) a b c d e f g)) where
-      type DemoteRep (KProxy :: KProxy (GHC.Tuple.(,,,,,,) a b c d e f g)) = GHC.Tuple.(,,,,,,) (DemoteRep (KProxy :: KProxy a)) (DemoteRep (KProxy :: KProxy b)) (DemoteRep (KProxy :: KProxy c)) (DemoteRep (KProxy :: KProxy d)) (DemoteRep (KProxy :: KProxy e)) (DemoteRep (KProxy :: KProxy f)) (DemoteRep (KProxy :: KProxy g))
+             SingKind (KProxy :: KProxy (a, b, c, d, e, f, g)) where
+      type DemoteRep (KProxy :: KProxy (a,
+                                        b,
+                                        c,
+                                        d,
+                                        e,
+                                        f,
+                                        g)) = (DemoteRep (KProxy :: KProxy a),
+                                               DemoteRep (KProxy :: KProxy b),
+                                               DemoteRep (KProxy :: KProxy c),
+                                               DemoteRep (KProxy :: KProxy d),
+                                               DemoteRep (KProxy :: KProxy e),
+                                               DemoteRep (KProxy :: KProxy f),
+                                               DemoteRep (KProxy :: KProxy g))
       fromSing (STuple7 b b b b b b b)
         = GHC.Tuple.(,,,,,,)
             (fromSing b)
@@ -532,5 +596,11 @@
               SingI n,
               SingI n,
               SingI n) =>
-             SingI (GHC.Tuple.(,,,,,,) (n :: a) (n :: b) (n :: c) (n :: d) (n :: e) (n :: f) (n :: g)) where
+             SingI '((n :: a),
+                     (n :: b),
+                     (n :: c),
+                     (n :: d),
+                     (n :: e),
+                     (n :: f),
+                     (n :: g)) where
       sing = STuple7 sing sing sing sing sing sing sing
