packages feed

singletons 1.1 → 1.1.1

raw patch · 50 files changed

+362/−7457 lines, 50 filesdep ~th-desugar

Dependency ranges changed: th-desugar

Files

CHANGES.md view
@@ -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 --- 
singletons.cabal view
@@ -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
− tests/compile-and-dump/GradingClient/Database.ghc76.template
@@ -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 }
tests/compile-and-dump/GradingClient/Database.ghc78.template view
@@ -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:
− tests/compile-and-dump/GradingClient/Main.ghc76.template
@@ -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))
tests/compile-and-dump/GradingClient/Main.ghc78.template view
@@ -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
− tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc76.template
@@ -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)
tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc78.template view
@@ -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)
− tests/compile-and-dump/Promote/Classes.ghc76.template
tests/compile-and-dump/Promote/Classes.ghc78.template view
@@ -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
− tests/compile-and-dump/Promote/Constructors.ghc76.template
@@ -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
− tests/compile-and-dump/Promote/GenDefunSymbols.ghc76.template
@@ -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
− tests/compile-and-dump/Promote/Newtypes.ghc76.template
@@ -1,2 +0,0 @@-Promote/Newtypes.hs:0:0:-    Newtypes don't promote under GHC 7.6. Use <<data>> instead or upgrade GHC.
tests/compile-and-dump/Promote/TopLevelPatterns.ghc78.template view
@@ -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
− tests/compile-and-dump/Singletons/AsPattern.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/AsPattern.ghc78.template view
@@ -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)
− tests/compile-and-dump/Singletons/BoxUnBox.ghc76.template
@@ -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
− tests/compile-and-dump/Singletons/CaseExpressions.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/CaseExpressions.ghc78.template view
@@ -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
− tests/compile-and-dump/Singletons/Contains.ghc76.template
@@ -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)
tests/compile-and-dump/Singletons/Contains.ghc78.template view
@@ -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)
− tests/compile-and-dump/Singletons/DataValues.ghc76.template
@@ -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))
tests/compile-and-dump/Singletons/DataValues.ghc78.template view
@@ -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
− tests/compile-and-dump/Singletons/Empty.ghc76.template
@@ -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" }
− tests/compile-and-dump/Singletons/EqInstances.ghc76.template
@@ -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" }
− tests/compile-and-dump/Singletons/Error.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/Error.ghc78.template view
@@ -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)
− tests/compile-and-dump/Singletons/HigherOrder.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/HigherOrder.ghc78.template view
@@ -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)
− tests/compile-and-dump/Singletons/LambdaCase.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/LambdaCase.ghc78.template view
@@ -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
− tests/compile-and-dump/Singletons/Lambdas.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/Lambdas.ghc78.template view
@@ -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
− tests/compile-and-dump/Singletons/LambdasComprehensive.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/LambdasComprehensive.ghc78.template view
@@ -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
− tests/compile-and-dump/Singletons/LetStatements.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/LetStatements.ghc78.template view
@@ -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
− tests/compile-and-dump/Singletons/Maybe.ghc76.template
@@ -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
− tests/compile-and-dump/Singletons/Nat.ghc76.template
@@ -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
− tests/compile-and-dump/Singletons/Operators.ghc76.template
@@ -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)
− tests/compile-and-dump/Singletons/PatternMatching.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/PatternMatching.ghc78.template view
@@ -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
− tests/compile-and-dump/Singletons/ReturnFunc.ghc76.template
− tests/compile-and-dump/Singletons/Sections.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/Sections.ghc78.template view
@@ -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)
− tests/compile-and-dump/Singletons/Star.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/T33.ghc78.template view
@@ -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 ::
− tests/compile-and-dump/Singletons/TopLevelPatterns.ghc76.template
@@ -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
− tests/compile-and-dump/Singletons/Tuples.ghc76.template
@@ -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
tests/compile-and-dump/Singletons/Tuples.ghc78.template view
@@ -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