packages feed

singletons-base 3.0 → 3.1

raw patch · 132 files changed

+6728/−5124 lines, 132 filesdep ~basedep ~singletonsdep ~singletons-thsetup-changed

Dependency ranges changed: base, singletons, singletons-th, template-haskell, th-desugar

Files

CHANGES.md view
@@ -1,6 +1,48 @@ Changelog for the `singletons-base` project =========================================== +3.1 [2021.10.30]+----------------+* Require building with GHC 9.2.+* `singletons-base` now supports type-level `Char`s, a feature added in+  GHC 9.2. In particular:++  * Promoting and singling character literal expressions (e.g., `f = 'a'`) is+    now supported. Promoting (but not singling) character patterns+    (e.g., `g 'a' = ()`) is also supported.+  * `GHC.TypeLits.Singletons` now offers singled versions of the `ConsSymbol`,+    `UnconsSymbol`, `CharToNat`, and `NatToChar` type families that were+    introduced to `GHC.TypeLits` in GHC 9.2.+  * `Text.Show.Singletons` now makes use of type-level `Char`s, a feature added+    in GHC 9.2. As a result, there is no longer any need for the `SChar` type+    synonym, so it has been removed.+  * The `PShow` and `SShow` instances for `Symbol` now display escape characters+    properly rather than returning the input `Symbol` unchanged.++* In GHC 9.2, `Nat` is now a synonym for `Natural`. As a result, the bogus+  `Num`, `Eq`, `Ord`, `Enum`, and `Show` instances for `Nat` in+  `GHC.TypeLits.Singletons` have been removed, as they have replaced by the+  corresponding instances for `Natural`.+* Add `Data.Functor.{Compose,Product,Sum}.Singletons`.+* The types of various entities in `Data.Functor.Const.Singletons` and+  `Data.Proxy.Singletons` have been tweaked slightly such that their+  specificities match their term-level counterparts:++  ```diff+  -SConst :: forall {k} {a} {b :: k} (x :: a). Sing x -> Sing ('Const @a @b x)+  +SConst :: forall {k}  a  (b :: k) (x :: a). Sing x -> Sing ('Const @a @b x)++  -type ConstSym0 :: forall  k  a (b :: k). a ~> Const a b+  +type ConstSym0 :: forall {k} a (b :: k). a ~> Const a b++  -type ConstSym1 :: forall  k a  (b :: k). a -> Const a b+  +type ConstSym1 :: forall {k} a (b :: k). a -> Const a b++  -type ProxySym0 :: forall  k  (t :: k). Proxy t+  +type ProxySym0 :: forall {k} (t :: k). Proxy t+  ```+* Define instances of `SingI1` and `SingI2` when possible.+ 3.0 [2021.03.12] ---------------- * The `singletons` library has been split into three libraries:
README.md view
@@ -18,7 +18,7 @@  `singletons-base` uses code that relies on bleeding-edge GHC language extensions. As such, `singletons-base` only supports the latest major version-of GHC (currently GHC 9.0). For more information,+of GHC (currently GHC 9.2). For more information, consult the `singletons` [`README`](https://github.com/goldfirere/singletons/blob/master/README.md). 
Setup.hs view
@@ -3,7 +3,7 @@  import Control.Monad -import Data.List+import qualified Data.List as List import Data.String  import Distribution.PackageDescription@@ -128,8 +128,8 @@         --         -- Note: we `nub`, because it's unclear if that's ok to have duplicate         -- modules in the lists.-        om' = nub $ mn : om-        am' = nub $ mn : am+        om' = List.nub $ mn : om+        am' = List.nub $ mn : am          mn = fromString buildSingletonsBaseModule 
singletons-base.cabal view
@@ -1,5 +1,5 @@ name:           singletons-base-version:        3.0+version:        3.1 cabal-version:  1.24 synopsis:       A promoted and singled version of the base library homepage:       http://www.github.com/goldfirere/singletons@@ -8,7 +8,7 @@ maintainer:     Ryan Scott <ryan.gl.scott@gmail.com> bug-reports:    https://github.com/goldfirere/singletons/issues stability:      experimental-tested-with:    GHC == 9.0.1+tested-with:    GHC == 9.2.1 extra-source-files: README.md, CHANGES.md, tests/README.md,                     tests/compile-and-dump/GradingClient/*.hs,                     tests/compile-and-dump/InsertionSort/*.hs,@@ -38,7 +38,7 @@     .     @singletons-base@ uses code that relies on bleeding-edge GHC language     extensions. As such, @singletons-base@ only supports the latest major version-    of GHC (currently GHC 9.0). For more information,+    of GHC (currently GHC 9.2). For more information,     consult the @singletons@     @<https://github.com/goldfirere/singletons/blob/master/README.md README>@.     .@@ -55,7 +55,7 @@   type:     git   location: https://github.com/goldfirere/singletons.git   subdir:   singletons-base-  tag:      v3.0+  tag:      v3.1  source-repository head   type:     git@@ -65,20 +65,20 @@  custom-setup   setup-depends:-    base      >= 4.15 && < 4.16,-    Cabal     >= 3.0 && < 3.5,+    base      >= 4.16 && < 4.17,+    Cabal     >= 3.0 && < 3.7,     directory >= 1,     filepath  >= 1.3  library   hs-source-dirs:     src-  build-depends:      base             >= 4.15 && < 4.16,+  build-depends:      base             >= 4.16 && < 4.17,                       pretty,-                      singletons       == 3.0.*,-                      singletons-th    == 3.0.*,-                      template-haskell >= 2.17 && < 2.18,+                      singletons       == 3.0.1,+                      singletons-th    == 3.1.*,+                      template-haskell >= 2.18 && < 2.19,                       text >= 1.2,-                      th-desugar       >= 1.12 && < 1.13+                      th-desugar       >= 1.13 && < 1.14   default-language:   Haskell2010   other-extensions:   TemplateHaskell   exposed-modules:    Data.Singletons.Base.CustomStar@@ -97,9 +97,12 @@                       Data.Eq.Singletons                       Data.Foldable.Singletons                       Data.Function.Singletons+                      Data.Functor.Compose.Singletons                       Data.Functor.Const.Singletons                       Data.Functor.Identity.Singletons+                      Data.Functor.Product.Singletons                       Data.Functor.Singletons+                      Data.Functor.Sum.Singletons                       Data.List.Singletons                       Data.List.NonEmpty.Singletons                       Data.Maybe.Singletons@@ -150,7 +153,7 @@   main-is:            SingletonsBaseTestSuite.hs   other-modules:      SingletonsBaseTestSuiteUtils -  build-depends:      base >= 4.15 && < 4.16,+  build-depends:      base >= 4.16 && < 4.17,                       bytestring >= 0.10.9,                       deepseq >= 1.4.4,                       filepath >= 1.3,
src/Control/Monad/Singletons.hs view
@@ -212,21 +212,21 @@    -- -| @'replicateM' n act@ performs the action @n@ times,   -- gathering the results.-  replicateM        :: forall m a. (Applicative m) => Nat -> m a -> m [a]+  replicateM        :: forall m a. (Applicative m) => Natural -> m a -> m [a]   replicateM cnt0 f =       loop cnt0     where-      loop :: Nat -> m [a]+      loop :: Natural -> m [a]       loop cnt           | cnt <= 0  = pure []           | otherwise = liftA2 (:) f (loop (cnt - 1))    -- -| Like 'replicateM', but discards the result.-  replicateM_       :: forall m a. (Applicative m) => Nat -> m a -> m ()+  replicateM_       :: forall m a. (Applicative m) => Natural -> m a -> m ()   replicateM_ cnt0 f =       loop cnt0     where-      loop :: Nat -> m ()+      loop :: Natural -> m ()       loop cnt           | cnt <= 0  = pure ()           | otherwise = f *> loop (cnt - 1)
src/Data/Bool/Singletons.hs view
@@ -104,3 +104,9 @@   sing = singFun2 $ sIf (sing @c) instance (SingI c, SingI t) => SingI (IfSym2 c t) where   sing = singFun1 $ sIf (sing @c) (sing @t)+instance SingI1 IfSym1 where+  liftSing s = singFun2 $ sIf s+instance SingI c => SingI1 (IfSym2 c) where+  liftSing s = singFun1 $ sIf (sing @c) s+instance SingI2 IfSym2 where+  liftSing2 s1 s2 = singFun1 $ sIf s1 s2
src/Data/Eq/Singletons.hs view
@@ -87,7 +87,7 @@ -- @ -- -- 'DefaultEq' is most suited for data types that are not inductively defined.--- Three concrete examples of this are 'Lit.Nat', 'Lit.Symbol', and+-- Four concrete examples of this are 'Natural', 'Lit.Symbol', 'Lit.Char', and -- 'Kind.Type'. One cannot implement boolean equality for these types by -- pattern matching alone, so 'DefaultEq' is a good fit instead. --
src/Data/Foldable/Singletons.hs view
@@ -351,7 +351,7 @@       -- -| Returns the size/length of a finite structure as an 'Int'.  The       -- default implementation is optimized for structures that are similar to       -- cons-lists, because there is no general way to do better.-      length :: t a -> Nat+      length :: t a -> Natural       length = foldl' (\c _ -> c+1) 0        -- -| Does the element occur in the structure?@@ -466,7 +466,7 @@       -- kind-polymorphic, but Length is only defined when `a` is of kind       -- `Type`! Ugh. To force GHC to come to its senses, we explicitly inform       -- it that `a :: Type` through our own instance signature.-      length :: forall (a :: Type). Proxy a -> Nat+      length :: forall (a :: Type). Proxy a -> Natural       length _   = 0        null :: forall (a :: Type). Proxy a -> Bool
+ src/Data/Functor/Compose/Singletons.hs view
@@ -0,0 +1,99 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE StandaloneKindSignatures #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-}+{-# OPTIONS_GHC -Wno-orphans #-}++-----------------------------------------------------------------------------+-- |+-- Module      :  Data.Functor.Compose.Singletons+-- Copyright   :  (C) 2021 Ryan Scott+-- License     :  BSD-style (see LICENSE)+-- Maintainer  :  Richard Eisenberg (rae@cs.brynmawr.edu)+-- Stability   :  experimental+-- Portability :  non-portable+--+-- Exports the promoted and singled versions of the 'Compose' data type.+--+-----------------------------------------------------------------------------++module Data.Functor.Compose.Singletons (+  -- * The 'Compose' singleton+  Sing, SCompose(..), GetCompose, sGetCompose,++  -- * Defunctionalization symbols+  ComposeSym0, ComposeSym1,+  GetComposeSym0, GetComposeSym1+  ) where++import Control.Applicative+import Control.Applicative.Singletons+import Data.Foldable.Singletons+import Data.Functor.Compose+import Data.Functor.Singletons+import Data.Kind+import Data.Singletons+import Data.Singletons.TH+import Data.Traversable.Singletons++{-+In order to keep the type arguments to Compose poly-kinded and with inferred+specificities, we define the singleton version of Compose, as well as its+defunctionalization symbols, by hand. This is very much in the spirit of the+code in Data.Functor.Const.Singletons. (See the comments above SConst in that+module for more details on this choice.)+-}+infixr 9 `SCompose`+type SCompose :: Compose f g a -> Type+data SCompose :: Compose f g a -> Type where+  SCompose :: forall f g a (x :: f (g a)).+              Sing x -> SCompose ('Compose @f @g @a x)+type instance Sing = SCompose+instance SingI x => SingI ('Compose x) where+  sing = SCompose sing+instance SingI1 'Compose where+  liftSing = SCompose++infixr 9 `ComposeSym0`+type ComposeSym0 :: f (g a) ~> Compose f g a+data ComposeSym0 z+type instance Apply ComposeSym0 x = 'Compose x+instance SingI ComposeSym0 where+  sing = singFun1 SCompose++infixr 9 `ComposeSym1`+type ComposeSym1 :: f (g a) -> Compose f g a+type family ComposeSym1 x where+  ComposeSym1 x = 'Compose x++$(singletonsOnly [d|+  getCompose :: Compose f g a -> f (g a)+  getCompose (Compose x) = x++  instance (Functor f, Functor g) => Functor (Compose f g) where+      fmap f (Compose x) = Compose (fmap (fmap f) x)+      a <$ (Compose x) = Compose (fmap (a <$) x)++  instance (Foldable f, Foldable g) => Foldable (Compose f g) where+      foldMap f (Compose t) = foldMap (foldMap f) t++  instance (Traversable f, Traversable g) => Traversable (Compose f g) where+      traverse f (Compose t) = Compose <$> traverse (traverse f) t++  instance (Applicative f, Applicative g) => Applicative (Compose f g) where+      pure x = Compose (pure (pure x))+      Compose f <*> Compose x = Compose (liftA2 (<*>) f x)+      liftA2 f (Compose x) (Compose y) =+        Compose (liftA2 (liftA2 f) x y)++  instance (Alternative f, Applicative g) => Alternative (Compose f g) where+      empty = Compose empty+      Compose x <|> Compose y = Compose (x <|> y)+  |])
src/Data/Functor/Const/Singletons.hs view
@@ -68,14 +68,19 @@  Assumes that `b` is of kind Type. Until we get a more reliable story for poly-kinded Sing instances (see #150), we simply write the singleton type by-hand. Note that we cannot use genSingletons to generate this code because we+hand.++Note that we cannot use genSingletons to generate this code because we would end up with the wrong specificity for the kind of `a` when singling the Const constructor. See Note [Preserve the order of type variables during-singling] in D.S.TH.Single.Type, wrinkle 2.+singling] in D.S.TH.Single.Type, wrinkle 2. Similarly, we must define the+defunctionalization symbols for the Const data constructor by hand to get the+specificities right. -} type SConst :: Const a b -> Type data SConst :: Const a b -> Type where-  SConst :: Sing a -> SConst ('Const a)+  SConst :: forall {k} a (b :: k) (x :: a).+            Sing x -> SConst ('Const @a @b x) type instance Sing = SConst instance SingKind a => SingKind (Const a b) where   type Demote (Const a b) = Const (Demote a) b@@ -83,10 +88,18 @@   toSing (Const a) = withSomeSing a $ SomeSing . SConst instance SingI a => SingI ('Const a) where   sing = SConst sing+instance SingI1 'Const where+  liftSing = SConst -$(genDefunSymbols [''Const])+type ConstSym0 :: a ~> Const a b+data ConstSym0 z+type instance Apply ConstSym0 x = 'Const x instance SingI ConstSym0 where   sing = singFun1 SConst++type ConstSym1 :: a -> Const a b+type family ConstSym1 x where+  ConstSym1 x = 'Const x  $(singletonsOnly [d|   getConst :: Const a b -> a
+ src/Data/Functor/Product/Singletons.hs view
@@ -0,0 +1,119 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE StandaloneKindSignatures #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-}+{-# OPTIONS_GHC -Wno-orphans #-}++-----------------------------------------------------------------------------+-- |+-- Module      :  Data.Functor.Product.Singletons+-- Copyright   :  (C) 2021 Ryan Scott+-- License     :  BSD-style (see LICENSE)+-- Maintainer  :  Richard Eisenberg (rae@cs.brynmawr.edu)+-- Stability   :  experimental+-- Portability :  non-portable+--+-- Exports the promoted and singled versions of the 'Product' data type.+--+-----------------------------------------------------------------------------++module Data.Functor.Product.Singletons (+  -- * The 'Product' singleton+  Sing, SProduct(..),++  -- * Defunctionalization symbols+  PairSym0, PairSym1, PairSym2+  ) where++import Control.Applicative+import Control.Applicative.Singletons+import Control.Monad+import Control.Monad.Singletons+import Control.Monad.Zip+import Control.Monad.Zip.Singletons+import Data.Foldable.Singletons hiding (Product)+import Data.Function.Singletons+import Data.Functor.Product+import Data.Kind+import Data.Monoid.Singletons hiding (SProduct(..))+import Data.Singletons+import Data.Singletons.TH+import Data.Traversable.Singletons++{-+In order to keep the type arguments to Product poly-kinded and with inferred+specificities, we define the singleton version of Product, as well as its+defunctionalization symbols, by hand. This is very much in the spirit of the+code in Data.Functor.Const.Singletons. (See the comments above SConst in that+module for more details on this choice.)+-}+type SProduct :: Product f g a -> Type+data SProduct :: Product f g a -> Type where+  SPair :: forall f g a (x :: f a) (y :: g a).+           Sing x -> Sing y -> SProduct ('Pair @f @g @a x y)+type instance Sing = SProduct+instance (SingI x, SingI y) => SingI ('Pair x y) where+  sing = SPair sing sing+instance SingI x => SingI1 ('Pair x) where+  liftSing = SPair sing+instance SingI2 'Pair where+  liftSing2 = SPair++type PairSym0 :: forall f g a. f a ~> g a ~> Product f g a+data PairSym0 z+type instance Apply PairSym0 x = PairSym1 x+instance SingI PairSym0 where+  sing = singFun2 SPair++type PairSym1 :: forall f g a. f a -> g a ~> Product f g a+data PairSym1 fa z+type instance Apply (PairSym1 x) y = 'Pair x y+instance SingI x => SingI (PairSym1 x) where+  sing = singFun1 $ SPair (sing @x)+instance SingI1 PairSym1 where+  liftSing s = singFun1 $ SPair s++type PairSym2 :: forall f g a. f a -> g a -> Product f g a+type family PairSym2 x y where+  PairSym2 x y = 'Pair x y++$(singletonsOnly [d|+  instance (Functor f, Functor g) => Functor (Product f g) where+      fmap f (Pair x y) = Pair (fmap f x) (fmap f y)+      a <$ (Pair x y) = Pair (a <$ x) (a <$ y)++  instance (Foldable f, Foldable g) => Foldable (Product f g) where+      foldMap f (Pair x y) = foldMap f x `mappend` foldMap f y++  instance (Traversable f, Traversable g) => Traversable (Product f g) where+      traverse f (Pair x y) = liftA2 Pair (traverse f x) (traverse f y)++  instance (Applicative f, Applicative g) => Applicative (Product f g) where+      pure x = Pair (pure x) (pure x)+      Pair f g <*> Pair x y = Pair (f <*> x) (g <*> y)+      liftA2 f (Pair a b) (Pair x y) = Pair (liftA2 f a x) (liftA2 f b y)++  instance (Alternative f, Alternative g) => Alternative (Product f g) where+      empty = Pair empty empty+      Pair x1 y1 <|> Pair x2 y2 = Pair (x1 <|> x2) (y1 <|> y2)++  instance (Monad f, Monad g) => Monad (Product f g) where+      Pair m n >>= f = Pair (m >>= fstP . f) (n >>= sndP . f)+        where+          fstP (Pair a _) = a+          sndP (Pair _ b) = b++  instance (MonadPlus f, MonadPlus g) => MonadPlus (Product f g) where+      mzero = Pair mzero mzero+      Pair x1 y1 `mplus` Pair x2 y2 = Pair (x1 `mplus` x2) (y1 `mplus` y2)++  instance (MonadZip f, MonadZip g) => MonadZip (Product f g) where+      mzipWith f (Pair x1 y1) (Pair x2 y2) = Pair (mzipWith f x1 x2) (mzipWith f y1 y2)+  |])
+ src/Data/Functor/Sum/Singletons.hs view
@@ -0,0 +1,102 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE StandaloneKindSignatures #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-}+{-# OPTIONS_GHC -Wno-orphans #-}++-----------------------------------------------------------------------------+-- |+-- Module      :  Data.Functor.Sum.Singletons+-- Copyright   :  (C) 2021 Ryan Scott+-- License     :  BSD-style (see LICENSE)+-- Maintainer  :  Richard Eisenberg (rae@cs.brynmawr.edu)+-- Stability   :  experimental+-- Portability :  non-portable+--+-- Exports the promoted and singled versions of the 'Sum' data type.+--+-----------------------------------------------------------------------------++module Data.Functor.Sum.Singletons (+  -- * The 'Product' singleton+  Sing, SSum(..),++  -- * Defunctionalization symbols+  InLSym0, InLSym1,+  InRSym0, InRSym1,+  ) where++import Data.Foldable.Singletons hiding (Sum)+import Data.Functor.Singletons+import Data.Functor.Sum+import Data.Kind+import Data.Singletons+import Data.Singletons.TH+import Data.Traversable.Singletons++{-+In order to keep the type arguments to Sum poly-kinded and with inferred+specificities, we define the singleton version of Sum, as well as its+defunctionalization symbols, by hand. This is very much in the spirit of the+code in Data.Functor.Const.Singletons. (See the comments above SConst in that+module for more details on this choice.)+-}+type SSum :: Sum f g a -> Type+data SSum :: Sum f g a -> Type where+  SInL :: forall f g a (x :: f a).+          Sing x -> SSum ('InL @f @g @a x)+  SInR :: forall f g a (y :: g a).+          Sing y -> SSum ('InR @f @g @a y)+type instance Sing = SSum+instance SingI x => SingI ('InL x) where+  sing = SInL sing+instance SingI1 'InL where+  liftSing = SInL+instance SingI y => SingI ('InR y) where+  sing = SInR sing+instance SingI1 'InR where+  liftSing = SInR++type InLSym0 :: forall f g a. f a ~> Sum f g a+data InLSym0 z+type instance Apply InLSym0 x = 'InL x+instance SingI InLSym0 where+  sing = singFun1 SInL++type InLSym1 :: forall f g a. f a -> Sum f g a+type family InLSym1 x where+  InLSym1 x = 'InL x++type InRSym0 :: forall f g a. g a ~> Sum f g a+data InRSym0 z+type instance Apply InRSym0 y = 'InR y+instance SingI InRSym0 where+  sing = singFun1 SInR++type InRSym1 :: forall f g a. g a -> Sum f g a+type family InRSym1 x where+  InRSym1 y = 'InR y++$(singletonsOnly [d|+  instance (Functor f, Functor g) => Functor (Sum f g) where+      fmap f (InL x) = InL (fmap f x)+      fmap f (InR y) = InR (fmap f y)++      a <$ (InL x) = InL (a <$ x)+      a <$ (InR y) = InR (a <$ y)++  instance (Foldable f, Foldable g) => Foldable (Sum f g) where+      foldMap f (InL x) = foldMap f x+      foldMap f (InR y) = foldMap f y++  instance (Traversable f, Traversable g) => Traversable (Sum f g) where+      traverse f (InL x) = InL <$> traverse f x+      traverse f (InR y) = InR <$> traverse f y+  |])
src/Data/List/NonEmpty/Singletons.hs view
@@ -179,7 +179,7 @@   fmap f (x :| xs) = f x :| listmap f xs    -- -| Number of elements in 'NonEmpty' list.-  length :: NonEmpty a -> Nat+  length :: NonEmpty a -> Natural   length (_ :| xs) = 1 + listlength xs    -- -| Compute n-ary logic exclusive OR operation on 'NonEmpty' list.@@ -352,12 +352,12 @@   -}    -- -| @'take' n xs@ returns the first @n@ elements of @xs@.-  take :: Nat -> NonEmpty a -> [a]+  take :: Natural -> NonEmpty a -> [a]   take n = listtake n . toList    -- -| @'drop' n xs@ drops the first @n@ elements off the front of   -- the sequence @xs@.-  drop :: Nat -> NonEmpty a -> [a]+  drop :: Natural -> NonEmpty a -> [a]   drop n = listdrop n . toList    -- -| @'splitAt' n xs@ returns a pair consisting of the prefix of @xs@@@ -365,7 +365,7 @@   --   -- > 'splitAt' n xs == ('take' n xs, 'drop' n xs)   -- > xs == ys ++ zs where (ys, zs) = 'splitAt' n xs-  splitAt :: Nat -> NonEmpty a -> ([a],[a])+  splitAt :: Natural -> NonEmpty a -> ([a],[a])   splitAt n = listsplitAt n . toList    -- -| @'takeWhile' p xs@ returns the longest prefix of the stream@@ -461,7 +461,7 @@   -- @n@. Note that the head of the stream has index 0.   --   -- /Beware/: a negative or out-of-bounds index will cause an error.-  (!!) :: NonEmpty a -> Nat -> a+  (!!) :: NonEmpty a -> Natural -> a   (!!) (x :| xs) n     | n == 0 = x     | n > 0  = xs `listindex` (n - 1)
src/Data/List/Singletons/Internal.hs view
@@ -361,23 +361,23 @@  -- These three rely on findIndices, which does not promote. -- Since we have our own implementation of findIndices these are perfectly valid-  elemIndex       :: Eq a => a -> [a] -> Maybe Nat+  elemIndex       :: Eq a => a -> [a] -> Maybe Natural   elemIndex x     = findIndex (x==) -  elemIndices     :: Eq a => a -> [a] -> [Nat]+  elemIndices     :: Eq a => a -> [a] -> [Natural]   elemIndices x   = findIndices (x==) -  findIndex       :: (a -> Bool) -> [a] -> Maybe Nat+  findIndex       :: (a -> Bool) -> [a] -> Maybe Natural   findIndex p     = listToMaybe . findIndices p  -- Uses infinite lists and and Ints --  findIndices      :: (a -> Bool) -> [a] -> [Int] --  findIndices p xs = [ i | (x,i) <- zip xs [0..], p x] -  findIndices      :: (a -> Bool) -> [a] -> [Nat]+  findIndices      :: (a -> Bool) -> [a] -> [Natural]   findIndices p xs = map snd (filter (\(x,_) -> p x)                                      (zip xs (buildList 0 xs)))-    where buildList :: Nat -> [b] -> [Nat]+    where buildList :: Natural -> [b] -> [Natural]           buildList _ []     = []           buildList a (_:rest) = a : buildList (a+1) rest @@ -426,15 +426,15 @@ --  splitAt                :: Int -> [a] -> ([a],[a]) --  splitAt n xs           =  (take n xs, drop n xs) -  take                   :: Nat -> [a] -> [a]+  take                   :: Natural -> [a] -> [a]   take _ []              =  []   take n (x:xs)          = if n == 0 then [] else x : take (n-1) xs -  drop                   :: Nat -> [a] -> [a]+  drop                   :: Natural -> [a] -> [a]   drop _ []              = []   drop n (x:xs)          = if n == 0 then x:xs else drop (n-1) xs -  splitAt                :: Nat -> [a] -> ([a],[a])+  splitAt                :: Natural -> [a] -> ([a],[a])   splitAt n xs           =  (take n xs, drop n xs)    group                   :: Eq a => [a] -> [[a]]@@ -511,7 +511,7 @@ --  incLen :: a -> (Int# -> Int) -> Int# -> Int --  incLen _ g x = g (x +# 1#) -  length :: [a] -> Nat+  length :: [a] -> Natural   length []     = 0   length (_:xs) = 1 + length xs @@ -530,7 +530,7 @@ --  cycle []                = error "Data.Singletons.List.cycle: empty list" --  cycle xs                = xs' where xs' = xs ++ xs' -  replicate               :: Nat -> a -> [a]+  replicate               :: Natural -> a -> [a]   replicate n x           = if n == 0 then [] else x : replicate (n-1) x  -- Uses partial pattern-matching in a list comprehension@@ -553,7 +553,7 @@ --  (x:_)  !! 0         =  x --  (_:xs) !! n         =  xs !! (n-1) -  (!!)                    :: [a] -> Nat -> a+  (!!)                    :: [a] -> Natural -> a   []     !! _         =  error "Data.Singletons.List.!!: index too large"   (x:xs) !! n         =  if n == 0 then x else xs !! (n-1)   infixl 9 !!
src/Data/List/Singletons/Internal/Disambiguation.hs view
@@ -138,32 +138,32 @@   |])  $(singletonsOnly [d|-  listtake :: Nat -> [a] -> [a]+  listtake :: Natural -> [a] -> [a]   listtake = take -  listdrop :: Nat -> [a] -> [a]+  listdrop :: Natural -> [a] -> [a]   listdrop = drop -  listsplitAt :: Nat -> [a] -> ([a], [a])+  listsplitAt :: Natural -> [a] -> ([a], [a])   listsplitAt = splitAt -  listindex :: [a] -> Nat -> a+  listindex :: [a] -> Natural -> a   listindex = (!!)    listlength :: [a] -> Nat   listlength = length   |]) -listtake :: Nat -> [a] -> [a]+listtake :: Natural -> [a] -> [a] listtake = undefined -listdrop :: Nat -> [a] -> [a]+listdrop :: Natural -> [a] -> [a] listdrop = undefined -listsplitAt :: Nat -> [a] -> ([a], [a])+listsplitAt :: Natural -> [a] -> ([a], [a]) listsplitAt = undefined -listindex :: [a] -> Nat -> a+listindex :: [a] -> Natural -> a listindex = undefined  listlength :: [a] -> Nat
src/Data/Proxy/Singletons.hs view
@@ -57,8 +57,9 @@ import Text.Show.Singletons  {--In order to keep the type argument to Proxy poly-kinded, we define the-singleton version of Proxy by hand. This is very much in the spirit of the+In order to keep the type argument to Proxy poly-kinded and with an inferred+specificity, we define the singleton version of Proxy, as well as its+defunctionalization symbols, by hand. This is very much in the spirit of the code in Data.Functor.Const.Singletons. (See the comments above SConst in that module for more details on this choice.) -}@@ -73,7 +74,9 @@ instance SingI 'Proxy where   sing = SProxy -$(genDefunSymbols [''Proxy])+type ProxySym0 :: Proxy t+type family ProxySym0 where+  ProxySym0 = 'Proxy  instance SDecide (Proxy t) where   SProxy %~ SProxy = Proved Refl
src/Data/Singletons/Base/Enum.hs view
@@ -52,6 +52,10 @@ $(singletonsOnly [d|   class Bounded a where     minBound, maxBound :: a++  instance  Bounded Char  where+      minBound =  '\0'+      maxBound =  '\x10FFFF'   |])  $(singBoundedInstances boundedBasicTypes)@@ -62,10 +66,10 @@       succ                :: a -> a       -- | the predecessor of a value.  For numeric types, 'pred' subtracts 1.       pred                :: a -> a-      -- | Convert from a 'Nat'.-      toEnum              :: Nat -> a-      -- | Convert to a 'Nat'.-      fromEnum            :: a -> Nat+      -- | Convert from a 'Natural'.+      toEnum              :: Natural -> a+      -- | Convert to a 'Natural'.+      fromEnum            :: a -> Natural        -- The following use infinite lists, and are not promotable:       -- -- | Used in Haskell's translation of @[n..]@.@@ -85,22 +89,22 @@       enumFromTo x y         = map toEnum [fromEnum x .. fromEnum y]       enumFromThenTo x1 x2 y = map toEnum [fromEnum x1, fromEnum x2 .. fromEnum y] -  -- Nat instance for Enum-  eftNat :: Nat -> Nat -> [Nat]+  -- Natural instance for Enum+  eftNat :: Natural -> Natural -> [Natural]   -- [x1..x2]   eftNat x0 y | (x0 > y)  = []               | otherwise = go x0                  where                    go x = x : if (x == y) then [] else go (x + 1) -  efdtNat :: Nat -> Nat -> Nat -> [Nat]+  efdtNat :: Natural -> Natural -> Natural -> [Natural]   -- [x1,x2..y]   efdtNat x1 x2 y    | x2 >= x1  = efdtNatUp x1 x2 y    | otherwise = efdtNatDn x1 x2 y    -- Requires x2 >= x1-  efdtNatUp :: Nat -> Nat -> Nat -> [Nat]+  efdtNatUp :: Natural -> Natural -> Natural -> [Natural]   efdtNatUp x1 x2 y    -- Be careful about overflow!    | y < x2    = if y < x1 then [] else [x1]    | otherwise = -- Common case: x1 <= x2 <= y@@ -115,7 +119,7 @@                  in x1 : go_up x2    -- Requires x2 <= x1-  efdtNatDn :: Nat -> Nat -> Nat -> [Nat]+  efdtNatDn :: Natural -> Natural -> Natural -> [Natural]   efdtNatDn x1 x2 y    -- Be careful about underflow!    | y > x2    = if y > x1 then [] else [x1]    | otherwise = -- Common case: x1 >= x2 >= y@@ -129,7 +133,7 @@                              | otherwise = x : go_dn (x + delta)      in x1 : go_dn x2 -  instance  Enum Nat  where+  instance  Enum Natural  where       succ x = x + 1       pred x = x - 1 @@ -138,6 +142,10 @@        enumFromTo = eftNat       enumFromThenTo = efdtNat++  instance  Enum Char  where+      toEnum   = natToChar+      fromEnum = charToNat   |])  $(singEnumInstances enumBasicTypes)
src/Data/Singletons/Base/TypeError.hs view
@@ -107,15 +107,27 @@  instance SingI t => SingI ('Text t :: PErrorMessage) where   sing = SText sing+instance SingI1 ('Text :: Symbol -> PErrorMessage) where+  liftSing = SText  instance SingI ty => SingI ('ShowType ty :: PErrorMessage) where   sing = SShowType sing+instance SingI1 ('ShowType :: t -> PErrorMessage) where+  liftSing = SShowType  instance (SingI e1, SingI e2) => SingI (e1 ':<>: e2 :: PErrorMessage) where   sing = sing :%<>: sing+instance SingI e1 => SingI1 ('(:<>:) e1 :: PErrorMessage -> PErrorMessage) where+  liftSing s = sing :%<>: s+instance SingI2 ('(:<>:) :: PErrorMessage -> PErrorMessage -> PErrorMessage) where+  liftSing2 s1 s2 = s1 :%<>: s2  instance (SingI e1, SingI e2) => SingI (e1 ':$$: e2 :: PErrorMessage) where   sing = sing :%$$: sing+instance SingI e1 => SingI1 ('(:$$:) e1 :: PErrorMessage -> PErrorMessage) where+  liftSing s = sing :%$$: s+instance SingI2 ('(:$$:) :: PErrorMessage -> PErrorMessage -> PErrorMessage) where+  liftSing2 s1 s2 = s1 :%$$: s2  -- | Convert an 'ErrorMessage' into a human-readable 'String'. showErrorMessage :: ErrorMessage -> String@@ -169,11 +181,15 @@   sing = singFun2 (:%<>:) instance SingI x => SingI ((:<>:@#@$$) x :: PErrorMessage ~> PErrorMessage) where   sing = singFun1 (sing @x :%<>:)+instance SingI1 ((:<>:@#@$$) :: PErrorMessage -> PErrorMessage ~> PErrorMessage) where+  liftSing s = singFun1 (s :%<>:)  instance SingI ((:$$:@#@$) :: PErrorMessage ~> PErrorMessage ~> PErrorMessage) where   sing = singFun2 (:%$$:) instance SingI x => SingI ((:$$:@#@$$) x :: PErrorMessage ~> PErrorMessage) where   sing = singFun1 (sing @x :%$$:)+instance SingI1 ((:$$:@#@$$) :: PErrorMessage -> PErrorMessage ~> PErrorMessage) where+  liftSing s = singFun1 (s :%$$:)  instance SingI TypeErrorSym0 where   sing = singFun1 sTypeError
src/GHC/Num/Singletons.hs view
@@ -17,7 +17,7 @@ -- "GHC.Num". -- -- Be warned that some of the associated type families in the 'PNum' class--- (@(+)@, @(-)@, and @(*)@) clash with their counterparts for 'Nat' in the+-- (@(+)@, @(-)@, and @(*)@) clash with their counterparts for 'Natural' in the -- "GHC.TypeLits" module. ---------------------------------------------------------------------------- @@ -66,8 +66,8 @@       -- For real numbers, the 'signum' is either @-1@ (negative), @0@ (zero)       -- or @1@ (positive).       signum              :: a -> a-      -- Conversion from a 'Nat'.-      fromInteger         :: Nat -> a+      -- Conversion from a 'Natural'.+      fromInteger         :: Natural -> a        x - y               = x + negate y @@ -88,22 +88,22 @@   |])  -- PNum instance-type SignumNat :: Nat -> Nat+type SignumNat :: Natural -> Natural type family SignumNat a where   SignumNat 0 = 0   SignumNat x = 1 -instance PNum Nat where+instance PNum Natural where   type a + b = a TN.+ b   type a - b = a TN.- b   type a * b = a TN.* b-  type Negate (a :: Nat) = Error "Cannot negate a natural number"-  type Abs (a :: Nat) = a+  type Negate (a :: Natural) = Error "Cannot negate a natural number"+  type Abs (a :: Natural) = a   type Signum a = SignumNat a   type FromInteger a = a  -- SNum instance-instance SNum Nat where+instance SNum Natural where   sa %+ sb =     let a = fromSing sa         b = fromSing sb
src/GHC/TypeLits/Singletons.hs view
@@ -11,20 +11,23 @@ -- Stability   :  experimental -- Portability :  non-portable ----- Defines and exports singletons useful for the Nat and Symbol kinds.+-- Defines and exports singletons useful for the Natural, Symbol, and Char+-- kinds. -- ----------------------------------------------------------------------------  {-# OPTIONS_GHC -Wno-orphans #-}  module GHC.TypeLits.Singletons (-  Nat, Symbol,-  Sing, SNat(..), SSymbol(..), withKnownNat, withKnownSymbol,+  Natural, Symbol, Char,+  Sing, SNat(..), SSymbol(..), SChar(..),+  withKnownNat, withKnownSymbol, withKnownChar,   Error, sError,   ErrorWithoutStackTrace, sErrorWithoutStackTrace,   Undefined, sUndefined,   KnownNat, natVal,   KnownSymbol, symbolVal,+  KnownChar, charVal,    type (^), (%^),   type (<=?), (%<=?),@@ -33,12 +36,18 @@   Div, sDiv, Mod, sMod, DivMod, sDivMod,   Quot, sQuot, Rem, sRem, QuotRem, sQuotRem, +  consSymbol, ConsSymbol, sConsSymbol,+  unconsSymbol, UnconsSymbol, sUnconsSymbol,+  charToNat, CharToNat, sCharToNat,+  natToChar, NatToChar, sNatToChar,+   -- * Defunctionalization symbols   ErrorSym0, ErrorSym1,   ErrorWithoutStackTraceSym0, ErrorWithoutStackTraceSym1,   UndefinedSym0,   KnownNatSym0, KnownNatSym1,   KnownSymbolSym0, KnownSymbolSym1,+  KnownCharSym0, KnownCharSym1,   type (^@#@$), type (^@#@$$), type (^@#@$$$),   type (<=?@#@$), type (<=?@#@$$), type (<=?@#@$$$),   Log2Sym0, Log2Sym1,@@ -47,46 +56,27 @@   DivModSym0, DivModSym1, DivModSym2,   QuotSym0, QuotSym1, QuotSym2,   RemSym0, RemSym1, RemSym2,-  QuotRemSym0, QuotRemSym1, QuotRemSym2+  QuotRemSym0, QuotRemSym1, QuotRemSym2,+  ConsSymbolSym0, ConsSymbolSym1, ConsSymbolSym2,+  UnconsSymbolSym0, UnconsSymbolSym1,+  CharToNatSym0, CharToNatSym1,+  NatToCharSym0, NatToCharSym1   ) where +import Data.Char (chr, ord)+import qualified Data.List as L (uncons) import Data.Singletons import Data.Singletons.TH import Data.String (IsString(..))+import qualified Data.Text as T import Data.Tuple.Singletons+import GHC.TypeLits ( CharToNat, ConsSymbol, NatToChar, SomeChar(..)+                    , SomeSymbol(..), UnconsSymbol, someCharVal, someSymbolVal ) import GHC.TypeLits.Singletons.Internal import qualified GHC.TypeNats as TN import GHC.TypeNats (Div, Mod, SomeNat(..))-import Numeric.Natural (Natural) import Unsafe.Coerce --- | This bogus 'Num' instance is helpful for people who want to define--- functions over Nats that will only be used at the type level or--- as singletons. A correct SNum instance for Nat singletons exists.-instance Num Nat where-  (+)         = no_term_level_nats-  (-)         = no_term_level_nats-  (*)         = no_term_level_nats-  negate      = no_term_level_nats-  abs         = no_term_level_nats-  signum      = no_term_level_nats-  fromInteger = no_term_level_nats--instance Eq Nat where-  (==)        = no_term_level_nats--instance Ord Nat where-  compare     = no_term_level_nats--instance Enum Nat where-  toEnum         = no_term_level_nats-  fromEnum       = no_term_level_nats-  enumFromTo     = no_term_level_nats-  enumFromThenTo = no_term_level_nats--instance Show Nat where-  showsPrec      = no_term_level_nats- -- | This bogus instance is helpful for people who want to define -- functions over Symbols that will only be used at the type level or -- as singletons.@@ -108,14 +98,11 @@ instance Show Symbol where   showsPrec = no_term_level_syms -no_term_level_nats :: a-no_term_level_nats = error "The kind `Nat` may not be used at the term level."- no_term_level_syms :: a no_term_level_syms = error "The kind `Symbol` may not be used at the term level."  -- These are often useful in TypeLits-heavy code-$(genDefunSymbols [''KnownNat, ''KnownSymbol])+$(genDefunSymbols [''KnownNat, ''KnownSymbol, ''KnownChar])  ------------------------------------------------------------ -- Log2, Div, Mod, DivMod, and friends@@ -167,6 +154,8 @@   sing = singFun2 sDiv instance SingI x => SingI (DivSym1 x) where   sing = singFun1 $ sDiv (sing @x)+instance SingI1 DivSym1 where+  liftSing s = singFun1 $ sDiv s  sMod :: Sing x -> Sing y -> Sing (Mod x y) sMod sx sy =@@ -181,19 +170,21 @@   sing = singFun2 sMod instance SingI x => SingI (ModSym1 x) where   sing = singFun1 $ sMod $ sing @x+instance SingI1 ModSym1 where+  liftSing s = singFun1 $ sMod s  $(promoteOnly [d|-  divMod :: Nat -> Nat -> (Nat, Nat)+  divMod :: Natural -> Natural -> (Natural, Natural)   divMod x y = (div x y, mod x y) -  quotRem :: Nat -> Nat -> (Nat, Nat)+  quotRem :: Natural -> Natural -> (Natural, Natural)   quotRem = divMod -  quot :: Nat -> Nat -> Nat+  quot :: Natural -> Natural -> Natural   quot = div   infixl 7 `quot` -  rem :: Nat -> Nat -> Nat+  rem :: Natural -> Natural -> Natural   rem = mod   infixl 7 `rem`   |])@@ -219,3 +210,60 @@ sRem :: Sing x -> Sing y -> Sing (Rem x y) sRem = sMod infixl 7 `sRem`++consSymbol :: Char -> String -> String+consSymbol = (:)++sConsSymbol :: Sing x -> Sing y -> Sing (ConsSymbol x y)+sConsSymbol sx sy =+    let x   = fromSing sx+        y   = T.unpack (fromSing sy)+        res = someSymbolVal (consSymbol x y)+    in case res of+         SomeSymbol (_ :: Proxy res) -> unsafeCoerce (SSym :: Sing res)+$(genDefunSymbols [''ConsSymbol])+instance SingI ConsSymbolSym0 where+  sing = singFun2 sConsSymbol+instance SingI x => SingI (ConsSymbolSym1 x) where+  sing = singFun1 $ sConsSymbol $ sing @x+instance SingI1 ConsSymbolSym1 where+  liftSing s = singFun1 $ sConsSymbol s++unconsSymbol :: String -> Maybe (Char, String)+unconsSymbol = L.uncons++sUnconsSymbol :: Sing x -> Sing (UnconsSymbol x)+sUnconsSymbol sx =+    let x   = T.unpack (fromSing sx)+        res = toSing (unconsSymbol x)+    in case res of+         SomeSing s -> unsafeCoerce s+$(genDefunSymbols [''UnconsSymbol])+instance SingI UnconsSymbolSym0 where+  sing = singFun1 sUnconsSymbol++charToNat :: Char -> Natural+charToNat = fromIntegral . ord++sCharToNat :: Sing x -> Sing (CharToNat x)+sCharToNat sx =+    let x   = fromSing sx+        res = TN.someNatVal (charToNat x)+    in case res of+         SomeNat (_ :: Proxy res) -> unsafeCoerce (SNat :: Sing res)+$(genDefunSymbols [''CharToNat])+instance SingI CharToNatSym0 where+  sing = singFun1 sCharToNat++natToChar :: Natural -> Char+natToChar = chr . fromIntegral++sNatToChar :: Sing x -> Sing (NatToChar x)+sNatToChar sx =+    let x   = fromSing sx+        res = someCharVal (natToChar x)+    in case res of+         SomeChar (_ :: Proxy res) -> unsafeCoerce (SChar :: Sing res)+$(genDefunSymbols [''NatToChar])+instance SingI NatToCharSym0 where+  sing = singFun1 sNatToChar
src/GHC/TypeLits/Singletons/Internal.hs view
@@ -7,8 +7,8 @@ -- Stability   :  experimental -- Portability :  non-portable ----- Defines and exports singletons useful for the 'Nat' and 'Symbol' kinds.--- This exports the internal, unsafe constructors. Use import+-- Defines and exports singletons useful for the 'Natural', 'Symbol', and+-- 'Char' kinds. This exports the internal, unsafe constructors. Use import -- "GHC.TypeLits.Singletons" for a safe interface. -- ----------------------------------------------------------------------------@@ -22,12 +22,13 @@ module GHC.TypeLits.Singletons.Internal (   Sing, -  Nat, Symbol,-  SNat(..), SSymbol(..), withKnownNat, withKnownSymbol,+  Natural, Symbol, Char,+  SNat(..), SSymbol(..), SChar(..),+  withKnownNat, withKnownSymbol, withKnownChar,   Error, sError,   ErrorWithoutStackTrace, sErrorWithoutStackTrace,   Undefined, sUndefined,-  KnownNat, TN.natVal, KnownSymbol, symbolVal,+  KnownNat, TN.natVal, KnownSymbol, symbolVal, KnownChar, charVal,   type (^), (%^),   type (<=?), (%<=?), @@ -50,7 +51,6 @@ import GHC.Stack (HasCallStack) import GHC.TypeLits as TL import qualified GHC.TypeNats as TN-import Numeric.Natural (Natural) import Unsafe.Coerce  import qualified Data.Text as T@@ -60,15 +60,15 @@ ---- TypeLits singletons --------------------------------------------- ---------------------------------------------------------------------- -type SNat :: Nat -> Type-data SNat (n :: Nat) = KnownNat n => SNat+type SNat :: Natural -> Type+data SNat (n :: Natural) = KnownNat n => SNat type instance Sing = SNat  instance KnownNat n => SingI n where   sing = SNat -instance SingKind Nat where-  type Demote Nat = Natural+instance SingKind Natural where+  type Demote Natural = Natural   fromSing (SNat :: Sing n) = TN.natVal (Proxy :: Proxy n)   toSing n = case TN.someNatVal n of                SomeNat (_ :: Proxy n) -> SomeSing (SNat :: Sing n)@@ -86,14 +86,27 @@   toSing s = case someSymbolVal (T.unpack s) of                SomeSymbol (_ :: Proxy n) -> SomeSing (SSym :: Sing n) +type SChar :: Char -> Type+data SChar (c :: Char) = KnownChar c => SChar+type instance Sing = SChar++instance KnownChar c => SingI c where+  sing = SChar++instance SingKind Char where+  type Demote Char = Char+  fromSing (SChar :: Sing c) = charVal (Proxy :: Proxy c)+  toSing sc = case someCharVal sc of+                SomeChar (_ :: Proxy c) -> SomeSing (SChar :: Sing c)+ -- SDecide instances:-instance SDecide Nat where+instance SDecide Natural where   (SNat :: Sing n) %~ (SNat :: Sing m)     | Just r <- TN.sameNat (Proxy :: Proxy n) (Proxy :: Proxy m)     = Proved r     | otherwise     = Disproved (\Refl -> error errStr)-    where errStr = "Broken Nat singletons"+    where errStr = "Broken Natural singletons"  instance SDecide Symbol where   (SSym :: Sing n) %~ (SSym :: Sing m)@@ -103,14 +116,24 @@     = Disproved (\Refl -> error errStr)     where errStr = "Broken Symbol singletons" +instance SDecide Char where+  (SChar :: Sing n) %~ (SChar :: Sing m)+    | Just r <- sameChar (Proxy :: Proxy n) (Proxy :: Proxy m)+    = Proved r+    | otherwise+    = Disproved (\Refl -> error errStr)+    where errStr = "Broken Char singletons"+ -- PEq instances-instance PEq Nat where+instance PEq Natural where   type x == y = DefaultEq x y instance PEq Symbol where   type x == y = DefaultEq x y+instance PEq Char where+  type x == y = DefaultEq x y  -- need SEq instances for TypeLits kinds-instance SEq Nat where+instance SEq Natural where   (SNat :: Sing n) %== (SNat :: Sing m)     = case sameNat (Proxy :: Proxy n) (Proxy :: Proxy m) of         Just Refl -> STrue@@ -122,15 +145,24 @@         Just Refl -> STrue         Nothing   -> unsafeCoerce SFalse +instance SEq Char where+  (SChar :: Sing n) %== (SChar :: Sing m)+    = case sameChar (Proxy :: Proxy n) (Proxy :: Proxy m) of+        Just Refl -> STrue+        Nothing   -> unsafeCoerce SFalse+ -- POrd instances-instance POrd Nat where-  type (a :: Nat) `Compare` (b :: Nat) = a `TN.CmpNat` b+instance POrd Natural where+  type (a :: Natural) `Compare` (b :: Natural) = a `TN.CmpNat` b  instance POrd Symbol where   type (a :: Symbol) `Compare` (b :: Symbol) = a `TL.CmpSymbol` b +instance POrd Char where+  type (a :: Char) `Compare` (b :: Char) = a `TL.CmpChar` b+ -- SOrd instances-instance SOrd Nat where+instance SOrd Natural where   a `sCompare` b = case fromSing a `compare` fromSing b of                      LT -> unsafeCoerce SLT                      EQ -> unsafeCoerce SEQ@@ -142,10 +174,16 @@                      EQ -> unsafeCoerce SEQ                      GT -> unsafeCoerce SGT +instance SOrd Char where+  a `sCompare` b = case fromSing a `compare` fromSing b of+                     LT -> unsafeCoerce SLT+                     EQ -> unsafeCoerce SEQ+                     GT -> unsafeCoerce SGT+ -- Show instances  -- These are a bit special because the singleton constructor does not uniquely--- determine the type being used in the constructor's return type (e.g., all Nats+-- determine the type being used in the constructor's return type (e.g., all Naturals -- have the same singleton constructor, SNat). To compensate for this, we display -- the type being used using visible type application. (Thanks to @cumber on #179 -- for suggesting this implementation.)@@ -164,6 +202,13 @@         . showsPrec appPrec1 (symbolVal s)       ) +instance Show (SChar c) where+  showsPrec p s@SChar+    = showParen (p > appPrec)+      ( showString "SChar @"+        . showsPrec appPrec1 (charVal s)+      )+ -- Convenience functions  -- | Given a singleton for @Nat@, call something requiring a@@ -176,6 +221,11 @@ withKnownSymbol :: Sing n -> (KnownSymbol n => r) -> r withKnownSymbol SSym f = f +-- | Given a singleton for @Char@, call something requiring+-- a @KnownChar@ instance.+withKnownChar :: Sing n -> (KnownChar n => r) -> r+withKnownChar SChar f = f+ -- | The promotion of 'error'. This version is more poly-kinded for -- easier use. type Error :: k0 -> k@@ -209,7 +259,7 @@ sUndefined :: HasCallStack => a sUndefined = undefined --- | The singleton analogue of '(TN.^)' for 'Nat's.+-- | The singleton analogue of '(TN.^)' for 'Natural's. (%^) :: Sing a -> Sing b -> Sing (a ^ b) sa %^ sb =   let a = fromSing sa@@ -226,12 +276,14 @@   sing = singFun2 (%^) instance SingI x => SingI ((^@#@$$) x) where   sing = singFun1 (sing @x %^)+instance SingI1 (^@#@$$) where+  liftSing s = singFun1 (s %^)  -- | The singleton analogue of 'TN.<=?' ----- Note that, because of historical reasons in GHC's 'TN.Nat' API, 'TN.<=?'+-- Note that, because of historical reasons in GHC's 'Natural' API, 'TN.<=?' -- is incompatible (unification-wise) with 'O.<=' and the 'PEq', 'SEq',--- 'POrd', and 'SOrd' instances for 'Nat'.  @(a '<=?' b) ~ 'True@ does not+-- 'POrd', and 'SOrd' instances for 'Natural'.  @(a '<=?' b) ~ 'True@ does not -- imply anything about @a 'O.<=' b@ or any other 'PEq' / 'POrd' -- relationships. --@@ -243,14 +295,16 @@ -- This is provided here for the sake of completeness and for compatibility -- with libraries with APIs built around '<=?'.  New code should use -- 'CmpNat', exposed through this library through the 'POrd' and 'SOrd'--- instances for 'Nat'.-(%<=?) :: Sing a -> Sing b -> Sing (a <=? b)+-- instances for 'Natural'.+(%<=?) :: forall (a :: Natural) (b :: Natural). Sing a -> Sing b -> Sing (a <=? b) sa %<=? sb = unsafeCoerce (sa %<= sb) infix 4 %<=?  -- Defunctionalization symbols for (<=?) $(genDefunSymbols [''(<=?)])-instance SingI (<=?@#@$) where+instance SingI ((<=?@#@$) @Natural) where   sing = singFun2 (%<=?)-instance SingI x => SingI ((<=?@#@$$) x) where+instance SingI x => SingI ((<=?@#@$$) @Natural x) where   sing = singFun1 (sing @x %<=?)+instance SingI1 ((<=?@#@$$) @Natural) where+  liftSing s = singFun1 (s %<=?)
src/Text/Show/Singletons.hs view
@@ -28,7 +28,7 @@ -----------------------------------------------------------------------------  module Text.Show.Singletons (-  PShow(..), SShow(..), SymbolS, SChar, show_,+  PShow(..), SShow(..), SymbolS, show_,   Shows, sShows,   ShowListWith, sShowListWith,   ShowChar, sShowChar,@@ -53,6 +53,8 @@   AppPrecSym0, AppPrec1Sym0   ) where +import           Data.Bool.Singletons+import           Data.Eq.Singletons import           Data.Kind import           Data.List.NonEmpty (NonEmpty) import           Data.List.Singletons.Internal@@ -78,14 +80,9 @@ type SymbolS :: Type type SymbolS = Symbol -> Symbol --- | GHC currently has no notion of type-level 'Char's, so we fake them with--- single-character 'Symbol's.-type SChar :: Type-type SChar = Symbol- $(singletonsOnly [d|   class Show a where-    showsPrec :: Nat -> a -> SymbolS+    showsPrec :: Natural -> a -> SymbolS     show_     :: a -> Symbol     showList  :: [a] -> SymbolS @@ -103,14 +100,14 @@       showl []     = "]" <> s       showl (y:ys) = "," <> showx y (showl ys) -  showChar :: SChar -> SymbolS-  showChar = (<>)+  showChar :: Char -> SymbolS+  showChar = consSymbol    showString :: Symbol -> SymbolS   showString = (<>)    showParen :: Bool -> SymbolS -> SymbolS-  showParen b p = if b then showChar "(" . p . showChar ")" else p+  showParen b p = if b then showChar '(' . p . showChar ')' else p    showSpace :: SymbolS   showSpace = \xs -> " " <> xs@@ -125,17 +122,10 @@   instance Show a => Show [a] where     showsPrec _ = showList -  -- -| This is not an ideal Show instance for Symbol, since the Show instance-  -- for String escapes special characters. Unfortunately, GHC lacks the ability-  -- to case on individual characters in a Symbol (at least, not without GHC-  -- plugins), so this is the best we can do for the time being.-  instance Show Symbol where-    showsPrec _ = showString-   show_tuple :: [SymbolS] -> SymbolS-  show_tuple ss = showChar "("-                . foldr1 (\s r -> s . showChar "," . r) ss-                . showChar ")"+  show_tuple ss = showChar '('+                . foldr1 (\s r -> s . showChar ',' . r) ss+                . showChar ')'    instance (Show a, Show b) => Show (a,b)  where     showsPrec _ (a,b) s = show_tuple [shows a, shows b] s@@ -161,28 +151,138 @@   |])  $(promoteOnly [d|-  showsNat :: Nat -> SymbolS-  showsNat 0 = showChar "0"-  showsNat 1 = showChar "1"-  showsNat 2 = showChar "2"-  showsNat 3 = showChar "3"-  showsNat 4 = showChar "4"-  showsNat 5 = showChar "5"-  showsNat 6 = showChar "6"-  showsNat 7 = showChar "7"-  showsNat 8 = showChar "8"-  showsNat 9 = showChar "9"+  showsNat :: Natural -> SymbolS+  showsNat 0 = showChar '0'+  showsNat 1 = showChar '1'+  showsNat 2 = showChar '2'+  showsNat 3 = showChar '3'+  showsNat 4 = showChar '4'+  showsNat 5 = showChar '5'+  showsNat 6 = showChar '6'+  showsNat 7 = showChar '7'+  showsNat 8 = showChar '8'+  showsNat 9 = showChar '9'   showsNat n = showsNat (n `div` 10) . showsNat (n `mod` 10)   |]) -instance PShow Nat where+instance PShow Natural where   type ShowsPrec _ n x = ShowsNat n x -instance SShow Nat where+instance SShow Natural where   sShowsPrec _ sn sx =     let n = fromSing sn         x = fromSing sx         ex = someSymbolVal (P.show n ++ T.unpack x)+    in+    case ex of+      SomeSymbol (_ :: Proxy s) -> unsafeCoerce (SSym :: Sing s)++$(promoteOnly [d|+  showsCharPrec :: Natural -> Char -> SymbolS+  showsCharPrec _ '\'' = showString "'\\''"+  showsCharPrec _ c    = showChar '\'' . showLitChar c . showChar '\''++  showCharList :: [Char] -> SymbolS+  showCharList cs = showChar '"' . showLitString cs . showChar '"'++  -- -| Like 'showCharList', but for 'Symbol's.+  showSymbol :: Symbol -> SymbolS+  showSymbol sym = showChar '"' . showLitSymbol sym . showChar '"'++  -- -| Convert a character to a string using only printable characters,+  -- using Haskell source-language escape conventions.  For example:+  --+  -- > showLitChar '\n' s  =  "\\n" ++ s+  --+  showLitChar                :: Char -> SymbolS+  showLitChar c s | c > '\DEL' =  showChar '\\' (protectEsc isDec (shows (charToNat c)) s)+  showLitChar '\DEL'         s =  showString "\\DEL" s+  showLitChar '\\'           s =  showString "\\\\" s+  showLitChar c s | c >= ' '   =  showChar c s+  showLitChar '\a'           s =  showString "\\a" s+  showLitChar '\b'           s =  showString "\\b" s+  showLitChar '\f'           s =  showString "\\f" s+  showLitChar '\n'           s =  showString "\\n" s+  showLitChar '\r'           s =  showString "\\r" s+  showLitChar '\t'           s =  showString "\\t" s+  showLitChar '\v'           s =  showString "\\v" s+  showLitChar '\SO'          s =  protectEsc (== 'H') (showString "\\SO") s+  showLitChar c              s =  showString ('\\' `consSymbol` (asciiTab!!charToNat c)) s+          -- I've done manual eta-expansion here, because otherwise it's+          -- impossible to stop (asciiTab!!charToNat) getting floated out as an MFE++  showLitString :: String -> SymbolS+  -- -| Same as 'showLitChar', but for strings+  -- It converts the string to a string using Haskell escape conventions+  -- for non-printable characters. Does not add double-quotes around the+  -- whole thing; the caller should do that.+  -- The main difference from showLitChar (apart from the fact that the+  -- argument is a string not a list) is that we must escape double-quotes+  showLitString []         s = s+  showLitString ('"' : cs) s = showString "\\\"" (showLitString cs s)+  showLitString (c   : cs) s = showLitChar c (showLitString cs s)+     -- Making 's' an explicit parameter makes it clear to GHC that+     -- showLitString has arity 2, which avoids it allocating an extra lambda+     -- The sticking point is the recursive call to (showLitString cs), which+     -- it can't figure out would be ok with arity 2.++  -- -| Like 'showLitString', but for 'Symbol's.+  showLitSymbol :: Symbol -> SymbolS+  showLitSymbol sym s = case unconsSymbol sym of+    Nothing        -> s+    Just ('"', cs) -> showString "\\\"" (showLitSymbol cs s)+    Just (c,   cs) -> showLitChar c (showLitSymbol cs s)++  isDec :: Char -> Bool+  isDec c = c >= '0' && c <= '9'++  protectEsc :: (Char -> Bool) -> SymbolS -> SymbolS+  protectEsc p f             = f . cont+                               -- where cont s@(c:_) | p c = "\\&" ++ s+                               --       cont s             = s+                               where cont s = case unconsSymbol s of+                                       Just (c, _) | p c -> "\\&" <> s+                                       Nothing           -> s++  asciiTab :: [Symbol]+  asciiTab = -- Using an array drags in the array module.  listArray ('\NUL', ' ')+             ["NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL",+              "BS",  "HT",  "LF",  "VT",  "FF",  "CR",  "SO",  "SI",+              "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB",+              "CAN", "EM",  "SUB", "ESC", "FS",  "GS",  "RS",  "US",+              "SP"]+  |])++instance PShow Char where+  type ShowsPrec p c x = ShowsCharPrec p c x+  type ShowList cs x = ShowCharList cs x++instance SShow Char where+  sShowsPrec sp sc sx =+    let p  = fromSing sp+        c  = fromSing sc+        x  = fromSing sx+        ex = someSymbolVal (P.showsPrec (fromIntegral p) c (T.unpack x))+    in+    case ex of+      SomeSymbol (_ :: Proxy s) -> unsafeCoerce (SSym :: Sing s)++  sShowList scs sx =+    let cs = fromSing scs+        x  = fromSing sx+        ex = someSymbolVal (P.showList cs (T.unpack x))+    in+    case ex of+      SomeSymbol (_ :: Proxy s) -> unsafeCoerce (SSym :: Sing s)++instance PShow Symbol where+  type ShowsPrec _ s x = ShowSymbol s x++instance SShow Symbol where+  sShowsPrec _ ss sx =+    let s  = fromSing ss+        x  = fromSing sx+        ex = someSymbolVal (P.show s ++ T.unpack x)     in     case ex of       SomeSymbol (_ :: Proxy s) -> unsafeCoerce (SSym :: Sing s)
tests/SingletonsBaseTestSuite.hs view
@@ -138,6 +138,11 @@     , compileAndDumpStdTest "T453"     , compileAndDumpStdTest "NegativeLiterals"     , compileAndDumpStdTest "T470"+    , compileAndDumpStdTest "T480"+    , compileAndDumpStdTest "T487"+    , compileAndDumpStdTest "T489"+    , compileAndDumpStdTest "T492"+    , compileAndDumpStdTest "Natural"     ],     testCompileAndDumpGroup "Promote"     [ compileAndDumpStdTest "Constructors"
tests/SingletonsBaseTestSuiteUtils.hs view
@@ -71,6 +71,7 @@   , "-XNoStarIsType"   , "-XStandaloneKindSignatures"   , "-XConstraintKinds"+  , "-XNoNamedWildCards"   ]  -- Compile a test using specified GHC options. Save output to file, normalize
tests/compile-and-dump/GradingClient/Database.golden view
@@ -90,3352 +90,3382 @@       fromSing (SSucc b) = Succ (fromSing b)       toSing Zero = SomeSing SZero       toSing (Succ (b :: Demote Nat))-        = case toSing b :: SomeSing Nat of {-            SomeSing c -> SomeSing (SSucc c) }-    instance SEq Nat => SEq Nat where-      (%==) ::-        forall (t1 :: Nat) (t2 :: Nat).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun Nat ((~>) Nat Bool)-                                              -> Type) t1) t2)-      (%==) SZero SZero = STrue-      (%==) SZero (SSucc _) = SFalse-      (%==) (SSucc _) SZero = SFalse-      (%==)-        (SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))-        (SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))-        = (applySing-             ((applySing ((singFun2 @(==@#@$)) (%==))) sA_0123456789876543210))-            sB_0123456789876543210-    instance SOrd Nat => SOrd Nat where-      sCompare ::-        forall (t1 :: Nat) (t2 :: Nat).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)-                                                 -> Type) t1) t2)-      sCompare SZero SZero-        = (applySing-             ((applySing-                 ((applySing ((singFun3 @FoldlSym0) sFoldl))-                    ((singFun2 @ThenCmpSym0) sThenCmp)))-                SEQ))-            SNil-      sCompare-        (SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))-        (SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))-        = (applySing-             ((applySing-                 ((applySing ((singFun3 @FoldlSym0) sFoldl))-                    ((singFun2 @ThenCmpSym0) sThenCmp)))-                SEQ))-            ((applySing-                ((applySing ((singFun2 @(:@#@$)) SCons))-                   ((applySing-                       ((applySing ((singFun2 @CompareSym0) sCompare))-                          sA_0123456789876543210))-                      sB_0123456789876543210)))-               SNil)-      sCompare SZero (SSucc _) = SLT-      sCompare (SSucc _) SZero = SGT-    instance SDecide Nat => SDecide Nat where-      (%~) SZero SZero = Proved Refl-      (%~) SZero (SSucc _) = Disproved (\ x -> case x of)-      (%~) (SSucc _) SZero = Disproved (\ x -> case x of)-      (%~) (SSucc a) (SSucc b)-        = case ((%~) a) b of-            Proved Refl -> Proved Refl-            Disproved contra-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })-    instance SDecide Nat =>-             Data.Type.Equality.TestEquality (SNat :: Nat -> Type) where-      Data.Type.Equality.testEquality-        = Data.Singletons.Decide.decideEquality-    instance SDecide Nat =>-             Data.Type.Coercion.TestCoercion (SNat :: Nat -> Type) where-      Data.Type.Coercion.testCoercion-        = Data.Singletons.Decide.decideCoercion-    instance SingI Zero where-      sing = SZero-    instance SingI n => SingI (Succ (n :: Nat)) where-      sing = SSucc sing-    instance SingI (SuccSym0 :: (~>) Nat Nat) where-      sing = (singFun1 @SuccSym0) SSucc-GradingClient/Database.hs:(0,0)-(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] |]-  ======>-    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 []) = 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)-    type BOOLSym0 :: U-    type family BOOLSym0 :: U where-      BOOLSym0 = BOOL-    type STRINGSym0 :: U-    type family STRINGSym0 :: U where-      STRINGSym0 = STRING-    type NATSym0 :: U-    type family NATSym0 :: U where-      NATSym0 = NAT-    type VECSym0 :: (~>) U ((~>) Nat U)-    data VECSym0 :: (~>) U ((~>) Nat U)-      where-        VECSym0KindInference :: SameKind (Apply VECSym0 arg) (VECSym1 arg) =>-                                VECSym0 a0123456789876543210-    type instance Apply VECSym0 a0123456789876543210 = VECSym1 a0123456789876543210-    instance SuppressUnusedWarnings VECSym0 where-      suppressUnusedWarnings = snd (((,) VECSym0KindInference) ())-    type VECSym1 :: U -> (~>) Nat U-    data VECSym1 (a0123456789876543210 :: U) :: (~>) Nat U-      where-        VECSym1KindInference :: SameKind (Apply (VECSym1 a0123456789876543210) arg) (VECSym2 a0123456789876543210 arg) =>-                                VECSym1 a0123456789876543210 a0123456789876543210-    type instance Apply (VECSym1 a0123456789876543210) a0123456789876543210 = VEC a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (VECSym1 a0123456789876543210) where-      suppressUnusedWarnings = snd (((,) VECSym1KindInference) ())-    type VECSym2 :: U -> Nat -> U-    type family VECSym2 (a0123456789876543210 :: U) (a0123456789876543210 :: Nat) :: U where-      VECSym2 a0123456789876543210 a0123456789876543210 = VEC a0123456789876543210 a0123456789876543210-    type CASym0 :: AChar-    type family CASym0 :: AChar where-      CASym0 = CA-    type CBSym0 :: AChar-    type family CBSym0 :: AChar where-      CBSym0 = CB-    type CCSym0 :: AChar-    type family CCSym0 :: AChar where-      CCSym0 = CC-    type CDSym0 :: AChar-    type family CDSym0 :: AChar where-      CDSym0 = CD-    type CESym0 :: AChar-    type family CESym0 :: AChar where-      CESym0 = CE-    type CFSym0 :: AChar-    type family CFSym0 :: AChar where-      CFSym0 = CF-    type CGSym0 :: AChar-    type family CGSym0 :: AChar where-      CGSym0 = CG-    type CHSym0 :: AChar-    type family CHSym0 :: AChar where-      CHSym0 = CH-    type CISym0 :: AChar-    type family CISym0 :: AChar where-      CISym0 = CI-    type CJSym0 :: AChar-    type family CJSym0 :: AChar where-      CJSym0 = CJ-    type CKSym0 :: AChar-    type family CKSym0 :: AChar where-      CKSym0 = CK-    type CLSym0 :: AChar-    type family CLSym0 :: AChar where-      CLSym0 = CL-    type CMSym0 :: AChar-    type family CMSym0 :: AChar where-      CMSym0 = CM-    type CNSym0 :: AChar-    type family CNSym0 :: AChar where-      CNSym0 = CN-    type COSym0 :: AChar-    type family COSym0 :: AChar where-      COSym0 = CO-    type CPSym0 :: AChar-    type family CPSym0 :: AChar where-      CPSym0 = CP-    type CQSym0 :: AChar-    type family CQSym0 :: AChar where-      CQSym0 = CQ-    type CRSym0 :: AChar-    type family CRSym0 :: AChar where-      CRSym0 = CR-    type CSSym0 :: AChar-    type family CSSym0 :: AChar where-      CSSym0 = CS-    type CTSym0 :: AChar-    type family CTSym0 :: AChar where-      CTSym0 = CT-    type CUSym0 :: AChar-    type family CUSym0 :: AChar where-      CUSym0 = CU-    type CVSym0 :: AChar-    type family CVSym0 :: AChar where-      CVSym0 = CV-    type CWSym0 :: AChar-    type family CWSym0 :: AChar where-      CWSym0 = CW-    type CXSym0 :: AChar-    type family CXSym0 :: AChar where-      CXSym0 = CX-    type CYSym0 :: AChar-    type family CYSym0 :: AChar where-      CYSym0 = CY-    type CZSym0 :: AChar-    type family CZSym0 :: AChar where-      CZSym0 = CZ-    type AttrSym0 :: (~>) [AChar] ((~>) U Attribute)-    data AttrSym0 :: (~>) [AChar] ((~>) U Attribute)-      where-        AttrSym0KindInference :: SameKind (Apply AttrSym0 arg) (AttrSym1 arg) =>-                                 AttrSym0 a0123456789876543210-    type instance Apply AttrSym0 a0123456789876543210 = AttrSym1 a0123456789876543210-    instance SuppressUnusedWarnings AttrSym0 where-      suppressUnusedWarnings = snd (((,) AttrSym0KindInference) ())-    type AttrSym1 :: [AChar] -> (~>) U Attribute-    data AttrSym1 (a0123456789876543210 :: [AChar]) :: (~>) U Attribute-      where-        AttrSym1KindInference :: SameKind (Apply (AttrSym1 a0123456789876543210) arg) (AttrSym2 a0123456789876543210 arg) =>-                                 AttrSym1 a0123456789876543210 a0123456789876543210-    type instance Apply (AttrSym1 a0123456789876543210) a0123456789876543210 = Attr a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (AttrSym1 a0123456789876543210) where-      suppressUnusedWarnings = snd (((,) AttrSym1KindInference) ())-    type AttrSym2 :: [AChar] -> U -> Attribute-    type family AttrSym2 (a0123456789876543210 :: [AChar]) (a0123456789876543210 :: U) :: Attribute where-      AttrSym2 a0123456789876543210 a0123456789876543210 = Attr a0123456789876543210 a0123456789876543210-    type SchSym0 :: (~>) [Attribute] Schema-    data SchSym0 :: (~>) [Attribute] Schema-      where-        SchSym0KindInference :: SameKind (Apply SchSym0 arg) (SchSym1 arg) =>-                                SchSym0 a0123456789876543210-    type instance Apply SchSym0 a0123456789876543210 = Sch a0123456789876543210-    instance SuppressUnusedWarnings SchSym0 where-      suppressUnusedWarnings = snd (((,) SchSym0KindInference) ())-    type SchSym1 :: [Attribute] -> Schema-    type family SchSym1 (a0123456789876543210 :: [Attribute]) :: Schema where-      SchSym1 a0123456789876543210 = Sch a0123456789876543210-    data Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210-      where-        Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>-                                                                                Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210-    type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210-    instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where-      suppressUnusedWarnings-        = snd-            (((,)-                Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)-               ())-    data Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210 name'0123456789876543210-      where-        Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference :: SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 arg) =>-                                                                                Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210 name'0123456789876543210-    type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) name'0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210-    instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) where-      suppressUnusedWarnings-        = snd-            (((,)-                Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference)-               ())-    data Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210 u0123456789876543210-      where-        Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference :: SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 arg) =>-                                                                                Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210 u0123456789876543210-    type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210) u0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210-    instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210) where-      suppressUnusedWarnings-        = snd-            (((,)-                Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference)-               ())-    data Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210-      where-        Let0123456789876543210Scrutinee_0123456789876543210Sym3KindInference :: SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name0123456789876543210 name'0123456789876543210 u0123456789876543210 arg) =>-                                                                                Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210-    type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210) attrs0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210-    instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210) where-      suppressUnusedWarnings-        = snd-            (((,)-                Let0123456789876543210Scrutinee_0123456789876543210Sym3KindInference)-               ())-    type family Let0123456789876543210Scrutinee_0123456789876543210Sym4 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210 where-      Let0123456789876543210Scrutinee_0123456789876543210Sym4 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210-    type family Let0123456789876543210Scrutinee_0123456789876543210 name name' u attrs where-      Let0123456789876543210Scrutinee_0123456789876543210 name name' u attrs = Apply (Apply (==@#@$) name) name'-    type family Case_0123456789876543210 name name' u attrs t where-      Case_0123456789876543210 name name' u attrs 'True = u-      Case_0123456789876543210 name name' u attrs 'False = Apply (Apply LookupSym0 name) (Apply SchSym0 attrs)-    type LookupSym0 :: (~>) [AChar] ((~>) Schema U)-    data LookupSym0 :: (~>) [AChar] ((~>) Schema U)-      where-        LookupSym0KindInference :: SameKind (Apply LookupSym0 arg) (LookupSym1 arg) =>-                                   LookupSym0 a0123456789876543210-    type instance Apply LookupSym0 a0123456789876543210 = LookupSym1 a0123456789876543210-    instance SuppressUnusedWarnings LookupSym0 where-      suppressUnusedWarnings = snd (((,) LookupSym0KindInference) ())-    type LookupSym1 :: [AChar] -> (~>) Schema U-    data LookupSym1 (a0123456789876543210 :: [AChar]) :: (~>) Schema U-      where-        LookupSym1KindInference :: SameKind (Apply (LookupSym1 a0123456789876543210) arg) (LookupSym2 a0123456789876543210 arg) =>-                                   LookupSym1 a0123456789876543210 a0123456789876543210-    type instance Apply (LookupSym1 a0123456789876543210) a0123456789876543210 = Lookup a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (LookupSym1 a0123456789876543210) where-      suppressUnusedWarnings = snd (((,) LookupSym1KindInference) ())-    type LookupSym2 :: [AChar] -> Schema -> U-    type family LookupSym2 (a0123456789876543210 :: [AChar]) (a0123456789876543210 :: Schema) :: U where-      LookupSym2 a0123456789876543210 a0123456789876543210 = Lookup a0123456789876543210 a0123456789876543210-    type OccursSym0 :: (~>) [AChar] ((~>) Schema Bool)-    data OccursSym0 :: (~>) [AChar] ((~>) Schema Bool)-      where-        OccursSym0KindInference :: SameKind (Apply OccursSym0 arg) (OccursSym1 arg) =>-                                   OccursSym0 a0123456789876543210-    type instance Apply OccursSym0 a0123456789876543210 = OccursSym1 a0123456789876543210-    instance SuppressUnusedWarnings OccursSym0 where-      suppressUnusedWarnings = snd (((,) OccursSym0KindInference) ())-    type OccursSym1 :: [AChar] -> (~>) Schema Bool-    data OccursSym1 (a0123456789876543210 :: [AChar]) :: (~>) Schema Bool-      where-        OccursSym1KindInference :: SameKind (Apply (OccursSym1 a0123456789876543210) arg) (OccursSym2 a0123456789876543210 arg) =>-                                   OccursSym1 a0123456789876543210 a0123456789876543210-    type instance Apply (OccursSym1 a0123456789876543210) a0123456789876543210 = Occurs a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (OccursSym1 a0123456789876543210) where-      suppressUnusedWarnings = snd (((,) OccursSym1KindInference) ())-    type OccursSym2 :: [AChar] -> Schema -> Bool-    type family OccursSym2 (a0123456789876543210 :: [AChar]) (a0123456789876543210 :: Schema) :: Bool where-      OccursSym2 a0123456789876543210 a0123456789876543210 = Occurs a0123456789876543210 a0123456789876543210-    type DisjointSym0 :: (~>) Schema ((~>) Schema Bool)-    data DisjointSym0 :: (~>) Schema ((~>) Schema Bool)-      where-        DisjointSym0KindInference :: SameKind (Apply DisjointSym0 arg) (DisjointSym1 arg) =>-                                     DisjointSym0 a0123456789876543210-    type instance Apply DisjointSym0 a0123456789876543210 = DisjointSym1 a0123456789876543210-    instance SuppressUnusedWarnings DisjointSym0 where-      suppressUnusedWarnings = snd (((,) DisjointSym0KindInference) ())-    type DisjointSym1 :: Schema -> (~>) Schema Bool-    data DisjointSym1 (a0123456789876543210 :: Schema) :: (~>) Schema Bool-      where-        DisjointSym1KindInference :: SameKind (Apply (DisjointSym1 a0123456789876543210) arg) (DisjointSym2 a0123456789876543210 arg) =>-                                     DisjointSym1 a0123456789876543210 a0123456789876543210-    type instance Apply (DisjointSym1 a0123456789876543210) a0123456789876543210 = Disjoint a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (DisjointSym1 a0123456789876543210) where-      suppressUnusedWarnings = snd (((,) DisjointSym1KindInference) ())-    type DisjointSym2 :: Schema -> Schema -> Bool-    type family DisjointSym2 (a0123456789876543210 :: Schema) (a0123456789876543210 :: Schema) :: Bool where-      DisjointSym2 a0123456789876543210 a0123456789876543210 = Disjoint a0123456789876543210 a0123456789876543210-    type AttrNotInSym0 :: (~>) Attribute ((~>) Schema Bool)-    data AttrNotInSym0 :: (~>) Attribute ((~>) Schema Bool)-      where-        AttrNotInSym0KindInference :: SameKind (Apply AttrNotInSym0 arg) (AttrNotInSym1 arg) =>-                                      AttrNotInSym0 a0123456789876543210-    type instance Apply AttrNotInSym0 a0123456789876543210 = AttrNotInSym1 a0123456789876543210-    instance SuppressUnusedWarnings AttrNotInSym0 where-      suppressUnusedWarnings = snd (((,) AttrNotInSym0KindInference) ())-    type AttrNotInSym1 :: Attribute -> (~>) Schema Bool-    data AttrNotInSym1 (a0123456789876543210 :: Attribute) :: (~>) Schema Bool-      where-        AttrNotInSym1KindInference :: SameKind (Apply (AttrNotInSym1 a0123456789876543210) arg) (AttrNotInSym2 a0123456789876543210 arg) =>-                                      AttrNotInSym1 a0123456789876543210 a0123456789876543210-    type instance Apply (AttrNotInSym1 a0123456789876543210) a0123456789876543210 = AttrNotIn a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (AttrNotInSym1 a0123456789876543210) where-      suppressUnusedWarnings = snd (((,) AttrNotInSym1KindInference) ())-    type AttrNotInSym2 :: Attribute -> Schema -> Bool-    type family AttrNotInSym2 (a0123456789876543210 :: Attribute) (a0123456789876543210 :: Schema) :: Bool where-      AttrNotInSym2 a0123456789876543210 a0123456789876543210 = AttrNotIn a0123456789876543210 a0123456789876543210-    type AppendSym0 :: (~>) Schema ((~>) Schema Schema)-    data AppendSym0 :: (~>) Schema ((~>) Schema Schema)-      where-        AppendSym0KindInference :: SameKind (Apply AppendSym0 arg) (AppendSym1 arg) =>-                                   AppendSym0 a0123456789876543210-    type instance Apply AppendSym0 a0123456789876543210 = AppendSym1 a0123456789876543210-    instance SuppressUnusedWarnings AppendSym0 where-      suppressUnusedWarnings = snd (((,) AppendSym0KindInference) ())-    type AppendSym1 :: Schema -> (~>) Schema Schema-    data AppendSym1 (a0123456789876543210 :: Schema) :: (~>) Schema Schema-      where-        AppendSym1KindInference :: SameKind (Apply (AppendSym1 a0123456789876543210) arg) (AppendSym2 a0123456789876543210 arg) =>-                                   AppendSym1 a0123456789876543210 a0123456789876543210-    type instance Apply (AppendSym1 a0123456789876543210) a0123456789876543210 = Append a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (AppendSym1 a0123456789876543210) where-      suppressUnusedWarnings = snd (((,) AppendSym1KindInference) ())-    type AppendSym2 :: Schema -> Schema -> Schema-    type family AppendSym2 (a0123456789876543210 :: Schema) (a0123456789876543210 :: Schema) :: Schema where-      AppendSym2 a0123456789876543210 a0123456789876543210 = Append a0123456789876543210 a0123456789876543210-    type Lookup :: [AChar] -> Schema -> U-    type family Lookup (a :: [AChar]) (a :: Schema) :: U where-      Lookup _ (Sch '[]) = UndefinedSym0-      Lookup name (Sch ('(:) (Attr name' u) attrs)) = Case_0123456789876543210 name name' u attrs (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs)-    type Occurs :: [AChar] -> Schema -> Bool-    type family Occurs (a :: [AChar]) (a :: Schema) :: Bool where-      Occurs _ (Sch '[]) = FalseSym0-      Occurs name (Sch ('(:) (Attr name' _) attrs)) = Apply (Apply (||@#@$) (Apply (Apply (==@#@$) name) name')) (Apply (Apply OccursSym0 name) (Apply SchSym0 attrs))-    type Disjoint :: Schema -> Schema -> Bool-    type family Disjoint (a :: Schema) (a :: Schema) :: Bool where-      Disjoint (Sch '[]) _ = TrueSym0-      Disjoint (Sch ('(:) h t)) s = Apply (Apply (&&@#@$) (Apply (Apply AttrNotInSym0 h) s)) (Apply (Apply DisjointSym0 (Apply SchSym0 t)) s)-    type AttrNotIn :: Attribute -> Schema -> Bool-    type family AttrNotIn (a :: Attribute) (a :: Schema) :: Bool where-      AttrNotIn _ (Sch '[]) = TrueSym0-      AttrNotIn (Attr name u) (Sch ('(:) (Attr name' _) t)) = Apply (Apply (&&@#@$) (Apply (Apply (/=@#@$) name) name')) (Apply (Apply AttrNotInSym0 (Apply (Apply AttrSym0 name) u)) (Apply SchSym0 t))-    type Append :: Schema -> Schema -> Schema-    type family Append (a :: Schema) (a :: Schema) :: Schema where-      Append (Sch s1) (Sch s2) = Apply SchSym0 (Apply (Apply (++@#@$) s1) s2)-    type TFHelper_0123456789876543210 :: U -> U -> Bool-    type family TFHelper_0123456789876543210 (a :: U) (a :: U) :: Bool where-      TFHelper_0123456789876543210 BOOL BOOL = TrueSym0-      TFHelper_0123456789876543210 BOOL STRING = FalseSym0-      TFHelper_0123456789876543210 BOOL NAT = FalseSym0-      TFHelper_0123456789876543210 BOOL (VEC _ _) = FalseSym0-      TFHelper_0123456789876543210 STRING BOOL = FalseSym0-      TFHelper_0123456789876543210 STRING STRING = TrueSym0-      TFHelper_0123456789876543210 STRING NAT = FalseSym0-      TFHelper_0123456789876543210 STRING (VEC _ _) = FalseSym0-      TFHelper_0123456789876543210 NAT BOOL = FalseSym0-      TFHelper_0123456789876543210 NAT STRING = FalseSym0-      TFHelper_0123456789876543210 NAT NAT = TrueSym0-      TFHelper_0123456789876543210 NAT (VEC _ _) = FalseSym0-      TFHelper_0123456789876543210 (VEC _ _) BOOL = FalseSym0-      TFHelper_0123456789876543210 (VEC _ _) STRING = FalseSym0-      TFHelper_0123456789876543210 (VEC _ _) NAT = FalseSym0-      TFHelper_0123456789876543210 (VEC a_0123456789876543210 a_0123456789876543210) (VEC b_0123456789876543210 b_0123456789876543210) = Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)-    type TFHelper_0123456789876543210Sym0 :: (~>) U ((~>) U Bool)-    data TFHelper_0123456789876543210Sym0 :: (~>) U ((~>) U Bool)-      where-        TFHelper_0123456789876543210Sym0KindInference :: SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>-                                                         TFHelper_0123456789876543210Sym0 a0123456789876543210-    type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210-    instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where-      suppressUnusedWarnings-        = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())-    type TFHelper_0123456789876543210Sym1 :: U -> (~>) U Bool-    data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: U) :: (~>) U Bool-      where-        TFHelper_0123456789876543210Sym1KindInference :: SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>-                                                         TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210-    type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where-      suppressUnusedWarnings-        = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())-    type TFHelper_0123456789876543210Sym2 :: U -> U -> Bool-    type family TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: U) (a0123456789876543210 :: U) :: Bool where-      TFHelper_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210-    instance PEq U where-      type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat-                                          -> U -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: U) (a :: Symbol) :: Symbol where-      ShowsPrec_0123456789876543210 _ BOOL a_0123456789876543210 = Apply (Apply ShowStringSym0 "BOOL") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ STRING a_0123456789876543210 = Apply (Apply ShowStringSym0 "STRING") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ NAT a_0123456789876543210 = Apply (Apply ShowStringSym0 "NAT") a_0123456789876543210-      ShowsPrec_0123456789876543210 p_0123456789876543210 (VEC arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "VEC ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) U ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) U ((~>) Symbol Symbol))-      where-        ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>-                                                          ShowsPrec_0123456789876543210Sym0 a0123456789876543210-    type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210-    instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where-      suppressUnusedWarnings-        = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat-                                              -> (~>) U ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) U ((~>) Symbol Symbol)-      where-        ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>-                                                          ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210-    type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where-      suppressUnusedWarnings-        = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat-                                              -> U -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: U) :: (~>) Symbol Symbol-      where-        ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>-                                                          ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210-    type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where-      suppressUnusedWarnings-        = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat-                                              -> U -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: U) (a0123456789876543210 :: Symbol) :: Symbol where-      ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210-    instance PShow U where-      type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat-                                          -> AChar -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: AChar) (a :: Symbol) :: Symbol where-      ShowsPrec_0123456789876543210 _ CA a_0123456789876543210 = Apply (Apply ShowStringSym0 "CA") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CB a_0123456789876543210 = Apply (Apply ShowStringSym0 "CB") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CC a_0123456789876543210 = Apply (Apply ShowStringSym0 "CC") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CD a_0123456789876543210 = Apply (Apply ShowStringSym0 "CD") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CE a_0123456789876543210 = Apply (Apply ShowStringSym0 "CE") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CF a_0123456789876543210 = Apply (Apply ShowStringSym0 "CF") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CG a_0123456789876543210 = Apply (Apply ShowStringSym0 "CG") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CH a_0123456789876543210 = Apply (Apply ShowStringSym0 "CH") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CI a_0123456789876543210 = Apply (Apply ShowStringSym0 "CI") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CJ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CJ") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CK a_0123456789876543210 = Apply (Apply ShowStringSym0 "CK") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CL a_0123456789876543210 = Apply (Apply ShowStringSym0 "CL") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CM a_0123456789876543210 = Apply (Apply ShowStringSym0 "CM") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CN a_0123456789876543210 = Apply (Apply ShowStringSym0 "CN") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CO a_0123456789876543210 = Apply (Apply ShowStringSym0 "CO") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CP a_0123456789876543210 = Apply (Apply ShowStringSym0 "CP") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CQ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CQ") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CR a_0123456789876543210 = Apply (Apply ShowStringSym0 "CR") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CS a_0123456789876543210 = Apply (Apply ShowStringSym0 "CS") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CT a_0123456789876543210 = Apply (Apply ShowStringSym0 "CT") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CU a_0123456789876543210 = Apply (Apply ShowStringSym0 "CU") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CV a_0123456789876543210 = Apply (Apply ShowStringSym0 "CV") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CW a_0123456789876543210 = Apply (Apply ShowStringSym0 "CW") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CX a_0123456789876543210 = Apply (Apply ShowStringSym0 "CX") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CY a_0123456789876543210 = Apply (Apply ShowStringSym0 "CY") a_0123456789876543210-      ShowsPrec_0123456789876543210 _ CZ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CZ") a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) AChar ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) AChar ((~>) Symbol Symbol))-      where-        ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>-                                                          ShowsPrec_0123456789876543210Sym0 a0123456789876543210-    type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210-    instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where-      suppressUnusedWarnings-        = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat-                                              -> (~>) AChar ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) AChar ((~>) Symbol Symbol)-      where-        ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>-                                                          ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210-    type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where-      suppressUnusedWarnings-        = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat-                                              -> AChar -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: AChar) :: (~>) Symbol Symbol-      where-        ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>-                                                          ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210-    type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where-      suppressUnusedWarnings-        = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat-                                              -> AChar -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: AChar) (a0123456789876543210 :: Symbol) :: Symbol where-      ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210-    instance PShow AChar where-      type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a-    type TFHelper_0123456789876543210 :: AChar -> AChar -> Bool-    type family TFHelper_0123456789876543210 (a :: AChar) (a :: AChar) :: Bool where-      TFHelper_0123456789876543210 CA CA = TrueSym0-      TFHelper_0123456789876543210 CA CB = FalseSym0-      TFHelper_0123456789876543210 CA CC = FalseSym0-      TFHelper_0123456789876543210 CA CD = FalseSym0-      TFHelper_0123456789876543210 CA CE = FalseSym0-      TFHelper_0123456789876543210 CA CF = FalseSym0-      TFHelper_0123456789876543210 CA CG = FalseSym0-      TFHelper_0123456789876543210 CA CH = FalseSym0-      TFHelper_0123456789876543210 CA CI = FalseSym0-      TFHelper_0123456789876543210 CA CJ = FalseSym0-      TFHelper_0123456789876543210 CA CK = FalseSym0-      TFHelper_0123456789876543210 CA CL = FalseSym0-      TFHelper_0123456789876543210 CA CM = FalseSym0-      TFHelper_0123456789876543210 CA CN = FalseSym0-      TFHelper_0123456789876543210 CA CO = FalseSym0-      TFHelper_0123456789876543210 CA CP = FalseSym0-      TFHelper_0123456789876543210 CA CQ = FalseSym0-      TFHelper_0123456789876543210 CA CR = FalseSym0-      TFHelper_0123456789876543210 CA CS = FalseSym0-      TFHelper_0123456789876543210 CA CT = FalseSym0-      TFHelper_0123456789876543210 CA CU = FalseSym0-      TFHelper_0123456789876543210 CA CV = FalseSym0-      TFHelper_0123456789876543210 CA CW = FalseSym0-      TFHelper_0123456789876543210 CA CX = FalseSym0-      TFHelper_0123456789876543210 CA CY = FalseSym0-      TFHelper_0123456789876543210 CA CZ = FalseSym0-      TFHelper_0123456789876543210 CB CA = FalseSym0-      TFHelper_0123456789876543210 CB CB = TrueSym0-      TFHelper_0123456789876543210 CB CC = FalseSym0-      TFHelper_0123456789876543210 CB CD = FalseSym0-      TFHelper_0123456789876543210 CB CE = FalseSym0-      TFHelper_0123456789876543210 CB CF = FalseSym0-      TFHelper_0123456789876543210 CB CG = FalseSym0-      TFHelper_0123456789876543210 CB CH = FalseSym0-      TFHelper_0123456789876543210 CB CI = FalseSym0-      TFHelper_0123456789876543210 CB CJ = FalseSym0-      TFHelper_0123456789876543210 CB CK = FalseSym0-      TFHelper_0123456789876543210 CB CL = FalseSym0-      TFHelper_0123456789876543210 CB CM = FalseSym0-      TFHelper_0123456789876543210 CB CN = FalseSym0-      TFHelper_0123456789876543210 CB CO = FalseSym0-      TFHelper_0123456789876543210 CB CP = FalseSym0-      TFHelper_0123456789876543210 CB CQ = FalseSym0-      TFHelper_0123456789876543210 CB CR = FalseSym0-      TFHelper_0123456789876543210 CB CS = FalseSym0-      TFHelper_0123456789876543210 CB CT = FalseSym0-      TFHelper_0123456789876543210 CB CU = FalseSym0-      TFHelper_0123456789876543210 CB CV = FalseSym0-      TFHelper_0123456789876543210 CB CW = FalseSym0-      TFHelper_0123456789876543210 CB CX = FalseSym0-      TFHelper_0123456789876543210 CB CY = FalseSym0-      TFHelper_0123456789876543210 CB CZ = FalseSym0-      TFHelper_0123456789876543210 CC CA = FalseSym0-      TFHelper_0123456789876543210 CC CB = FalseSym0-      TFHelper_0123456789876543210 CC CC = TrueSym0-      TFHelper_0123456789876543210 CC CD = FalseSym0-      TFHelper_0123456789876543210 CC CE = FalseSym0-      TFHelper_0123456789876543210 CC CF = FalseSym0-      TFHelper_0123456789876543210 CC CG = FalseSym0-      TFHelper_0123456789876543210 CC CH = FalseSym0-      TFHelper_0123456789876543210 CC CI = FalseSym0-      TFHelper_0123456789876543210 CC CJ = FalseSym0-      TFHelper_0123456789876543210 CC CK = FalseSym0-      TFHelper_0123456789876543210 CC CL = FalseSym0-      TFHelper_0123456789876543210 CC CM = FalseSym0-      TFHelper_0123456789876543210 CC CN = FalseSym0-      TFHelper_0123456789876543210 CC CO = FalseSym0-      TFHelper_0123456789876543210 CC CP = FalseSym0-      TFHelper_0123456789876543210 CC CQ = FalseSym0-      TFHelper_0123456789876543210 CC CR = FalseSym0-      TFHelper_0123456789876543210 CC CS = FalseSym0-      TFHelper_0123456789876543210 CC CT = FalseSym0-      TFHelper_0123456789876543210 CC CU = FalseSym0-      TFHelper_0123456789876543210 CC CV = FalseSym0-      TFHelper_0123456789876543210 CC CW = FalseSym0-      TFHelper_0123456789876543210 CC CX = FalseSym0-      TFHelper_0123456789876543210 CC CY = FalseSym0-      TFHelper_0123456789876543210 CC CZ = FalseSym0-      TFHelper_0123456789876543210 CD CA = FalseSym0-      TFHelper_0123456789876543210 CD CB = FalseSym0-      TFHelper_0123456789876543210 CD CC = FalseSym0-      TFHelper_0123456789876543210 CD CD = TrueSym0-      TFHelper_0123456789876543210 CD CE = FalseSym0-      TFHelper_0123456789876543210 CD CF = FalseSym0-      TFHelper_0123456789876543210 CD CG = FalseSym0-      TFHelper_0123456789876543210 CD CH = FalseSym0-      TFHelper_0123456789876543210 CD CI = FalseSym0-      TFHelper_0123456789876543210 CD CJ = FalseSym0-      TFHelper_0123456789876543210 CD CK = FalseSym0-      TFHelper_0123456789876543210 CD CL = FalseSym0-      TFHelper_0123456789876543210 CD CM = FalseSym0-      TFHelper_0123456789876543210 CD CN = FalseSym0-      TFHelper_0123456789876543210 CD CO = FalseSym0-      TFHelper_0123456789876543210 CD CP = FalseSym0-      TFHelper_0123456789876543210 CD CQ = FalseSym0-      TFHelper_0123456789876543210 CD CR = FalseSym0-      TFHelper_0123456789876543210 CD CS = FalseSym0-      TFHelper_0123456789876543210 CD CT = FalseSym0-      TFHelper_0123456789876543210 CD CU = FalseSym0-      TFHelper_0123456789876543210 CD CV = FalseSym0-      TFHelper_0123456789876543210 CD CW = FalseSym0-      TFHelper_0123456789876543210 CD CX = FalseSym0-      TFHelper_0123456789876543210 CD CY = FalseSym0-      TFHelper_0123456789876543210 CD CZ = FalseSym0-      TFHelper_0123456789876543210 CE CA = FalseSym0-      TFHelper_0123456789876543210 CE CB = FalseSym0-      TFHelper_0123456789876543210 CE CC = FalseSym0-      TFHelper_0123456789876543210 CE CD = FalseSym0-      TFHelper_0123456789876543210 CE CE = TrueSym0-      TFHelper_0123456789876543210 CE CF = FalseSym0-      TFHelper_0123456789876543210 CE CG = FalseSym0-      TFHelper_0123456789876543210 CE CH = FalseSym0-      TFHelper_0123456789876543210 CE CI = FalseSym0-      TFHelper_0123456789876543210 CE CJ = FalseSym0-      TFHelper_0123456789876543210 CE CK = FalseSym0-      TFHelper_0123456789876543210 CE CL = FalseSym0-      TFHelper_0123456789876543210 CE CM = FalseSym0-      TFHelper_0123456789876543210 CE CN = FalseSym0-      TFHelper_0123456789876543210 CE CO = FalseSym0-      TFHelper_0123456789876543210 CE CP = FalseSym0-      TFHelper_0123456789876543210 CE CQ = FalseSym0-      TFHelper_0123456789876543210 CE CR = FalseSym0-      TFHelper_0123456789876543210 CE CS = FalseSym0-      TFHelper_0123456789876543210 CE CT = FalseSym0-      TFHelper_0123456789876543210 CE CU = FalseSym0-      TFHelper_0123456789876543210 CE CV = FalseSym0-      TFHelper_0123456789876543210 CE CW = FalseSym0-      TFHelper_0123456789876543210 CE CX = FalseSym0-      TFHelper_0123456789876543210 CE CY = FalseSym0-      TFHelper_0123456789876543210 CE CZ = FalseSym0-      TFHelper_0123456789876543210 CF CA = FalseSym0-      TFHelper_0123456789876543210 CF CB = FalseSym0-      TFHelper_0123456789876543210 CF CC = FalseSym0-      TFHelper_0123456789876543210 CF CD = FalseSym0-      TFHelper_0123456789876543210 CF CE = FalseSym0-      TFHelper_0123456789876543210 CF CF = TrueSym0-      TFHelper_0123456789876543210 CF CG = FalseSym0-      TFHelper_0123456789876543210 CF CH = FalseSym0-      TFHelper_0123456789876543210 CF CI = FalseSym0-      TFHelper_0123456789876543210 CF CJ = FalseSym0-      TFHelper_0123456789876543210 CF CK = FalseSym0-      TFHelper_0123456789876543210 CF CL = FalseSym0-      TFHelper_0123456789876543210 CF CM = FalseSym0-      TFHelper_0123456789876543210 CF CN = FalseSym0-      TFHelper_0123456789876543210 CF CO = FalseSym0-      TFHelper_0123456789876543210 CF CP = FalseSym0-      TFHelper_0123456789876543210 CF CQ = FalseSym0-      TFHelper_0123456789876543210 CF CR = FalseSym0-      TFHelper_0123456789876543210 CF CS = FalseSym0-      TFHelper_0123456789876543210 CF CT = FalseSym0-      TFHelper_0123456789876543210 CF CU = FalseSym0-      TFHelper_0123456789876543210 CF CV = FalseSym0-      TFHelper_0123456789876543210 CF CW = FalseSym0-      TFHelper_0123456789876543210 CF CX = FalseSym0-      TFHelper_0123456789876543210 CF CY = FalseSym0-      TFHelper_0123456789876543210 CF CZ = FalseSym0-      TFHelper_0123456789876543210 CG CA = FalseSym0-      TFHelper_0123456789876543210 CG CB = FalseSym0-      TFHelper_0123456789876543210 CG CC = FalseSym0-      TFHelper_0123456789876543210 CG CD = FalseSym0-      TFHelper_0123456789876543210 CG CE = FalseSym0-      TFHelper_0123456789876543210 CG CF = FalseSym0-      TFHelper_0123456789876543210 CG CG = TrueSym0-      TFHelper_0123456789876543210 CG CH = FalseSym0-      TFHelper_0123456789876543210 CG CI = FalseSym0-      TFHelper_0123456789876543210 CG CJ = FalseSym0-      TFHelper_0123456789876543210 CG CK = FalseSym0-      TFHelper_0123456789876543210 CG CL = FalseSym0-      TFHelper_0123456789876543210 CG CM = FalseSym0-      TFHelper_0123456789876543210 CG CN = FalseSym0-      TFHelper_0123456789876543210 CG CO = FalseSym0-      TFHelper_0123456789876543210 CG CP = FalseSym0-      TFHelper_0123456789876543210 CG CQ = FalseSym0-      TFHelper_0123456789876543210 CG CR = FalseSym0-      TFHelper_0123456789876543210 CG CS = FalseSym0-      TFHelper_0123456789876543210 CG CT = FalseSym0-      TFHelper_0123456789876543210 CG CU = FalseSym0-      TFHelper_0123456789876543210 CG CV = FalseSym0-      TFHelper_0123456789876543210 CG CW = FalseSym0-      TFHelper_0123456789876543210 CG CX = FalseSym0-      TFHelper_0123456789876543210 CG CY = FalseSym0-      TFHelper_0123456789876543210 CG CZ = FalseSym0-      TFHelper_0123456789876543210 CH CA = FalseSym0-      TFHelper_0123456789876543210 CH CB = FalseSym0-      TFHelper_0123456789876543210 CH CC = FalseSym0-      TFHelper_0123456789876543210 CH CD = FalseSym0-      TFHelper_0123456789876543210 CH CE = FalseSym0-      TFHelper_0123456789876543210 CH CF = FalseSym0-      TFHelper_0123456789876543210 CH CG = FalseSym0-      TFHelper_0123456789876543210 CH CH = TrueSym0-      TFHelper_0123456789876543210 CH CI = FalseSym0-      TFHelper_0123456789876543210 CH CJ = FalseSym0-      TFHelper_0123456789876543210 CH CK = FalseSym0-      TFHelper_0123456789876543210 CH CL = FalseSym0-      TFHelper_0123456789876543210 CH CM = FalseSym0-      TFHelper_0123456789876543210 CH CN = FalseSym0-      TFHelper_0123456789876543210 CH CO = FalseSym0-      TFHelper_0123456789876543210 CH CP = FalseSym0-      TFHelper_0123456789876543210 CH CQ = FalseSym0-      TFHelper_0123456789876543210 CH CR = FalseSym0-      TFHelper_0123456789876543210 CH CS = FalseSym0-      TFHelper_0123456789876543210 CH CT = FalseSym0-      TFHelper_0123456789876543210 CH CU = FalseSym0-      TFHelper_0123456789876543210 CH CV = FalseSym0-      TFHelper_0123456789876543210 CH CW = FalseSym0-      TFHelper_0123456789876543210 CH CX = FalseSym0-      TFHelper_0123456789876543210 CH CY = FalseSym0-      TFHelper_0123456789876543210 CH CZ = FalseSym0-      TFHelper_0123456789876543210 CI CA = FalseSym0-      TFHelper_0123456789876543210 CI CB = FalseSym0-      TFHelper_0123456789876543210 CI CC = FalseSym0-      TFHelper_0123456789876543210 CI CD = FalseSym0-      TFHelper_0123456789876543210 CI CE = FalseSym0-      TFHelper_0123456789876543210 CI CF = FalseSym0-      TFHelper_0123456789876543210 CI CG = FalseSym0-      TFHelper_0123456789876543210 CI CH = FalseSym0-      TFHelper_0123456789876543210 CI CI = TrueSym0-      TFHelper_0123456789876543210 CI CJ = FalseSym0-      TFHelper_0123456789876543210 CI CK = FalseSym0-      TFHelper_0123456789876543210 CI CL = FalseSym0-      TFHelper_0123456789876543210 CI CM = FalseSym0-      TFHelper_0123456789876543210 CI CN = FalseSym0-      TFHelper_0123456789876543210 CI CO = FalseSym0-      TFHelper_0123456789876543210 CI CP = FalseSym0-      TFHelper_0123456789876543210 CI CQ = FalseSym0-      TFHelper_0123456789876543210 CI CR = FalseSym0-      TFHelper_0123456789876543210 CI CS = FalseSym0-      TFHelper_0123456789876543210 CI CT = FalseSym0-      TFHelper_0123456789876543210 CI CU = FalseSym0-      TFHelper_0123456789876543210 CI CV = FalseSym0-      TFHelper_0123456789876543210 CI CW = FalseSym0-      TFHelper_0123456789876543210 CI CX = FalseSym0-      TFHelper_0123456789876543210 CI CY = FalseSym0-      TFHelper_0123456789876543210 CI CZ = FalseSym0-      TFHelper_0123456789876543210 CJ CA = FalseSym0-      TFHelper_0123456789876543210 CJ CB = FalseSym0-      TFHelper_0123456789876543210 CJ CC = FalseSym0-      TFHelper_0123456789876543210 CJ CD = FalseSym0-      TFHelper_0123456789876543210 CJ CE = FalseSym0-      TFHelper_0123456789876543210 CJ CF = FalseSym0-      TFHelper_0123456789876543210 CJ CG = FalseSym0-      TFHelper_0123456789876543210 CJ CH = FalseSym0-      TFHelper_0123456789876543210 CJ CI = FalseSym0-      TFHelper_0123456789876543210 CJ CJ = TrueSym0-      TFHelper_0123456789876543210 CJ CK = FalseSym0-      TFHelper_0123456789876543210 CJ CL = FalseSym0-      TFHelper_0123456789876543210 CJ CM = FalseSym0-      TFHelper_0123456789876543210 CJ CN = FalseSym0-      TFHelper_0123456789876543210 CJ CO = FalseSym0-      TFHelper_0123456789876543210 CJ CP = FalseSym0-      TFHelper_0123456789876543210 CJ CQ = FalseSym0-      TFHelper_0123456789876543210 CJ CR = FalseSym0-      TFHelper_0123456789876543210 CJ CS = FalseSym0-      TFHelper_0123456789876543210 CJ CT = FalseSym0-      TFHelper_0123456789876543210 CJ CU = FalseSym0-      TFHelper_0123456789876543210 CJ CV = FalseSym0-      TFHelper_0123456789876543210 CJ CW = FalseSym0-      TFHelper_0123456789876543210 CJ CX = FalseSym0-      TFHelper_0123456789876543210 CJ CY = FalseSym0-      TFHelper_0123456789876543210 CJ CZ = FalseSym0-      TFHelper_0123456789876543210 CK CA = FalseSym0-      TFHelper_0123456789876543210 CK CB = FalseSym0-      TFHelper_0123456789876543210 CK CC = FalseSym0-      TFHelper_0123456789876543210 CK CD = FalseSym0-      TFHelper_0123456789876543210 CK CE = FalseSym0-      TFHelper_0123456789876543210 CK CF = FalseSym0-      TFHelper_0123456789876543210 CK CG = FalseSym0-      TFHelper_0123456789876543210 CK CH = FalseSym0-      TFHelper_0123456789876543210 CK CI = FalseSym0-      TFHelper_0123456789876543210 CK CJ = FalseSym0-      TFHelper_0123456789876543210 CK CK = TrueSym0-      TFHelper_0123456789876543210 CK CL = FalseSym0-      TFHelper_0123456789876543210 CK CM = FalseSym0-      TFHelper_0123456789876543210 CK CN = FalseSym0-      TFHelper_0123456789876543210 CK CO = FalseSym0-      TFHelper_0123456789876543210 CK CP = FalseSym0-      TFHelper_0123456789876543210 CK CQ = FalseSym0-      TFHelper_0123456789876543210 CK CR = FalseSym0-      TFHelper_0123456789876543210 CK CS = FalseSym0-      TFHelper_0123456789876543210 CK CT = FalseSym0-      TFHelper_0123456789876543210 CK CU = FalseSym0-      TFHelper_0123456789876543210 CK CV = FalseSym0-      TFHelper_0123456789876543210 CK CW = FalseSym0-      TFHelper_0123456789876543210 CK CX = FalseSym0-      TFHelper_0123456789876543210 CK CY = FalseSym0-      TFHelper_0123456789876543210 CK CZ = FalseSym0-      TFHelper_0123456789876543210 CL CA = FalseSym0-      TFHelper_0123456789876543210 CL CB = FalseSym0-      TFHelper_0123456789876543210 CL CC = FalseSym0-      TFHelper_0123456789876543210 CL CD = FalseSym0-      TFHelper_0123456789876543210 CL CE = FalseSym0-      TFHelper_0123456789876543210 CL CF = FalseSym0-      TFHelper_0123456789876543210 CL CG = FalseSym0-      TFHelper_0123456789876543210 CL CH = FalseSym0-      TFHelper_0123456789876543210 CL CI = FalseSym0-      TFHelper_0123456789876543210 CL CJ = FalseSym0-      TFHelper_0123456789876543210 CL CK = FalseSym0-      TFHelper_0123456789876543210 CL CL = TrueSym0-      TFHelper_0123456789876543210 CL CM = FalseSym0-      TFHelper_0123456789876543210 CL CN = FalseSym0-      TFHelper_0123456789876543210 CL CO = FalseSym0-      TFHelper_0123456789876543210 CL CP = FalseSym0-      TFHelper_0123456789876543210 CL CQ = FalseSym0-      TFHelper_0123456789876543210 CL CR = FalseSym0-      TFHelper_0123456789876543210 CL CS = FalseSym0-      TFHelper_0123456789876543210 CL CT = FalseSym0-      TFHelper_0123456789876543210 CL CU = FalseSym0-      TFHelper_0123456789876543210 CL CV = FalseSym0-      TFHelper_0123456789876543210 CL CW = FalseSym0-      TFHelper_0123456789876543210 CL CX = FalseSym0-      TFHelper_0123456789876543210 CL CY = FalseSym0-      TFHelper_0123456789876543210 CL CZ = FalseSym0-      TFHelper_0123456789876543210 CM CA = FalseSym0-      TFHelper_0123456789876543210 CM CB = FalseSym0-      TFHelper_0123456789876543210 CM CC = FalseSym0-      TFHelper_0123456789876543210 CM CD = FalseSym0-      TFHelper_0123456789876543210 CM CE = FalseSym0-      TFHelper_0123456789876543210 CM CF = FalseSym0-      TFHelper_0123456789876543210 CM CG = FalseSym0-      TFHelper_0123456789876543210 CM CH = FalseSym0-      TFHelper_0123456789876543210 CM CI = FalseSym0-      TFHelper_0123456789876543210 CM CJ = FalseSym0-      TFHelper_0123456789876543210 CM CK = FalseSym0-      TFHelper_0123456789876543210 CM CL = FalseSym0-      TFHelper_0123456789876543210 CM CM = TrueSym0-      TFHelper_0123456789876543210 CM CN = FalseSym0-      TFHelper_0123456789876543210 CM CO = FalseSym0-      TFHelper_0123456789876543210 CM CP = FalseSym0-      TFHelper_0123456789876543210 CM CQ = FalseSym0-      TFHelper_0123456789876543210 CM CR = FalseSym0-      TFHelper_0123456789876543210 CM CS = FalseSym0-      TFHelper_0123456789876543210 CM CT = FalseSym0-      TFHelper_0123456789876543210 CM CU = FalseSym0-      TFHelper_0123456789876543210 CM CV = FalseSym0-      TFHelper_0123456789876543210 CM CW = FalseSym0-      TFHelper_0123456789876543210 CM CX = FalseSym0-      TFHelper_0123456789876543210 CM CY = FalseSym0-      TFHelper_0123456789876543210 CM CZ = FalseSym0-      TFHelper_0123456789876543210 CN CA = FalseSym0-      TFHelper_0123456789876543210 CN CB = FalseSym0-      TFHelper_0123456789876543210 CN CC = FalseSym0-      TFHelper_0123456789876543210 CN CD = FalseSym0-      TFHelper_0123456789876543210 CN CE = FalseSym0-      TFHelper_0123456789876543210 CN CF = FalseSym0-      TFHelper_0123456789876543210 CN CG = FalseSym0-      TFHelper_0123456789876543210 CN CH = FalseSym0-      TFHelper_0123456789876543210 CN CI = FalseSym0-      TFHelper_0123456789876543210 CN CJ = FalseSym0-      TFHelper_0123456789876543210 CN CK = FalseSym0-      TFHelper_0123456789876543210 CN CL = FalseSym0-      TFHelper_0123456789876543210 CN CM = FalseSym0-      TFHelper_0123456789876543210 CN CN = TrueSym0-      TFHelper_0123456789876543210 CN CO = FalseSym0-      TFHelper_0123456789876543210 CN CP = FalseSym0-      TFHelper_0123456789876543210 CN CQ = FalseSym0-      TFHelper_0123456789876543210 CN CR = FalseSym0-      TFHelper_0123456789876543210 CN CS = FalseSym0-      TFHelper_0123456789876543210 CN CT = FalseSym0-      TFHelper_0123456789876543210 CN CU = FalseSym0-      TFHelper_0123456789876543210 CN CV = FalseSym0-      TFHelper_0123456789876543210 CN CW = FalseSym0-      TFHelper_0123456789876543210 CN CX = FalseSym0-      TFHelper_0123456789876543210 CN CY = FalseSym0-      TFHelper_0123456789876543210 CN CZ = FalseSym0-      TFHelper_0123456789876543210 CO CA = FalseSym0-      TFHelper_0123456789876543210 CO CB = FalseSym0-      TFHelper_0123456789876543210 CO CC = FalseSym0-      TFHelper_0123456789876543210 CO CD = FalseSym0-      TFHelper_0123456789876543210 CO CE = FalseSym0-      TFHelper_0123456789876543210 CO CF = FalseSym0-      TFHelper_0123456789876543210 CO CG = FalseSym0-      TFHelper_0123456789876543210 CO CH = FalseSym0-      TFHelper_0123456789876543210 CO CI = FalseSym0-      TFHelper_0123456789876543210 CO CJ = FalseSym0-      TFHelper_0123456789876543210 CO CK = FalseSym0-      TFHelper_0123456789876543210 CO CL = FalseSym0-      TFHelper_0123456789876543210 CO CM = FalseSym0-      TFHelper_0123456789876543210 CO CN = FalseSym0-      TFHelper_0123456789876543210 CO CO = TrueSym0-      TFHelper_0123456789876543210 CO CP = FalseSym0-      TFHelper_0123456789876543210 CO CQ = FalseSym0-      TFHelper_0123456789876543210 CO CR = FalseSym0-      TFHelper_0123456789876543210 CO CS = FalseSym0-      TFHelper_0123456789876543210 CO CT = FalseSym0-      TFHelper_0123456789876543210 CO CU = FalseSym0-      TFHelper_0123456789876543210 CO CV = FalseSym0-      TFHelper_0123456789876543210 CO CW = FalseSym0-      TFHelper_0123456789876543210 CO CX = FalseSym0-      TFHelper_0123456789876543210 CO CY = FalseSym0-      TFHelper_0123456789876543210 CO CZ = FalseSym0-      TFHelper_0123456789876543210 CP CA = FalseSym0-      TFHelper_0123456789876543210 CP CB = FalseSym0-      TFHelper_0123456789876543210 CP CC = FalseSym0-      TFHelper_0123456789876543210 CP CD = FalseSym0-      TFHelper_0123456789876543210 CP CE = FalseSym0-      TFHelper_0123456789876543210 CP CF = FalseSym0-      TFHelper_0123456789876543210 CP CG = FalseSym0-      TFHelper_0123456789876543210 CP CH = FalseSym0-      TFHelper_0123456789876543210 CP CI = FalseSym0-      TFHelper_0123456789876543210 CP CJ = FalseSym0-      TFHelper_0123456789876543210 CP CK = FalseSym0-      TFHelper_0123456789876543210 CP CL = FalseSym0-      TFHelper_0123456789876543210 CP CM = FalseSym0-      TFHelper_0123456789876543210 CP CN = FalseSym0-      TFHelper_0123456789876543210 CP CO = FalseSym0-      TFHelper_0123456789876543210 CP CP = TrueSym0-      TFHelper_0123456789876543210 CP CQ = FalseSym0-      TFHelper_0123456789876543210 CP CR = FalseSym0-      TFHelper_0123456789876543210 CP CS = FalseSym0-      TFHelper_0123456789876543210 CP CT = FalseSym0-      TFHelper_0123456789876543210 CP CU = FalseSym0-      TFHelper_0123456789876543210 CP CV = FalseSym0-      TFHelper_0123456789876543210 CP CW = FalseSym0-      TFHelper_0123456789876543210 CP CX = FalseSym0-      TFHelper_0123456789876543210 CP CY = FalseSym0-      TFHelper_0123456789876543210 CP CZ = FalseSym0-      TFHelper_0123456789876543210 CQ CA = FalseSym0-      TFHelper_0123456789876543210 CQ CB = FalseSym0-      TFHelper_0123456789876543210 CQ CC = FalseSym0-      TFHelper_0123456789876543210 CQ CD = FalseSym0-      TFHelper_0123456789876543210 CQ CE = FalseSym0-      TFHelper_0123456789876543210 CQ CF = FalseSym0-      TFHelper_0123456789876543210 CQ CG = FalseSym0-      TFHelper_0123456789876543210 CQ CH = FalseSym0-      TFHelper_0123456789876543210 CQ CI = FalseSym0-      TFHelper_0123456789876543210 CQ CJ = FalseSym0-      TFHelper_0123456789876543210 CQ CK = FalseSym0-      TFHelper_0123456789876543210 CQ CL = FalseSym0-      TFHelper_0123456789876543210 CQ CM = FalseSym0-      TFHelper_0123456789876543210 CQ CN = FalseSym0-      TFHelper_0123456789876543210 CQ CO = FalseSym0-      TFHelper_0123456789876543210 CQ CP = FalseSym0-      TFHelper_0123456789876543210 CQ CQ = TrueSym0-      TFHelper_0123456789876543210 CQ CR = FalseSym0-      TFHelper_0123456789876543210 CQ CS = FalseSym0-      TFHelper_0123456789876543210 CQ CT = FalseSym0-      TFHelper_0123456789876543210 CQ CU = FalseSym0-      TFHelper_0123456789876543210 CQ CV = FalseSym0-      TFHelper_0123456789876543210 CQ CW = FalseSym0-      TFHelper_0123456789876543210 CQ CX = FalseSym0-      TFHelper_0123456789876543210 CQ CY = FalseSym0-      TFHelper_0123456789876543210 CQ CZ = FalseSym0-      TFHelper_0123456789876543210 CR CA = FalseSym0-      TFHelper_0123456789876543210 CR CB = FalseSym0-      TFHelper_0123456789876543210 CR CC = FalseSym0-      TFHelper_0123456789876543210 CR CD = FalseSym0-      TFHelper_0123456789876543210 CR CE = FalseSym0-      TFHelper_0123456789876543210 CR CF = FalseSym0-      TFHelper_0123456789876543210 CR CG = FalseSym0-      TFHelper_0123456789876543210 CR CH = FalseSym0-      TFHelper_0123456789876543210 CR CI = FalseSym0-      TFHelper_0123456789876543210 CR CJ = FalseSym0-      TFHelper_0123456789876543210 CR CK = FalseSym0-      TFHelper_0123456789876543210 CR CL = FalseSym0-      TFHelper_0123456789876543210 CR CM = FalseSym0-      TFHelper_0123456789876543210 CR CN = FalseSym0-      TFHelper_0123456789876543210 CR CO = FalseSym0-      TFHelper_0123456789876543210 CR CP = FalseSym0-      TFHelper_0123456789876543210 CR CQ = FalseSym0-      TFHelper_0123456789876543210 CR CR = TrueSym0-      TFHelper_0123456789876543210 CR CS = FalseSym0-      TFHelper_0123456789876543210 CR CT = FalseSym0-      TFHelper_0123456789876543210 CR CU = FalseSym0-      TFHelper_0123456789876543210 CR CV = FalseSym0-      TFHelper_0123456789876543210 CR CW = FalseSym0-      TFHelper_0123456789876543210 CR CX = FalseSym0-      TFHelper_0123456789876543210 CR CY = FalseSym0-      TFHelper_0123456789876543210 CR CZ = FalseSym0-      TFHelper_0123456789876543210 CS CA = FalseSym0-      TFHelper_0123456789876543210 CS CB = FalseSym0-      TFHelper_0123456789876543210 CS CC = FalseSym0-      TFHelper_0123456789876543210 CS CD = FalseSym0-      TFHelper_0123456789876543210 CS CE = FalseSym0-      TFHelper_0123456789876543210 CS CF = FalseSym0-      TFHelper_0123456789876543210 CS CG = FalseSym0-      TFHelper_0123456789876543210 CS CH = FalseSym0-      TFHelper_0123456789876543210 CS CI = FalseSym0-      TFHelper_0123456789876543210 CS CJ = FalseSym0-      TFHelper_0123456789876543210 CS CK = FalseSym0-      TFHelper_0123456789876543210 CS CL = FalseSym0-      TFHelper_0123456789876543210 CS CM = FalseSym0-      TFHelper_0123456789876543210 CS CN = FalseSym0-      TFHelper_0123456789876543210 CS CO = FalseSym0-      TFHelper_0123456789876543210 CS CP = FalseSym0-      TFHelper_0123456789876543210 CS CQ = FalseSym0-      TFHelper_0123456789876543210 CS CR = FalseSym0-      TFHelper_0123456789876543210 CS CS = TrueSym0-      TFHelper_0123456789876543210 CS CT = FalseSym0-      TFHelper_0123456789876543210 CS CU = FalseSym0-      TFHelper_0123456789876543210 CS CV = FalseSym0-      TFHelper_0123456789876543210 CS CW = FalseSym0-      TFHelper_0123456789876543210 CS CX = FalseSym0-      TFHelper_0123456789876543210 CS CY = FalseSym0-      TFHelper_0123456789876543210 CS CZ = FalseSym0-      TFHelper_0123456789876543210 CT CA = FalseSym0-      TFHelper_0123456789876543210 CT CB = FalseSym0-      TFHelper_0123456789876543210 CT CC = FalseSym0-      TFHelper_0123456789876543210 CT CD = FalseSym0-      TFHelper_0123456789876543210 CT CE = FalseSym0-      TFHelper_0123456789876543210 CT CF = FalseSym0-      TFHelper_0123456789876543210 CT CG = FalseSym0-      TFHelper_0123456789876543210 CT CH = FalseSym0-      TFHelper_0123456789876543210 CT CI = FalseSym0-      TFHelper_0123456789876543210 CT CJ = FalseSym0-      TFHelper_0123456789876543210 CT CK = FalseSym0-      TFHelper_0123456789876543210 CT CL = FalseSym0-      TFHelper_0123456789876543210 CT CM = FalseSym0-      TFHelper_0123456789876543210 CT CN = FalseSym0-      TFHelper_0123456789876543210 CT CO = FalseSym0-      TFHelper_0123456789876543210 CT CP = FalseSym0-      TFHelper_0123456789876543210 CT CQ = FalseSym0-      TFHelper_0123456789876543210 CT CR = FalseSym0-      TFHelper_0123456789876543210 CT CS = FalseSym0-      TFHelper_0123456789876543210 CT CT = TrueSym0-      TFHelper_0123456789876543210 CT CU = FalseSym0-      TFHelper_0123456789876543210 CT CV = FalseSym0-      TFHelper_0123456789876543210 CT CW = FalseSym0-      TFHelper_0123456789876543210 CT CX = FalseSym0-      TFHelper_0123456789876543210 CT CY = FalseSym0-      TFHelper_0123456789876543210 CT CZ = FalseSym0-      TFHelper_0123456789876543210 CU CA = FalseSym0-      TFHelper_0123456789876543210 CU CB = FalseSym0-      TFHelper_0123456789876543210 CU CC = FalseSym0-      TFHelper_0123456789876543210 CU CD = FalseSym0-      TFHelper_0123456789876543210 CU CE = FalseSym0-      TFHelper_0123456789876543210 CU CF = FalseSym0-      TFHelper_0123456789876543210 CU CG = FalseSym0-      TFHelper_0123456789876543210 CU CH = FalseSym0-      TFHelper_0123456789876543210 CU CI = FalseSym0-      TFHelper_0123456789876543210 CU CJ = FalseSym0-      TFHelper_0123456789876543210 CU CK = FalseSym0-      TFHelper_0123456789876543210 CU CL = FalseSym0-      TFHelper_0123456789876543210 CU CM = FalseSym0-      TFHelper_0123456789876543210 CU CN = FalseSym0-      TFHelper_0123456789876543210 CU CO = FalseSym0-      TFHelper_0123456789876543210 CU CP = FalseSym0-      TFHelper_0123456789876543210 CU CQ = FalseSym0-      TFHelper_0123456789876543210 CU CR = FalseSym0-      TFHelper_0123456789876543210 CU CS = FalseSym0-      TFHelper_0123456789876543210 CU CT = FalseSym0-      TFHelper_0123456789876543210 CU CU = TrueSym0-      TFHelper_0123456789876543210 CU CV = FalseSym0-      TFHelper_0123456789876543210 CU CW = FalseSym0-      TFHelper_0123456789876543210 CU CX = FalseSym0-      TFHelper_0123456789876543210 CU CY = FalseSym0-      TFHelper_0123456789876543210 CU CZ = FalseSym0-      TFHelper_0123456789876543210 CV CA = FalseSym0-      TFHelper_0123456789876543210 CV CB = FalseSym0-      TFHelper_0123456789876543210 CV CC = FalseSym0-      TFHelper_0123456789876543210 CV CD = FalseSym0-      TFHelper_0123456789876543210 CV CE = FalseSym0-      TFHelper_0123456789876543210 CV CF = FalseSym0-      TFHelper_0123456789876543210 CV CG = FalseSym0-      TFHelper_0123456789876543210 CV CH = FalseSym0-      TFHelper_0123456789876543210 CV CI = FalseSym0-      TFHelper_0123456789876543210 CV CJ = FalseSym0-      TFHelper_0123456789876543210 CV CK = FalseSym0-      TFHelper_0123456789876543210 CV CL = FalseSym0-      TFHelper_0123456789876543210 CV CM = FalseSym0-      TFHelper_0123456789876543210 CV CN = FalseSym0-      TFHelper_0123456789876543210 CV CO = FalseSym0-      TFHelper_0123456789876543210 CV CP = FalseSym0-      TFHelper_0123456789876543210 CV CQ = FalseSym0-      TFHelper_0123456789876543210 CV CR = FalseSym0-      TFHelper_0123456789876543210 CV CS = FalseSym0-      TFHelper_0123456789876543210 CV CT = FalseSym0-      TFHelper_0123456789876543210 CV CU = FalseSym0-      TFHelper_0123456789876543210 CV CV = TrueSym0-      TFHelper_0123456789876543210 CV CW = FalseSym0-      TFHelper_0123456789876543210 CV CX = FalseSym0-      TFHelper_0123456789876543210 CV CY = FalseSym0-      TFHelper_0123456789876543210 CV CZ = FalseSym0-      TFHelper_0123456789876543210 CW CA = FalseSym0-      TFHelper_0123456789876543210 CW CB = FalseSym0-      TFHelper_0123456789876543210 CW CC = FalseSym0-      TFHelper_0123456789876543210 CW CD = FalseSym0-      TFHelper_0123456789876543210 CW CE = FalseSym0-      TFHelper_0123456789876543210 CW CF = FalseSym0-      TFHelper_0123456789876543210 CW CG = FalseSym0-      TFHelper_0123456789876543210 CW CH = FalseSym0-      TFHelper_0123456789876543210 CW CI = FalseSym0-      TFHelper_0123456789876543210 CW CJ = FalseSym0-      TFHelper_0123456789876543210 CW CK = FalseSym0-      TFHelper_0123456789876543210 CW CL = FalseSym0-      TFHelper_0123456789876543210 CW CM = FalseSym0-      TFHelper_0123456789876543210 CW CN = FalseSym0-      TFHelper_0123456789876543210 CW CO = FalseSym0-      TFHelper_0123456789876543210 CW CP = FalseSym0-      TFHelper_0123456789876543210 CW CQ = FalseSym0-      TFHelper_0123456789876543210 CW CR = FalseSym0-      TFHelper_0123456789876543210 CW CS = FalseSym0-      TFHelper_0123456789876543210 CW CT = FalseSym0-      TFHelper_0123456789876543210 CW CU = FalseSym0-      TFHelper_0123456789876543210 CW CV = FalseSym0-      TFHelper_0123456789876543210 CW CW = TrueSym0-      TFHelper_0123456789876543210 CW CX = FalseSym0-      TFHelper_0123456789876543210 CW CY = FalseSym0-      TFHelper_0123456789876543210 CW CZ = FalseSym0-      TFHelper_0123456789876543210 CX CA = FalseSym0-      TFHelper_0123456789876543210 CX CB = FalseSym0-      TFHelper_0123456789876543210 CX CC = FalseSym0-      TFHelper_0123456789876543210 CX CD = FalseSym0-      TFHelper_0123456789876543210 CX CE = FalseSym0-      TFHelper_0123456789876543210 CX CF = FalseSym0-      TFHelper_0123456789876543210 CX CG = FalseSym0-      TFHelper_0123456789876543210 CX CH = FalseSym0-      TFHelper_0123456789876543210 CX CI = FalseSym0-      TFHelper_0123456789876543210 CX CJ = FalseSym0-      TFHelper_0123456789876543210 CX CK = FalseSym0-      TFHelper_0123456789876543210 CX CL = FalseSym0-      TFHelper_0123456789876543210 CX CM = FalseSym0-      TFHelper_0123456789876543210 CX CN = FalseSym0-      TFHelper_0123456789876543210 CX CO = FalseSym0-      TFHelper_0123456789876543210 CX CP = FalseSym0-      TFHelper_0123456789876543210 CX CQ = FalseSym0-      TFHelper_0123456789876543210 CX CR = FalseSym0-      TFHelper_0123456789876543210 CX CS = FalseSym0-      TFHelper_0123456789876543210 CX CT = FalseSym0-      TFHelper_0123456789876543210 CX CU = FalseSym0-      TFHelper_0123456789876543210 CX CV = FalseSym0-      TFHelper_0123456789876543210 CX CW = FalseSym0-      TFHelper_0123456789876543210 CX CX = TrueSym0-      TFHelper_0123456789876543210 CX CY = FalseSym0-      TFHelper_0123456789876543210 CX CZ = FalseSym0-      TFHelper_0123456789876543210 CY CA = FalseSym0-      TFHelper_0123456789876543210 CY CB = FalseSym0-      TFHelper_0123456789876543210 CY CC = FalseSym0-      TFHelper_0123456789876543210 CY CD = FalseSym0-      TFHelper_0123456789876543210 CY CE = FalseSym0-      TFHelper_0123456789876543210 CY CF = FalseSym0-      TFHelper_0123456789876543210 CY CG = FalseSym0-      TFHelper_0123456789876543210 CY CH = FalseSym0-      TFHelper_0123456789876543210 CY CI = FalseSym0-      TFHelper_0123456789876543210 CY CJ = FalseSym0-      TFHelper_0123456789876543210 CY CK = FalseSym0-      TFHelper_0123456789876543210 CY CL = FalseSym0-      TFHelper_0123456789876543210 CY CM = FalseSym0-      TFHelper_0123456789876543210 CY CN = FalseSym0-      TFHelper_0123456789876543210 CY CO = FalseSym0-      TFHelper_0123456789876543210 CY CP = FalseSym0-      TFHelper_0123456789876543210 CY CQ = FalseSym0-      TFHelper_0123456789876543210 CY CR = FalseSym0-      TFHelper_0123456789876543210 CY CS = FalseSym0-      TFHelper_0123456789876543210 CY CT = FalseSym0-      TFHelper_0123456789876543210 CY CU = FalseSym0-      TFHelper_0123456789876543210 CY CV = FalseSym0-      TFHelper_0123456789876543210 CY CW = FalseSym0-      TFHelper_0123456789876543210 CY CX = FalseSym0-      TFHelper_0123456789876543210 CY CY = TrueSym0-      TFHelper_0123456789876543210 CY CZ = FalseSym0-      TFHelper_0123456789876543210 CZ CA = FalseSym0-      TFHelper_0123456789876543210 CZ CB = FalseSym0-      TFHelper_0123456789876543210 CZ CC = FalseSym0-      TFHelper_0123456789876543210 CZ CD = FalseSym0-      TFHelper_0123456789876543210 CZ CE = FalseSym0-      TFHelper_0123456789876543210 CZ CF = FalseSym0-      TFHelper_0123456789876543210 CZ CG = FalseSym0-      TFHelper_0123456789876543210 CZ CH = FalseSym0-      TFHelper_0123456789876543210 CZ CI = FalseSym0-      TFHelper_0123456789876543210 CZ CJ = FalseSym0-      TFHelper_0123456789876543210 CZ CK = FalseSym0-      TFHelper_0123456789876543210 CZ CL = FalseSym0-      TFHelper_0123456789876543210 CZ CM = FalseSym0-      TFHelper_0123456789876543210 CZ CN = FalseSym0-      TFHelper_0123456789876543210 CZ CO = FalseSym0-      TFHelper_0123456789876543210 CZ CP = FalseSym0-      TFHelper_0123456789876543210 CZ CQ = FalseSym0-      TFHelper_0123456789876543210 CZ CR = FalseSym0-      TFHelper_0123456789876543210 CZ CS = FalseSym0-      TFHelper_0123456789876543210 CZ CT = FalseSym0-      TFHelper_0123456789876543210 CZ CU = FalseSym0-      TFHelper_0123456789876543210 CZ CV = FalseSym0-      TFHelper_0123456789876543210 CZ CW = FalseSym0-      TFHelper_0123456789876543210 CZ CX = FalseSym0-      TFHelper_0123456789876543210 CZ CY = FalseSym0-      TFHelper_0123456789876543210 CZ CZ = TrueSym0-    type TFHelper_0123456789876543210Sym0 :: (~>) AChar ((~>) AChar Bool)-    data TFHelper_0123456789876543210Sym0 :: (~>) AChar ((~>) AChar Bool)-      where-        TFHelper_0123456789876543210Sym0KindInference :: SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>-                                                         TFHelper_0123456789876543210Sym0 a0123456789876543210-    type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210-    instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where-      suppressUnusedWarnings-        = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())-    type TFHelper_0123456789876543210Sym1 :: AChar -> (~>) AChar Bool-    data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: AChar) :: (~>) AChar Bool-      where-        TFHelper_0123456789876543210Sym1KindInference :: SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>-                                                         TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210-    type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where-      suppressUnusedWarnings-        = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())-    type TFHelper_0123456789876543210Sym2 :: AChar -> AChar -> Bool-    type family TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: AChar) (a0123456789876543210 :: AChar) :: Bool where-      TFHelper_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210-    instance PEq AChar where-      type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a-    sLookup ::-      forall (t :: [AChar]) (t :: Schema).-      Sing t -> Sing t -> Sing (Apply (Apply LookupSym0 t) t :: U)-    sOccurs ::-      forall (t :: [AChar]) (t :: Schema).-      Sing t -> Sing t -> Sing (Apply (Apply OccursSym0 t) t :: Bool)-    sDisjoint ::-      forall (t :: Schema) (t :: Schema).-      Sing t -> Sing t -> Sing (Apply (Apply DisjointSym0 t) t :: Bool)-    sAttrNotIn ::-      forall (t :: Attribute) (t :: Schema).-      Sing t -> Sing t -> Sing (Apply (Apply AttrNotInSym0 t) t :: Bool)-    sAppend ::-      forall (t :: Schema) (t :: Schema).-      Sing t -> Sing t -> Sing (Apply (Apply AppendSym0 t) t :: Schema)-    sLookup _ (SSch SNil) = sUndefined-    sLookup-      (sName :: Sing name)-      (SSch (SCons (SAttr (sName' :: Sing name') (sU :: Sing u))-                   (sAttrs :: Sing attrs)))-      = let-          sScrutinee_0123456789876543210 ::-            Sing @_ (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs)-          sScrutinee_0123456789876543210-            = (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sName))-                sName'-        in-          (GHC.Base.id-             @(Sing (Case_0123456789876543210 name name' u attrs (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs) :: U)))-            (case sScrutinee_0123456789876543210 of-               STrue -> sU-               SFalse-                 -> (applySing ((applySing ((singFun2 @LookupSym0) sLookup)) sName))-                      ((applySing ((singFun1 @SchSym0) SSch)) sAttrs))-    sOccurs _ (SSch SNil) = SFalse-    sOccurs-      (sName :: Sing name)-      (SSch (SCons (SAttr (sName' :: Sing name') _)-                   (sAttrs :: Sing attrs)))-      = (applySing-           ((applySing ((singFun2 @(||@#@$)) (%||)))-              ((applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sName))-                 sName')))-          ((applySing ((applySing ((singFun2 @OccursSym0) sOccurs)) sName))-             ((applySing ((singFun1 @SchSym0) SSch)) sAttrs))-    sDisjoint (SSch SNil) _ = STrue-    sDisjoint-      (SSch (SCons (sH :: Sing h) (sT :: Sing t)))-      (sS :: Sing s)-      = (applySing-           ((applySing ((singFun2 @(&&@#@$)) (%&&)))-              ((applySing-                  ((applySing ((singFun2 @AttrNotInSym0) sAttrNotIn)) sH))-                 sS)))-          ((applySing-              ((applySing ((singFun2 @DisjointSym0) sDisjoint))-                 ((applySing ((singFun1 @SchSym0) SSch)) sT)))-             sS)-    sAttrNotIn _ (SSch SNil) = STrue-    sAttrNotIn-      (SAttr (sName :: Sing name) (sU :: Sing u))-      (SSch (SCons (SAttr (sName' :: Sing name') _) (sT :: Sing t)))-      = (applySing-           ((applySing ((singFun2 @(&&@#@$)) (%&&)))-              ((applySing ((applySing ((singFun2 @(/=@#@$)) (%/=))) sName))-                 sName')))-          ((applySing-              ((applySing ((singFun2 @AttrNotInSym0) sAttrNotIn))-                 ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sName)) sU)))-             ((applySing ((singFun1 @SchSym0) SSch)) sT))-    sAppend (SSch (sS1 :: Sing s1)) (SSch (sS2 :: Sing s2))-      = (applySing ((singFun1 @SchSym0) SSch))-          ((applySing ((applySing ((singFun2 @(++@#@$)) (%++))) sS1)) sS2)-    instance SingI (LookupSym0 :: (~>) [AChar] ((~>) Schema U)) where-      sing = (singFun2 @LookupSym0) sLookup-    instance SingI d =>-             SingI (LookupSym1 (d :: [AChar]) :: (~>) Schema U) where-      sing = (singFun1 @(LookupSym1 (d :: [AChar]))) (sLookup (sing @d))-    instance SingI (OccursSym0 :: (~>) [AChar] ((~>) Schema Bool)) where-      sing = (singFun2 @OccursSym0) sOccurs-    instance SingI d =>-             SingI (OccursSym1 (d :: [AChar]) :: (~>) Schema Bool) where-      sing = (singFun1 @(OccursSym1 (d :: [AChar]))) (sOccurs (sing @d))-    instance SingI (DisjointSym0 :: (~>) Schema ((~>) Schema Bool)) where-      sing = (singFun2 @DisjointSym0) sDisjoint-    instance SingI d =>-             SingI (DisjointSym1 (d :: Schema) :: (~>) Schema Bool) where-      sing-        = (singFun1 @(DisjointSym1 (d :: Schema))) (sDisjoint (sing @d))-    instance SingI (AttrNotInSym0 :: (~>) Attribute ((~>) Schema Bool)) where-      sing = (singFun2 @AttrNotInSym0) sAttrNotIn-    instance SingI d =>-             SingI (AttrNotInSym1 (d :: Attribute) :: (~>) Schema Bool) where-      sing-        = (singFun1 @(AttrNotInSym1 (d :: Attribute)))-            (sAttrNotIn (sing @d))-    instance SingI (AppendSym0 :: (~>) Schema ((~>) Schema Schema)) where-      sing = (singFun2 @AppendSym0) sAppend-    instance SingI d =>-             SingI (AppendSym1 (d :: Schema) :: (~>) Schema Schema) where-      sing = (singFun1 @(AppendSym1 (d :: Schema))) (sAppend (sing @d))-    data SU :: U -> Type-      where-        SBOOL :: SU (BOOL :: U)-        SSTRING :: SU (STRING :: U)-        SNAT :: SU (NAT :: U)-        SVEC :: forall (n :: U) (n :: Nat).-                (Sing n) -> (Sing n) -> SU (VEC n n :: U)-    type instance Sing @U = SU-    instance SingKind U where-      type Demote 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 :: Demote U) (b :: Demote Nat))-        = case-              ((,) (toSing b :: SomeSing U)) (toSing b :: SomeSing Nat)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SVEC c) c) }-    data SAChar :: AChar -> Type-      where-        SCA :: SAChar (CA :: AChar)-        SCB :: SAChar (CB :: AChar)-        SCC :: SAChar (CC :: AChar)-        SCD :: SAChar (CD :: AChar)-        SCE :: SAChar (CE :: AChar)-        SCF :: SAChar (CF :: AChar)-        SCG :: SAChar (CG :: AChar)-        SCH :: SAChar (CH :: AChar)-        SCI :: SAChar (CI :: AChar)-        SCJ :: SAChar (CJ :: AChar)-        SCK :: SAChar (CK :: AChar)-        SCL :: SAChar (CL :: AChar)-        SCM :: SAChar (CM :: AChar)-        SCN :: SAChar (CN :: AChar)-        SCO :: SAChar (CO :: AChar)-        SCP :: SAChar (CP :: AChar)-        SCQ :: SAChar (CQ :: AChar)-        SCR :: SAChar (CR :: AChar)-        SCS :: SAChar (CS :: AChar)-        SCT :: SAChar (CT :: AChar)-        SCU :: SAChar (CU :: AChar)-        SCV :: SAChar (CV :: AChar)-        SCW :: SAChar (CW :: AChar)-        SCX :: SAChar (CX :: AChar)-        SCY :: SAChar (CY :: AChar)-        SCZ :: SAChar (CZ :: AChar)-    type instance Sing @AChar = SAChar-    instance SingKind AChar where-      type Demote 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-    data SAttribute :: Attribute -> Type-      where-        SAttr :: forall (n :: [AChar]) (n :: U).-                 (Sing n) -> (Sing n) -> SAttribute (Attr n n :: Attribute)-    type instance Sing @Attribute = SAttribute-    instance SingKind Attribute where-      type Demote Attribute = Attribute-      fromSing (SAttr b b) = (Attr (fromSing b)) (fromSing b)-      toSing (Attr (b :: Demote [AChar]) (b :: Demote U))-        = case-              ((,) (toSing b :: SomeSing [AChar])) (toSing b :: SomeSing U)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SAttr c) c) }-    data SSchema :: Schema -> Type-      where-        SSch :: forall (n :: [Attribute]).-                (Sing n) -> SSchema (Sch n :: Schema)-    type instance Sing @Schema = SSchema-    instance SingKind Schema where-      type Demote Schema = Schema-      fromSing (SSch b) = Sch (fromSing b)-      toSing (Sch (b :: Demote [Attribute]))-        = case toSing b :: SomeSing [Attribute] of {-            SomeSing c -> SomeSing (SSch c) }-    instance (SEq U, SEq Nat) => SEq U where-      (%==) ::-        forall (t1 :: U) (t2 :: U).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun U ((~>) U Bool)-                                              -> Type) t1) t2)-      (%==) 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 (sA_0123456789876543210 :: Sing a_0123456789876543210)-              (sA_0123456789876543210 :: Sing a_0123456789876543210))-        (SVEC (sB_0123456789876543210 :: Sing b_0123456789876543210)-              (sB_0123456789876543210 :: Sing b_0123456789876543210))-        = (applySing-             ((applySing ((singFun2 @(&&@#@$)) (%&&)))-                ((applySing-                    ((applySing ((singFun2 @(==@#@$)) (%==))) sA_0123456789876543210))-                   sB_0123456789876543210)))-            ((applySing-                ((applySing ((singFun2 @(==@#@$)) (%==))) sA_0123456789876543210))-               sB_0123456789876543210)-    instance (SShow U, SShow Nat) => SShow U where-      sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: U) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) U ((~>) Symbol Symbol))-                                                             -> Type) t1) t2) t3)-      sShowsPrec-        _-        SBOOL-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "BOOL")))-            sA_0123456789876543210-      sShowsPrec-        _-        SSTRING-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "STRING")))-            sA_0123456789876543210-      sShowsPrec-        _-        SNAT-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "NAT")))-            sA_0123456789876543210-      sShowsPrec-        (sP_0123456789876543210 :: Sing p_0123456789876543210)-        (SVEC (sArg_0123456789876543210 :: Sing arg_0123456789876543210)-              (sArg_0123456789876543210 :: Sing arg_0123456789876543210))-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing-                 ((applySing ((singFun3 @ShowParenSym0) sShowParen))-                    ((applySing-                        ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))-                       (sFromInteger (sing :: Sing 10)))))-                ((applySing-                    ((applySing ((singFun3 @(.@#@$)) (%.)))-                       ((applySing ((singFun2 @ShowStringSym0) sShowString))-                          (sing :: Sing "VEC "))))-                   ((applySing-                       ((applySing ((singFun3 @(.@#@$)) (%.)))-                          ((applySing-                              ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))-                                 (sFromInteger (sing :: Sing 11))))-                             sArg_0123456789876543210)))-                      ((applySing-                          ((applySing ((singFun3 @(.@#@$)) (%.)))-                             ((singFun1 @ShowSpaceSym0) sShowSpace)))-                         ((applySing-                             ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))-                                (sFromInteger (sing :: Sing 11))))-                            sArg_0123456789876543210))))))-            sA_0123456789876543210-    instance SShow AChar where-      sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: AChar) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) AChar ((~>) Symbol Symbol))-                                                             -> Type) t1) t2) t3)-      sShowsPrec-        _-        SCA-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CA")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCB-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CB")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCC-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CC")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCD-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CD")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCE-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CE")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCF-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CF")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCG-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CG")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCH-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CH")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCI-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CI")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCJ-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CJ")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCK-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CK")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCL-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CL")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCM-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CM")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCN-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CN")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCO-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CO")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCP-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CP")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCQ-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CQ")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCR-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CR")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCS-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CS")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCT-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CT")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCU-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CU")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCV-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CV")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCW-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CW")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCX-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CX")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCY-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CY")))-            sA_0123456789876543210-      sShowsPrec-        _-        SCZ-        (sA_0123456789876543210 :: Sing a_0123456789876543210)-        = (applySing-             ((applySing ((singFun2 @ShowStringSym0) sShowString))-                (sing :: Sing "CZ")))-            sA_0123456789876543210-    instance SEq AChar where-      (%==) ::-        forall (t1 :: AChar) (t2 :: AChar).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun AChar ((~>) AChar Bool)-                                              -> Type) t1) t2)-      (%==) 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 U, SDecide Nat) => SDecide U where-      (%~) SBOOL SBOOL = Proved Refl-      (%~) SBOOL SSTRING = Disproved (\ x -> case x of)-      (%~) SBOOL SNAT = Disproved (\ x -> case x of)-      (%~) SBOOL (SVEC _ _) = Disproved (\ x -> case x of)-      (%~) SSTRING SBOOL = Disproved (\ x -> case x of)-      (%~) SSTRING SSTRING = Proved Refl-      (%~) SSTRING SNAT = Disproved (\ x -> case x of)-      (%~) SSTRING (SVEC _ _) = Disproved (\ x -> case x of)-      (%~) SNAT SBOOL = Disproved (\ x -> case x of)-      (%~) SNAT SSTRING = Disproved (\ x -> case x of)-      (%~) SNAT SNAT = Proved Refl-      (%~) SNAT (SVEC _ _) = Disproved (\ x -> case x of)-      (%~) (SVEC _ _) SBOOL = Disproved (\ x -> case x of)-      (%~) (SVEC _ _) SSTRING = Disproved (\ x -> case x of)-      (%~) (SVEC _ _) SNAT = Disproved (\ x -> case x of)-      (%~) (SVEC a a) (SVEC b b)-        = case ((,) (((%~) a) b)) (((%~) a) b) of-            (,) (Proved Refl) (Proved Refl) -> Proved Refl-            (,) (Disproved contra) _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })-            (,) _ (Disproved contra)-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })-    instance (SDecide U, SDecide Nat) =>-             Data.Type.Equality.TestEquality (SU :: U -> Type) where-      Data.Type.Equality.testEquality-        = Data.Singletons.Decide.decideEquality-    instance (SDecide U, SDecide Nat) =>-             Data.Type.Coercion.TestCoercion (SU :: U -> Type) where-      Data.Type.Coercion.testCoercion-        = Data.Singletons.Decide.decideCoercion-    instance SDecide AChar where-      (%~) SCA SCA = Proved Refl-      (%~) SCA SCB = Disproved (\ x -> case x of)-      (%~) SCA SCC = Disproved (\ x -> case x of)-      (%~) SCA SCD = Disproved (\ x -> case x of)-      (%~) SCA SCE = Disproved (\ x -> case x of)-      (%~) SCA SCF = Disproved (\ x -> case x of)-      (%~) SCA SCG = Disproved (\ x -> case x of)-      (%~) SCA SCH = Disproved (\ x -> case x of)-      (%~) SCA SCI = Disproved (\ x -> case x of)-      (%~) SCA SCJ = Disproved (\ x -> case x of)-      (%~) SCA SCK = Disproved (\ x -> case x of)-      (%~) SCA SCL = Disproved (\ x -> case x of)-      (%~) SCA SCM = Disproved (\ x -> case x of)-      (%~) SCA SCN = Disproved (\ x -> case x of)-      (%~) SCA SCO = Disproved (\ x -> case x of)-      (%~) SCA SCP = Disproved (\ x -> case x of)-      (%~) SCA SCQ = Disproved (\ x -> case x of)-      (%~) SCA SCR = Disproved (\ x -> case x of)-      (%~) SCA SCS = Disproved (\ x -> case x of)-      (%~) SCA SCT = Disproved (\ x -> case x of)-      (%~) SCA SCU = Disproved (\ x -> case x of)-      (%~) SCA SCV = Disproved (\ x -> case x of)-      (%~) SCA SCW = Disproved (\ x -> case x of)-      (%~) SCA SCX = Disproved (\ x -> case x of)-      (%~) SCA SCY = Disproved (\ x -> case x of)-      (%~) SCA SCZ = Disproved (\ x -> case x of)-      (%~) SCB SCA = Disproved (\ x -> case x of)-      (%~) SCB SCB = Proved Refl-      (%~) SCB SCC = Disproved (\ x -> case x of)-      (%~) SCB SCD = Disproved (\ x -> case x of)-      (%~) SCB SCE = Disproved (\ x -> case x of)-      (%~) SCB SCF = Disproved (\ x -> case x of)-      (%~) SCB SCG = Disproved (\ x -> case x of)-      (%~) SCB SCH = Disproved (\ x -> case x of)-      (%~) SCB SCI = Disproved (\ x -> case x of)-      (%~) SCB SCJ = Disproved (\ x -> case x of)-      (%~) SCB SCK = Disproved (\ x -> case x of)-      (%~) SCB SCL = Disproved (\ x -> case x of)-      (%~) SCB SCM = Disproved (\ x -> case x of)-      (%~) SCB SCN = Disproved (\ x -> case x of)-      (%~) SCB SCO = Disproved (\ x -> case x of)-      (%~) SCB SCP = Disproved (\ x -> case x of)-      (%~) SCB SCQ = Disproved (\ x -> case x of)-      (%~) SCB SCR = Disproved (\ x -> case x of)-      (%~) SCB SCS = Disproved (\ x -> case x of)-      (%~) SCB SCT = Disproved (\ x -> case x of)-      (%~) SCB SCU = Disproved (\ x -> case x of)-      (%~) SCB SCV = Disproved (\ x -> case x of)-      (%~) SCB SCW = Disproved (\ x -> case x of)-      (%~) SCB SCX = Disproved (\ x -> case x of)-      (%~) SCB SCY = Disproved (\ x -> case x of)-      (%~) SCB SCZ = Disproved (\ x -> case x of)-      (%~) SCC SCA = Disproved (\ x -> case x of)-      (%~) SCC SCB = Disproved (\ x -> case x of)-      (%~) SCC SCC = Proved Refl-      (%~) SCC SCD = Disproved (\ x -> case x of)-      (%~) SCC SCE = Disproved (\ x -> case x of)-      (%~) SCC SCF = Disproved (\ x -> case x of)-      (%~) SCC SCG = Disproved (\ x -> case x of)-      (%~) SCC SCH = Disproved (\ x -> case x of)-      (%~) SCC SCI = Disproved (\ x -> case x of)-      (%~) SCC SCJ = Disproved (\ x -> case x of)-      (%~) SCC SCK = Disproved (\ x -> case x of)-      (%~) SCC SCL = Disproved (\ x -> case x of)-      (%~) SCC SCM = Disproved (\ x -> case x of)-      (%~) SCC SCN = Disproved (\ x -> case x of)-      (%~) SCC SCO = Disproved (\ x -> case x of)-      (%~) SCC SCP = Disproved (\ x -> case x of)-      (%~) SCC SCQ = Disproved (\ x -> case x of)-      (%~) SCC SCR = Disproved (\ x -> case x of)-      (%~) SCC SCS = Disproved (\ x -> case x of)-      (%~) SCC SCT = Disproved (\ x -> case x of)-      (%~) SCC SCU = Disproved (\ x -> case x of)-      (%~) SCC SCV = Disproved (\ x -> case x of)-      (%~) SCC SCW = Disproved (\ x -> case x of)-      (%~) SCC SCX = Disproved (\ x -> case x of)-      (%~) SCC SCY = Disproved (\ x -> case x of)-      (%~) SCC SCZ = Disproved (\ x -> case x of)-      (%~) SCD SCA = Disproved (\ x -> case x of)-      (%~) SCD SCB = Disproved (\ x -> case x of)-      (%~) SCD SCC = Disproved (\ x -> case x of)-      (%~) SCD SCD = Proved Refl-      (%~) SCD SCE = Disproved (\ x -> case x of)-      (%~) SCD SCF = Disproved (\ x -> case x of)-      (%~) SCD SCG = Disproved (\ x -> case x of)-      (%~) SCD SCH = Disproved (\ x -> case x of)-      (%~) SCD SCI = Disproved (\ x -> case x of)-      (%~) SCD SCJ = Disproved (\ x -> case x of)-      (%~) SCD SCK = Disproved (\ x -> case x of)-      (%~) SCD SCL = Disproved (\ x -> case x of)-      (%~) SCD SCM = Disproved (\ x -> case x of)-      (%~) SCD SCN = Disproved (\ x -> case x of)-      (%~) SCD SCO = Disproved (\ x -> case x of)-      (%~) SCD SCP = Disproved (\ x -> case x of)-      (%~) SCD SCQ = Disproved (\ x -> case x of)-      (%~) SCD SCR = Disproved (\ x -> case x of)-      (%~) SCD SCS = Disproved (\ x -> case x of)-      (%~) SCD SCT = Disproved (\ x -> case x of)-      (%~) SCD SCU = Disproved (\ x -> case x of)-      (%~) SCD SCV = Disproved (\ x -> case x of)-      (%~) SCD SCW = Disproved (\ x -> case x of)-      (%~) SCD SCX = Disproved (\ x -> case x of)-      (%~) SCD SCY = Disproved (\ x -> case x of)-      (%~) SCD SCZ = Disproved (\ x -> case x of)-      (%~) SCE SCA = Disproved (\ x -> case x of)-      (%~) SCE SCB = Disproved (\ x -> case x of)-      (%~) SCE SCC = Disproved (\ x -> case x of)-      (%~) SCE SCD = Disproved (\ x -> case x of)-      (%~) SCE SCE = Proved Refl-      (%~) SCE SCF = Disproved (\ x -> case x of)-      (%~) SCE SCG = Disproved (\ x -> case x of)-      (%~) SCE SCH = Disproved (\ x -> case x of)-      (%~) SCE SCI = Disproved (\ x -> case x of)-      (%~) SCE SCJ = Disproved (\ x -> case x of)-      (%~) SCE SCK = Disproved (\ x -> case x of)-      (%~) SCE SCL = Disproved (\ x -> case x of)-      (%~) SCE SCM = Disproved (\ x -> case x of)-      (%~) SCE SCN = Disproved (\ x -> case x of)-      (%~) SCE SCO = Disproved (\ x -> case x of)-      (%~) SCE SCP = Disproved (\ x -> case x of)-      (%~) SCE SCQ = Disproved (\ x -> case x of)-      (%~) SCE SCR = Disproved (\ x -> case x of)-      (%~) SCE SCS = Disproved (\ x -> case x of)-      (%~) SCE SCT = Disproved (\ x -> case x of)-      (%~) SCE SCU = Disproved (\ x -> case x of)-      (%~) SCE SCV = Disproved (\ x -> case x of)-      (%~) SCE SCW = Disproved (\ x -> case x of)-      (%~) SCE SCX = Disproved (\ x -> case x of)-      (%~) SCE SCY = Disproved (\ x -> case x of)-      (%~) SCE SCZ = Disproved (\ x -> case x of)-      (%~) SCF SCA = Disproved (\ x -> case x of)-      (%~) SCF SCB = Disproved (\ x -> case x of)-      (%~) SCF SCC = Disproved (\ x -> case x of)-      (%~) SCF SCD = Disproved (\ x -> case x of)-      (%~) SCF SCE = Disproved (\ x -> case x of)-      (%~) SCF SCF = Proved Refl-      (%~) SCF SCG = Disproved (\ x -> case x of)-      (%~) SCF SCH = Disproved (\ x -> case x of)-      (%~) SCF SCI = Disproved (\ x -> case x of)-      (%~) SCF SCJ = Disproved (\ x -> case x of)-      (%~) SCF SCK = Disproved (\ x -> case x of)-      (%~) SCF SCL = Disproved (\ x -> case x of)-      (%~) SCF SCM = Disproved (\ x -> case x of)-      (%~) SCF SCN = Disproved (\ x -> case x of)-      (%~) SCF SCO = Disproved (\ x -> case x of)-      (%~) SCF SCP = Disproved (\ x -> case x of)-      (%~) SCF SCQ = Disproved (\ x -> case x of)-      (%~) SCF SCR = Disproved (\ x -> case x of)-      (%~) SCF SCS = Disproved (\ x -> case x of)-      (%~) SCF SCT = Disproved (\ x -> case x of)-      (%~) SCF SCU = Disproved (\ x -> case x of)-      (%~) SCF SCV = Disproved (\ x -> case x of)-      (%~) SCF SCW = Disproved (\ x -> case x of)-      (%~) SCF SCX = Disproved (\ x -> case x of)-      (%~) SCF SCY = Disproved (\ x -> case x of)-      (%~) SCF SCZ = Disproved (\ x -> case x of)-      (%~) SCG SCA = Disproved (\ x -> case x of)-      (%~) SCG SCB = Disproved (\ x -> case x of)-      (%~) SCG SCC = Disproved (\ x -> case x of)-      (%~) SCG SCD = Disproved (\ x -> case x of)-      (%~) SCG SCE = Disproved (\ x -> case x of)-      (%~) SCG SCF = Disproved (\ x -> case x of)-      (%~) SCG SCG = Proved Refl-      (%~) SCG SCH = Disproved (\ x -> case x of)-      (%~) SCG SCI = Disproved (\ x -> case x of)-      (%~) SCG SCJ = Disproved (\ x -> case x of)-      (%~) SCG SCK = Disproved (\ x -> case x of)-      (%~) SCG SCL = Disproved (\ x -> case x of)-      (%~) SCG SCM = Disproved (\ x -> case x of)-      (%~) SCG SCN = Disproved (\ x -> case x of)-      (%~) SCG SCO = Disproved (\ x -> case x of)-      (%~) SCG SCP = Disproved (\ x -> case x of)-      (%~) SCG SCQ = Disproved (\ x -> case x of)-      (%~) SCG SCR = Disproved (\ x -> case x of)-      (%~) SCG SCS = Disproved (\ x -> case x of)-      (%~) SCG SCT = Disproved (\ x -> case x of)-      (%~) SCG SCU = Disproved (\ x -> case x of)-      (%~) SCG SCV = Disproved (\ x -> case x of)-      (%~) SCG SCW = Disproved (\ x -> case x of)-      (%~) SCG SCX = Disproved (\ x -> case x of)-      (%~) SCG SCY = Disproved (\ x -> case x of)-      (%~) SCG SCZ = Disproved (\ x -> case x of)-      (%~) SCH SCA = Disproved (\ x -> case x of)-      (%~) SCH SCB = Disproved (\ x -> case x of)-      (%~) SCH SCC = Disproved (\ x -> case x of)-      (%~) SCH SCD = Disproved (\ x -> case x of)-      (%~) SCH SCE = Disproved (\ x -> case x of)-      (%~) SCH SCF = Disproved (\ x -> case x of)-      (%~) SCH SCG = Disproved (\ x -> case x of)-      (%~) SCH SCH = Proved Refl-      (%~) SCH SCI = Disproved (\ x -> case x of)-      (%~) SCH SCJ = Disproved (\ x -> case x of)-      (%~) SCH SCK = Disproved (\ x -> case x of)-      (%~) SCH SCL = Disproved (\ x -> case x of)-      (%~) SCH SCM = Disproved (\ x -> case x of)-      (%~) SCH SCN = Disproved (\ x -> case x of)-      (%~) SCH SCO = Disproved (\ x -> case x of)-      (%~) SCH SCP = Disproved (\ x -> case x of)-      (%~) SCH SCQ = Disproved (\ x -> case x of)-      (%~) SCH SCR = Disproved (\ x -> case x of)-      (%~) SCH SCS = Disproved (\ x -> case x of)-      (%~) SCH SCT = Disproved (\ x -> case x of)-      (%~) SCH SCU = Disproved (\ x -> case x of)-      (%~) SCH SCV = Disproved (\ x -> case x of)-      (%~) SCH SCW = Disproved (\ x -> case x of)-      (%~) SCH SCX = Disproved (\ x -> case x of)-      (%~) SCH SCY = Disproved (\ x -> case x of)-      (%~) SCH SCZ = Disproved (\ x -> case x of)-      (%~) SCI SCA = Disproved (\ x -> case x of)-      (%~) SCI SCB = Disproved (\ x -> case x of)-      (%~) SCI SCC = Disproved (\ x -> case x of)-      (%~) SCI SCD = Disproved (\ x -> case x of)-      (%~) SCI SCE = Disproved (\ x -> case x of)-      (%~) SCI SCF = Disproved (\ x -> case x of)-      (%~) SCI SCG = Disproved (\ x -> case x of)-      (%~) SCI SCH = Disproved (\ x -> case x of)-      (%~) SCI SCI = Proved Refl-      (%~) SCI SCJ = Disproved (\ x -> case x of)-      (%~) SCI SCK = Disproved (\ x -> case x of)-      (%~) SCI SCL = Disproved (\ x -> case x of)-      (%~) SCI SCM = Disproved (\ x -> case x of)-      (%~) SCI SCN = Disproved (\ x -> case x of)-      (%~) SCI SCO = Disproved (\ x -> case x of)-      (%~) SCI SCP = Disproved (\ x -> case x of)-      (%~) SCI SCQ = Disproved (\ x -> case x of)-      (%~) SCI SCR = Disproved (\ x -> case x of)-      (%~) SCI SCS = Disproved (\ x -> case x of)-      (%~) SCI SCT = Disproved (\ x -> case x of)-      (%~) SCI SCU = Disproved (\ x -> case x of)-      (%~) SCI SCV = Disproved (\ x -> case x of)-      (%~) SCI SCW = Disproved (\ x -> case x of)-      (%~) SCI SCX = Disproved (\ x -> case x of)-      (%~) SCI SCY = Disproved (\ x -> case x of)-      (%~) SCI SCZ = Disproved (\ x -> case x of)-      (%~) SCJ SCA = Disproved (\ x -> case x of)-      (%~) SCJ SCB = Disproved (\ x -> case x of)-      (%~) SCJ SCC = Disproved (\ x -> case x of)-      (%~) SCJ SCD = Disproved (\ x -> case x of)-      (%~) SCJ SCE = Disproved (\ x -> case x of)-      (%~) SCJ SCF = Disproved (\ x -> case x of)-      (%~) SCJ SCG = Disproved (\ x -> case x of)-      (%~) SCJ SCH = Disproved (\ x -> case x of)-      (%~) SCJ SCI = Disproved (\ x -> case x of)-      (%~) SCJ SCJ = Proved Refl-      (%~) SCJ SCK = Disproved (\ x -> case x of)-      (%~) SCJ SCL = Disproved (\ x -> case x of)-      (%~) SCJ SCM = Disproved (\ x -> case x of)-      (%~) SCJ SCN = Disproved (\ x -> case x of)-      (%~) SCJ SCO = Disproved (\ x -> case x of)-      (%~) SCJ SCP = Disproved (\ x -> case x of)-      (%~) SCJ SCQ = Disproved (\ x -> case x of)-      (%~) SCJ SCR = Disproved (\ x -> case x of)-      (%~) SCJ SCS = Disproved (\ x -> case x of)-      (%~) SCJ SCT = Disproved (\ x -> case x of)-      (%~) SCJ SCU = Disproved (\ x -> case x of)-      (%~) SCJ SCV = Disproved (\ x -> case x of)-      (%~) SCJ SCW = Disproved (\ x -> case x of)-      (%~) SCJ SCX = Disproved (\ x -> case x of)-      (%~) SCJ SCY = Disproved (\ x -> case x of)-      (%~) SCJ SCZ = Disproved (\ x -> case x of)-      (%~) SCK SCA = Disproved (\ x -> case x of)-      (%~) SCK SCB = Disproved (\ x -> case x of)-      (%~) SCK SCC = Disproved (\ x -> case x of)-      (%~) SCK SCD = Disproved (\ x -> case x of)-      (%~) SCK SCE = Disproved (\ x -> case x of)-      (%~) SCK SCF = Disproved (\ x -> case x of)-      (%~) SCK SCG = Disproved (\ x -> case x of)-      (%~) SCK SCH = Disproved (\ x -> case x of)-      (%~) SCK SCI = Disproved (\ x -> case x of)-      (%~) SCK SCJ = Disproved (\ x -> case x of)-      (%~) SCK SCK = Proved Refl-      (%~) SCK SCL = Disproved (\ x -> case x of)-      (%~) SCK SCM = Disproved (\ x -> case x of)-      (%~) SCK SCN = Disproved (\ x -> case x of)-      (%~) SCK SCO = Disproved (\ x -> case x of)-      (%~) SCK SCP = Disproved (\ x -> case x of)-      (%~) SCK SCQ = Disproved (\ x -> case x of)-      (%~) SCK SCR = Disproved (\ x -> case x of)-      (%~) SCK SCS = Disproved (\ x -> case x of)-      (%~) SCK SCT = Disproved (\ x -> case x of)-      (%~) SCK SCU = Disproved (\ x -> case x of)-      (%~) SCK SCV = Disproved (\ x -> case x of)-      (%~) SCK SCW = Disproved (\ x -> case x of)-      (%~) SCK SCX = Disproved (\ x -> case x of)-      (%~) SCK SCY = Disproved (\ x -> case x of)-      (%~) SCK SCZ = Disproved (\ x -> case x of)-      (%~) SCL SCA = Disproved (\ x -> case x of)-      (%~) SCL SCB = Disproved (\ x -> case x of)-      (%~) SCL SCC = Disproved (\ x -> case x of)-      (%~) SCL SCD = Disproved (\ x -> case x of)-      (%~) SCL SCE = Disproved (\ x -> case x of)-      (%~) SCL SCF = Disproved (\ x -> case x of)-      (%~) SCL SCG = Disproved (\ x -> case x of)-      (%~) SCL SCH = Disproved (\ x -> case x of)-      (%~) SCL SCI = Disproved (\ x -> case x of)-      (%~) SCL SCJ = Disproved (\ x -> case x of)-      (%~) SCL SCK = Disproved (\ x -> case x of)-      (%~) SCL SCL = Proved Refl-      (%~) SCL SCM = Disproved (\ x -> case x of)-      (%~) SCL SCN = Disproved (\ x -> case x of)-      (%~) SCL SCO = Disproved (\ x -> case x of)-      (%~) SCL SCP = Disproved (\ x -> case x of)-      (%~) SCL SCQ = Disproved (\ x -> case x of)-      (%~) SCL SCR = Disproved (\ x -> case x of)-      (%~) SCL SCS = Disproved (\ x -> case x of)-      (%~) SCL SCT = Disproved (\ x -> case x of)-      (%~) SCL SCU = Disproved (\ x -> case x of)-      (%~) SCL SCV = Disproved (\ x -> case x of)-      (%~) SCL SCW = Disproved (\ x -> case x of)-      (%~) SCL SCX = Disproved (\ x -> case x of)-      (%~) SCL SCY = Disproved (\ x -> case x of)-      (%~) SCL SCZ = Disproved (\ x -> case x of)-      (%~) SCM SCA = Disproved (\ x -> case x of)-      (%~) SCM SCB = Disproved (\ x -> case x of)-      (%~) SCM SCC = Disproved (\ x -> case x of)-      (%~) SCM SCD = Disproved (\ x -> case x of)-      (%~) SCM SCE = Disproved (\ x -> case x of)-      (%~) SCM SCF = Disproved (\ x -> case x of)-      (%~) SCM SCG = Disproved (\ x -> case x of)-      (%~) SCM SCH = Disproved (\ x -> case x of)-      (%~) SCM SCI = Disproved (\ x -> case x of)-      (%~) SCM SCJ = Disproved (\ x -> case x of)-      (%~) SCM SCK = Disproved (\ x -> case x of)-      (%~) SCM SCL = Disproved (\ x -> case x of)-      (%~) SCM SCM = Proved Refl-      (%~) SCM SCN = Disproved (\ x -> case x of)-      (%~) SCM SCO = Disproved (\ x -> case x of)-      (%~) SCM SCP = Disproved (\ x -> case x of)-      (%~) SCM SCQ = Disproved (\ x -> case x of)-      (%~) SCM SCR = Disproved (\ x -> case x of)-      (%~) SCM SCS = Disproved (\ x -> case x of)-      (%~) SCM SCT = Disproved (\ x -> case x of)-      (%~) SCM SCU = Disproved (\ x -> case x of)-      (%~) SCM SCV = Disproved (\ x -> case x of)-      (%~) SCM SCW = Disproved (\ x -> case x of)-      (%~) SCM SCX = Disproved (\ x -> case x of)-      (%~) SCM SCY = Disproved (\ x -> case x of)-      (%~) SCM SCZ = Disproved (\ x -> case x of)-      (%~) SCN SCA = Disproved (\ x -> case x of)-      (%~) SCN SCB = Disproved (\ x -> case x of)-      (%~) SCN SCC = Disproved (\ x -> case x of)-      (%~) SCN SCD = Disproved (\ x -> case x of)-      (%~) SCN SCE = Disproved (\ x -> case x of)-      (%~) SCN SCF = Disproved (\ x -> case x of)-      (%~) SCN SCG = Disproved (\ x -> case x of)-      (%~) SCN SCH = Disproved (\ x -> case x of)-      (%~) SCN SCI = Disproved (\ x -> case x of)-      (%~) SCN SCJ = Disproved (\ x -> case x of)-      (%~) SCN SCK = Disproved (\ x -> case x of)-      (%~) SCN SCL = Disproved (\ x -> case x of)-      (%~) SCN SCM = Disproved (\ x -> case x of)-      (%~) SCN SCN = Proved Refl-      (%~) SCN SCO = Disproved (\ x -> case x of)-      (%~) SCN SCP = Disproved (\ x -> case x of)-      (%~) SCN SCQ = Disproved (\ x -> case x of)-      (%~) SCN SCR = Disproved (\ x -> case x of)-      (%~) SCN SCS = Disproved (\ x -> case x of)-      (%~) SCN SCT = Disproved (\ x -> case x of)-      (%~) SCN SCU = Disproved (\ x -> case x of)-      (%~) SCN SCV = Disproved (\ x -> case x of)-      (%~) SCN SCW = Disproved (\ x -> case x of)-      (%~) SCN SCX = Disproved (\ x -> case x of)-      (%~) SCN SCY = Disproved (\ x -> case x of)-      (%~) SCN SCZ = Disproved (\ x -> case x of)-      (%~) SCO SCA = Disproved (\ x -> case x of)-      (%~) SCO SCB = Disproved (\ x -> case x of)-      (%~) SCO SCC = Disproved (\ x -> case x of)-      (%~) SCO SCD = Disproved (\ x -> case x of)-      (%~) SCO SCE = Disproved (\ x -> case x of)-      (%~) SCO SCF = Disproved (\ x -> case x of)-      (%~) SCO SCG = Disproved (\ x -> case x of)-      (%~) SCO SCH = Disproved (\ x -> case x of)-      (%~) SCO SCI = Disproved (\ x -> case x of)-      (%~) SCO SCJ = Disproved (\ x -> case x of)-      (%~) SCO SCK = Disproved (\ x -> case x of)-      (%~) SCO SCL = Disproved (\ x -> case x of)-      (%~) SCO SCM = Disproved (\ x -> case x of)-      (%~) SCO SCN = Disproved (\ x -> case x of)-      (%~) SCO SCO = Proved Refl-      (%~) SCO SCP = Disproved (\ x -> case x of)-      (%~) SCO SCQ = Disproved (\ x -> case x of)-      (%~) SCO SCR = Disproved (\ x -> case x of)-      (%~) SCO SCS = Disproved (\ x -> case x of)-      (%~) SCO SCT = Disproved (\ x -> case x of)-      (%~) SCO SCU = Disproved (\ x -> case x of)-      (%~) SCO SCV = Disproved (\ x -> case x of)-      (%~) SCO SCW = Disproved (\ x -> case x of)-      (%~) SCO SCX = Disproved (\ x -> case x of)-      (%~) SCO SCY = Disproved (\ x -> case x of)-      (%~) SCO SCZ = Disproved (\ x -> case x of)-      (%~) SCP SCA = Disproved (\ x -> case x of)-      (%~) SCP SCB = Disproved (\ x -> case x of)-      (%~) SCP SCC = Disproved (\ x -> case x of)-      (%~) SCP SCD = Disproved (\ x -> case x of)-      (%~) SCP SCE = Disproved (\ x -> case x of)-      (%~) SCP SCF = Disproved (\ x -> case x of)-      (%~) SCP SCG = Disproved (\ x -> case x of)-      (%~) SCP SCH = Disproved (\ x -> case x of)-      (%~) SCP SCI = Disproved (\ x -> case x of)-      (%~) SCP SCJ = Disproved (\ x -> case x of)-      (%~) SCP SCK = Disproved (\ x -> case x of)-      (%~) SCP SCL = Disproved (\ x -> case x of)-      (%~) SCP SCM = Disproved (\ x -> case x of)-      (%~) SCP SCN = Disproved (\ x -> case x of)-      (%~) SCP SCO = Disproved (\ x -> case x of)-      (%~) SCP SCP = Proved Refl-      (%~) SCP SCQ = Disproved (\ x -> case x of)-      (%~) SCP SCR = Disproved (\ x -> case x of)-      (%~) SCP SCS = Disproved (\ x -> case x of)-      (%~) SCP SCT = Disproved (\ x -> case x of)-      (%~) SCP SCU = Disproved (\ x -> case x of)-      (%~) SCP SCV = Disproved (\ x -> case x of)-      (%~) SCP SCW = Disproved (\ x -> case x of)-      (%~) SCP SCX = Disproved (\ x -> case x of)-      (%~) SCP SCY = Disproved (\ x -> case x of)-      (%~) SCP SCZ = Disproved (\ x -> case x of)-      (%~) SCQ SCA = Disproved (\ x -> case x of)-      (%~) SCQ SCB = Disproved (\ x -> case x of)-      (%~) SCQ SCC = Disproved (\ x -> case x of)-      (%~) SCQ SCD = Disproved (\ x -> case x of)-      (%~) SCQ SCE = Disproved (\ x -> case x of)-      (%~) SCQ SCF = Disproved (\ x -> case x of)-      (%~) SCQ SCG = Disproved (\ x -> case x of)-      (%~) SCQ SCH = Disproved (\ x -> case x of)-      (%~) SCQ SCI = Disproved (\ x -> case x of)-      (%~) SCQ SCJ = Disproved (\ x -> case x of)-      (%~) SCQ SCK = Disproved (\ x -> case x of)-      (%~) SCQ SCL = Disproved (\ x -> case x of)-      (%~) SCQ SCM = Disproved (\ x -> case x of)-      (%~) SCQ SCN = Disproved (\ x -> case x of)-      (%~) SCQ SCO = Disproved (\ x -> case x of)-      (%~) SCQ SCP = Disproved (\ x -> case x of)-      (%~) SCQ SCQ = Proved Refl-      (%~) SCQ SCR = Disproved (\ x -> case x of)-      (%~) SCQ SCS = Disproved (\ x -> case x of)-      (%~) SCQ SCT = Disproved (\ x -> case x of)-      (%~) SCQ SCU = Disproved (\ x -> case x of)-      (%~) SCQ SCV = Disproved (\ x -> case x of)-      (%~) SCQ SCW = Disproved (\ x -> case x of)-      (%~) SCQ SCX = Disproved (\ x -> case x of)-      (%~) SCQ SCY = Disproved (\ x -> case x of)-      (%~) SCQ SCZ = Disproved (\ x -> case x of)-      (%~) SCR SCA = Disproved (\ x -> case x of)-      (%~) SCR SCB = Disproved (\ x -> case x of)-      (%~) SCR SCC = Disproved (\ x -> case x of)-      (%~) SCR SCD = Disproved (\ x -> case x of)-      (%~) SCR SCE = Disproved (\ x -> case x of)-      (%~) SCR SCF = Disproved (\ x -> case x of)-      (%~) SCR SCG = Disproved (\ x -> case x of)-      (%~) SCR SCH = Disproved (\ x -> case x of)-      (%~) SCR SCI = Disproved (\ x -> case x of)-      (%~) SCR SCJ = Disproved (\ x -> case x of)-      (%~) SCR SCK = Disproved (\ x -> case x of)-      (%~) SCR SCL = Disproved (\ x -> case x of)-      (%~) SCR SCM = Disproved (\ x -> case x of)-      (%~) SCR SCN = Disproved (\ x -> case x of)-      (%~) SCR SCO = Disproved (\ x -> case x of)-      (%~) SCR SCP = Disproved (\ x -> case x of)-      (%~) SCR SCQ = Disproved (\ x -> case x of)-      (%~) SCR SCR = Proved Refl-      (%~) SCR SCS = Disproved (\ x -> case x of)-      (%~) SCR SCT = Disproved (\ x -> case x of)-      (%~) SCR SCU = Disproved (\ x -> case x of)-      (%~) SCR SCV = Disproved (\ x -> case x of)-      (%~) SCR SCW = Disproved (\ x -> case x of)-      (%~) SCR SCX = Disproved (\ x -> case x of)-      (%~) SCR SCY = Disproved (\ x -> case x of)-      (%~) SCR SCZ = Disproved (\ x -> case x of)-      (%~) SCS SCA = Disproved (\ x -> case x of)-      (%~) SCS SCB = Disproved (\ x -> case x of)-      (%~) SCS SCC = Disproved (\ x -> case x of)-      (%~) SCS SCD = Disproved (\ x -> case x of)-      (%~) SCS SCE = Disproved (\ x -> case x of)-      (%~) SCS SCF = Disproved (\ x -> case x of)-      (%~) SCS SCG = Disproved (\ x -> case x of)-      (%~) SCS SCH = Disproved (\ x -> case x of)-      (%~) SCS SCI = Disproved (\ x -> case x of)-      (%~) SCS SCJ = Disproved (\ x -> case x of)-      (%~) SCS SCK = Disproved (\ x -> case x of)-      (%~) SCS SCL = Disproved (\ x -> case x of)-      (%~) SCS SCM = Disproved (\ x -> case x of)-      (%~) SCS SCN = Disproved (\ x -> case x of)-      (%~) SCS SCO = Disproved (\ x -> case x of)-      (%~) SCS SCP = Disproved (\ x -> case x of)-      (%~) SCS SCQ = Disproved (\ x -> case x of)-      (%~) SCS SCR = Disproved (\ x -> case x of)-      (%~) SCS SCS = Proved Refl-      (%~) SCS SCT = Disproved (\ x -> case x of)-      (%~) SCS SCU = Disproved (\ x -> case x of)-      (%~) SCS SCV = Disproved (\ x -> case x of)-      (%~) SCS SCW = Disproved (\ x -> case x of)-      (%~) SCS SCX = Disproved (\ x -> case x of)-      (%~) SCS SCY = Disproved (\ x -> case x of)-      (%~) SCS SCZ = Disproved (\ x -> case x of)-      (%~) SCT SCA = Disproved (\ x -> case x of)-      (%~) SCT SCB = Disproved (\ x -> case x of)-      (%~) SCT SCC = Disproved (\ x -> case x of)-      (%~) SCT SCD = Disproved (\ x -> case x of)-      (%~) SCT SCE = Disproved (\ x -> case x of)-      (%~) SCT SCF = Disproved (\ x -> case x of)-      (%~) SCT SCG = Disproved (\ x -> case x of)-      (%~) SCT SCH = Disproved (\ x -> case x of)-      (%~) SCT SCI = Disproved (\ x -> case x of)-      (%~) SCT SCJ = Disproved (\ x -> case x of)-      (%~) SCT SCK = Disproved (\ x -> case x of)-      (%~) SCT SCL = Disproved (\ x -> case x of)-      (%~) SCT SCM = Disproved (\ x -> case x of)-      (%~) SCT SCN = Disproved (\ x -> case x of)-      (%~) SCT SCO = Disproved (\ x -> case x of)-      (%~) SCT SCP = Disproved (\ x -> case x of)-      (%~) SCT SCQ = Disproved (\ x -> case x of)-      (%~) SCT SCR = Disproved (\ x -> case x of)-      (%~) SCT SCS = Disproved (\ x -> case x of)-      (%~) SCT SCT = Proved Refl-      (%~) SCT SCU = Disproved (\ x -> case x of)-      (%~) SCT SCV = Disproved (\ x -> case x of)-      (%~) SCT SCW = Disproved (\ x -> case x of)-      (%~) SCT SCX = Disproved (\ x -> case x of)-      (%~) SCT SCY = Disproved (\ x -> case x of)-      (%~) SCT SCZ = Disproved (\ x -> case x of)-      (%~) SCU SCA = Disproved (\ x -> case x of)-      (%~) SCU SCB = Disproved (\ x -> case x of)-      (%~) SCU SCC = Disproved (\ x -> case x of)-      (%~) SCU SCD = Disproved (\ x -> case x of)-      (%~) SCU SCE = Disproved (\ x -> case x of)-      (%~) SCU SCF = Disproved (\ x -> case x of)-      (%~) SCU SCG = Disproved (\ x -> case x of)-      (%~) SCU SCH = Disproved (\ x -> case x of)-      (%~) SCU SCI = Disproved (\ x -> case x of)-      (%~) SCU SCJ = Disproved (\ x -> case x of)-      (%~) SCU SCK = Disproved (\ x -> case x of)-      (%~) SCU SCL = Disproved (\ x -> case x of)-      (%~) SCU SCM = Disproved (\ x -> case x of)-      (%~) SCU SCN = Disproved (\ x -> case x of)-      (%~) SCU SCO = Disproved (\ x -> case x of)-      (%~) SCU SCP = Disproved (\ x -> case x of)-      (%~) SCU SCQ = Disproved (\ x -> case x of)-      (%~) SCU SCR = Disproved (\ x -> case x of)-      (%~) SCU SCS = Disproved (\ x -> case x of)-      (%~) SCU SCT = Disproved (\ x -> case x of)-      (%~) SCU SCU = Proved Refl-      (%~) SCU SCV = Disproved (\ x -> case x of)-      (%~) SCU SCW = Disproved (\ x -> case x of)-      (%~) SCU SCX = Disproved (\ x -> case x of)-      (%~) SCU SCY = Disproved (\ x -> case x of)-      (%~) SCU SCZ = Disproved (\ x -> case x of)-      (%~) SCV SCA = Disproved (\ x -> case x of)-      (%~) SCV SCB = Disproved (\ x -> case x of)-      (%~) SCV SCC = Disproved (\ x -> case x of)-      (%~) SCV SCD = Disproved (\ x -> case x of)-      (%~) SCV SCE = Disproved (\ x -> case x of)-      (%~) SCV SCF = Disproved (\ x -> case x of)-      (%~) SCV SCG = Disproved (\ x -> case x of)-      (%~) SCV SCH = Disproved (\ x -> case x of)-      (%~) SCV SCI = Disproved (\ x -> case x of)-      (%~) SCV SCJ = Disproved (\ x -> case x of)-      (%~) SCV SCK = Disproved (\ x -> case x of)-      (%~) SCV SCL = Disproved (\ x -> case x of)-      (%~) SCV SCM = Disproved (\ x -> case x of)-      (%~) SCV SCN = Disproved (\ x -> case x of)-      (%~) SCV SCO = Disproved (\ x -> case x of)-      (%~) SCV SCP = Disproved (\ x -> case x of)-      (%~) SCV SCQ = Disproved (\ x -> case x of)-      (%~) SCV SCR = Disproved (\ x -> case x of)-      (%~) SCV SCS = Disproved (\ x -> case x of)-      (%~) SCV SCT = Disproved (\ x -> case x of)-      (%~) SCV SCU = Disproved (\ x -> case x of)-      (%~) SCV SCV = Proved Refl-      (%~) SCV SCW = Disproved (\ x -> case x of)-      (%~) SCV SCX = Disproved (\ x -> case x of)-      (%~) SCV SCY = Disproved (\ x -> case x of)-      (%~) SCV SCZ = Disproved (\ x -> case x of)-      (%~) SCW SCA = Disproved (\ x -> case x of)-      (%~) SCW SCB = Disproved (\ x -> case x of)-      (%~) SCW SCC = Disproved (\ x -> case x of)-      (%~) SCW SCD = Disproved (\ x -> case x of)-      (%~) SCW SCE = Disproved (\ x -> case x of)-      (%~) SCW SCF = Disproved (\ x -> case x of)-      (%~) SCW SCG = Disproved (\ x -> case x of)-      (%~) SCW SCH = Disproved (\ x -> case x of)-      (%~) SCW SCI = Disproved (\ x -> case x of)-      (%~) SCW SCJ = Disproved (\ x -> case x of)-      (%~) SCW SCK = Disproved (\ x -> case x of)-      (%~) SCW SCL = Disproved (\ x -> case x of)-      (%~) SCW SCM = Disproved (\ x -> case x of)-      (%~) SCW SCN = Disproved (\ x -> case x of)-      (%~) SCW SCO = Disproved (\ x -> case x of)-      (%~) SCW SCP = Disproved (\ x -> case x of)-      (%~) SCW SCQ = Disproved (\ x -> case x of)-      (%~) SCW SCR = Disproved (\ x -> case x of)-      (%~) SCW SCS = Disproved (\ x -> case x of)-      (%~) SCW SCT = Disproved (\ x -> case x of)-      (%~) SCW SCU = Disproved (\ x -> case x of)-      (%~) SCW SCV = Disproved (\ x -> case x of)-      (%~) SCW SCW = Proved Refl-      (%~) SCW SCX = Disproved (\ x -> case x of)-      (%~) SCW SCY = Disproved (\ x -> case x of)-      (%~) SCW SCZ = Disproved (\ x -> case x of)-      (%~) SCX SCA = Disproved (\ x -> case x of)-      (%~) SCX SCB = Disproved (\ x -> case x of)-      (%~) SCX SCC = Disproved (\ x -> case x of)-      (%~) SCX SCD = Disproved (\ x -> case x of)-      (%~) SCX SCE = Disproved (\ x -> case x of)-      (%~) SCX SCF = Disproved (\ x -> case x of)-      (%~) SCX SCG = Disproved (\ x -> case x of)-      (%~) SCX SCH = Disproved (\ x -> case x of)-      (%~) SCX SCI = Disproved (\ x -> case x of)-      (%~) SCX SCJ = Disproved (\ x -> case x of)-      (%~) SCX SCK = Disproved (\ x -> case x of)-      (%~) SCX SCL = Disproved (\ x -> case x of)-      (%~) SCX SCM = Disproved (\ x -> case x of)-      (%~) SCX SCN = Disproved (\ x -> case x of)-      (%~) SCX SCO = Disproved (\ x -> case x of)-      (%~) SCX SCP = Disproved (\ x -> case x of)-      (%~) SCX SCQ = Disproved (\ x -> case x of)-      (%~) SCX SCR = Disproved (\ x -> case x of)-      (%~) SCX SCS = Disproved (\ x -> case x of)-      (%~) SCX SCT = Disproved (\ x -> case x of)-      (%~) SCX SCU = Disproved (\ x -> case x of)-      (%~) SCX SCV = Disproved (\ x -> case x of)-      (%~) SCX SCW = Disproved (\ x -> case x of)-      (%~) SCX SCX = Proved Refl-      (%~) SCX SCY = Disproved (\ x -> case x of)-      (%~) SCX SCZ = Disproved (\ x -> case x of)-      (%~) SCY SCA = Disproved (\ x -> case x of)-      (%~) SCY SCB = Disproved (\ x -> case x of)-      (%~) SCY SCC = Disproved (\ x -> case x of)-      (%~) SCY SCD = Disproved (\ x -> case x of)-      (%~) SCY SCE = Disproved (\ x -> case x of)-      (%~) SCY SCF = Disproved (\ x -> case x of)-      (%~) SCY SCG = Disproved (\ x -> case x of)-      (%~) SCY SCH = Disproved (\ x -> case x of)-      (%~) SCY SCI = Disproved (\ x -> case x of)-      (%~) SCY SCJ = Disproved (\ x -> case x of)-      (%~) SCY SCK = Disproved (\ x -> case x of)-      (%~) SCY SCL = Disproved (\ x -> case x of)-      (%~) SCY SCM = Disproved (\ x -> case x of)-      (%~) SCY SCN = Disproved (\ x -> case x of)-      (%~) SCY SCO = Disproved (\ x -> case x of)-      (%~) SCY SCP = Disproved (\ x -> case x of)-      (%~) SCY SCQ = Disproved (\ x -> case x of)-      (%~) SCY SCR = Disproved (\ x -> case x of)-      (%~) SCY SCS = Disproved (\ x -> case x of)-      (%~) SCY SCT = Disproved (\ x -> case x of)-      (%~) SCY SCU = Disproved (\ x -> case x of)-      (%~) SCY SCV = Disproved (\ x -> case x of)-      (%~) SCY SCW = Disproved (\ x -> case x of)-      (%~) SCY SCX = Disproved (\ x -> case x of)-      (%~) SCY SCY = Proved Refl-      (%~) SCY SCZ = Disproved (\ x -> case x of)-      (%~) SCZ SCA = Disproved (\ x -> case x of)-      (%~) SCZ SCB = Disproved (\ x -> case x of)-      (%~) SCZ SCC = Disproved (\ x -> case x of)-      (%~) SCZ SCD = Disproved (\ x -> case x of)-      (%~) SCZ SCE = Disproved (\ x -> case x of)-      (%~) SCZ SCF = Disproved (\ x -> case x of)-      (%~) SCZ SCG = Disproved (\ x -> case x of)-      (%~) SCZ SCH = Disproved (\ x -> case x of)-      (%~) SCZ SCI = Disproved (\ x -> case x of)-      (%~) SCZ SCJ = Disproved (\ x -> case x of)-      (%~) SCZ SCK = Disproved (\ x -> case x of)-      (%~) SCZ SCL = Disproved (\ x -> case x of)-      (%~) SCZ SCM = Disproved (\ x -> case x of)-      (%~) SCZ SCN = Disproved (\ x -> case x of)-      (%~) SCZ SCO = Disproved (\ x -> case x of)-      (%~) SCZ SCP = Disproved (\ x -> case x of)-      (%~) SCZ SCQ = Disproved (\ x -> case x of)-      (%~) SCZ SCR = Disproved (\ x -> case x of)-      (%~) SCZ SCS = Disproved (\ x -> case x of)-      (%~) SCZ SCT = Disproved (\ x -> case x of)-      (%~) SCZ SCU = Disproved (\ x -> case x of)-      (%~) SCZ SCV = Disproved (\ x -> case x of)-      (%~) SCZ SCW = Disproved (\ x -> case x of)-      (%~) SCZ SCX = Disproved (\ x -> case x of)-      (%~) SCZ SCY = Disproved (\ x -> case x of)-      (%~) SCZ SCZ = Proved Refl-    instance Data.Type.Equality.TestEquality (SAChar :: AChar-                                                        -> Type) where-      Data.Type.Equality.testEquality-        = Data.Singletons.Decide.decideEquality-    instance Data.Type.Coercion.TestCoercion (SAChar :: AChar-                                                        -> Type) where-      Data.Type.Coercion.testCoercion-        = Data.Singletons.Decide.decideCoercion-    deriving instance (Data.Singletons.ShowSing.ShowSing U,-                       Data.Singletons.ShowSing.ShowSing Nat) =>-                      Show (SU (z :: U))-    deriving instance Show (SAChar (z :: AChar))-    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-    instance SingI (VECSym0 :: (~>) U ((~>) Nat U)) where-      sing = (singFun2 @VECSym0) SVEC-    instance SingI d => SingI (VECSym1 (d :: U) :: (~>) Nat U) where-      sing = (singFun1 @(VECSym1 (d :: U))) (SVEC (sing @d))-    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-    instance (SingI n, SingI n) =>-             SingI (Attr (n :: [AChar]) (n :: U)) where-      sing = (SAttr sing) sing-    instance SingI (AttrSym0 :: (~>) [AChar] ((~>) U Attribute)) where-      sing = (singFun2 @AttrSym0) SAttr-    instance SingI d =>-             SingI (AttrSym1 (d :: [AChar]) :: (~>) U Attribute) where-      sing = (singFun1 @(AttrSym1 (d :: [AChar]))) (SAttr (sing @d))-    instance SingI n => SingI (Sch (n :: [Attribute])) where-      sing = SSch sing+        = case toSing b :: SomeSing Nat of SomeSing c -> SomeSing (SSucc c)+    instance SEq Nat => SEq Nat where+      (%==) ::+        forall (t1 :: Nat) (t2 :: Nat). Sing t1+                                        -> Sing t2+                                           -> Sing (Apply (Apply ((==@#@$) :: TyFun Nat ((~>) Nat Bool)+                                                                              -> Type) t1) t2)+      (%==) SZero SZero = STrue+      (%==) SZero (SSucc _) = SFalse+      (%==) (SSucc _) SZero = SFalse+      (%==)+        (SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))+        (SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))+        = (applySing+             ((applySing ((singFun2 @(==@#@$)) (%==))) sA_0123456789876543210))+            sB_0123456789876543210+    instance SOrd Nat => SOrd Nat where+      sCompare ::+        forall (t1 :: Nat) (t2 :: Nat). Sing t1+                                        -> Sing t2+                                           -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)+                                                                                 -> Type) t1) t2)+      sCompare SZero SZero+        = (applySing+             ((applySing+                 ((applySing ((singFun3 @FoldlSym0) sFoldl))+                    ((singFun2 @ThenCmpSym0) sThenCmp)))+                SEQ))+            SNil+      sCompare+        (SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))+        (SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))+        = (applySing+             ((applySing+                 ((applySing ((singFun3 @FoldlSym0) sFoldl))+                    ((singFun2 @ThenCmpSym0) sThenCmp)))+                SEQ))+            ((applySing+                ((applySing ((singFun2 @(:@#@$)) SCons))+                   ((applySing+                       ((applySing ((singFun2 @CompareSym0) sCompare))+                          sA_0123456789876543210))+                      sB_0123456789876543210)))+               SNil)+      sCompare SZero (SSucc _) = SLT+      sCompare (SSucc _) SZero = SGT+    instance SDecide Nat => SDecide Nat where+      (%~) SZero SZero = Proved Refl+      (%~) SZero (SSucc _) = Disproved (\ x -> case x of {})+      (%~) (SSucc _) SZero = Disproved (\ x -> case x of {})+      (%~) (SSucc a) (SSucc b)+        = case ((%~) a) b of+            Proved Refl -> Proved Refl+            Disproved contra+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)+    instance SDecide Nat =>+             Data.Type.Equality.TestEquality (SNat :: Nat -> Type) where+      Data.Type.Equality.testEquality+        = Data.Singletons.Decide.decideEquality+    instance SDecide Nat =>+             Data.Type.Coercion.TestCoercion (SNat :: Nat -> Type) where+      Data.Type.Coercion.testCoercion+        = Data.Singletons.Decide.decideCoercion+    instance SingI Zero where+      sing = SZero+    instance SingI n => SingI (Succ (n :: Nat)) where+      sing = SSucc sing+    instance SingI1 Succ where+      liftSing = SSucc+    instance SingI (SuccSym0 :: (~>) Nat Nat) where+      sing = (singFun1 @SuccSym0) SSucc+GradingClient/Database.hs:(0,0)-(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] |]+  ======>+    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 []) = 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)+    type BOOLSym0 :: U+    type family BOOLSym0 :: U where+      BOOLSym0 = BOOL+    type STRINGSym0 :: U+    type family STRINGSym0 :: U where+      STRINGSym0 = STRING+    type NATSym0 :: U+    type family NATSym0 :: U where+      NATSym0 = NAT+    type VECSym0 :: (~>) U ((~>) Nat U)+    data VECSym0 :: (~>) U ((~>) Nat U)+      where+        VECSym0KindInference :: SameKind (Apply VECSym0 arg) (VECSym1 arg) =>+                                VECSym0 a0123456789876543210+    type instance Apply VECSym0 a0123456789876543210 = VECSym1 a0123456789876543210+    instance SuppressUnusedWarnings VECSym0 where+      suppressUnusedWarnings = snd (((,) VECSym0KindInference) ())+    type VECSym1 :: U -> (~>) Nat U+    data VECSym1 (a0123456789876543210 :: U) :: (~>) Nat U+      where+        VECSym1KindInference :: SameKind (Apply (VECSym1 a0123456789876543210) arg) (VECSym2 a0123456789876543210 arg) =>+                                VECSym1 a0123456789876543210 a0123456789876543210+    type instance Apply (VECSym1 a0123456789876543210) a0123456789876543210 = VEC a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (VECSym1 a0123456789876543210) where+      suppressUnusedWarnings = snd (((,) VECSym1KindInference) ())+    type VECSym2 :: U -> Nat -> U+    type family VECSym2 (a0123456789876543210 :: U) (a0123456789876543210 :: Nat) :: U where+      VECSym2 a0123456789876543210 a0123456789876543210 = VEC a0123456789876543210 a0123456789876543210+    type CASym0 :: AChar+    type family CASym0 :: AChar where+      CASym0 = CA+    type CBSym0 :: AChar+    type family CBSym0 :: AChar where+      CBSym0 = CB+    type CCSym0 :: AChar+    type family CCSym0 :: AChar where+      CCSym0 = CC+    type CDSym0 :: AChar+    type family CDSym0 :: AChar where+      CDSym0 = CD+    type CESym0 :: AChar+    type family CESym0 :: AChar where+      CESym0 = CE+    type CFSym0 :: AChar+    type family CFSym0 :: AChar where+      CFSym0 = CF+    type CGSym0 :: AChar+    type family CGSym0 :: AChar where+      CGSym0 = CG+    type CHSym0 :: AChar+    type family CHSym0 :: AChar where+      CHSym0 = CH+    type CISym0 :: AChar+    type family CISym0 :: AChar where+      CISym0 = CI+    type CJSym0 :: AChar+    type family CJSym0 :: AChar where+      CJSym0 = CJ+    type CKSym0 :: AChar+    type family CKSym0 :: AChar where+      CKSym0 = CK+    type CLSym0 :: AChar+    type family CLSym0 :: AChar where+      CLSym0 = CL+    type CMSym0 :: AChar+    type family CMSym0 :: AChar where+      CMSym0 = CM+    type CNSym0 :: AChar+    type family CNSym0 :: AChar where+      CNSym0 = CN+    type COSym0 :: AChar+    type family COSym0 :: AChar where+      COSym0 = CO+    type CPSym0 :: AChar+    type family CPSym0 :: AChar where+      CPSym0 = CP+    type CQSym0 :: AChar+    type family CQSym0 :: AChar where+      CQSym0 = CQ+    type CRSym0 :: AChar+    type family CRSym0 :: AChar where+      CRSym0 = CR+    type CSSym0 :: AChar+    type family CSSym0 :: AChar where+      CSSym0 = CS+    type CTSym0 :: AChar+    type family CTSym0 :: AChar where+      CTSym0 = CT+    type CUSym0 :: AChar+    type family CUSym0 :: AChar where+      CUSym0 = CU+    type CVSym0 :: AChar+    type family CVSym0 :: AChar where+      CVSym0 = CV+    type CWSym0 :: AChar+    type family CWSym0 :: AChar where+      CWSym0 = CW+    type CXSym0 :: AChar+    type family CXSym0 :: AChar where+      CXSym0 = CX+    type CYSym0 :: AChar+    type family CYSym0 :: AChar where+      CYSym0 = CY+    type CZSym0 :: AChar+    type family CZSym0 :: AChar where+      CZSym0 = CZ+    type AttrSym0 :: (~>) [AChar] ((~>) U Attribute)+    data AttrSym0 :: (~>) [AChar] ((~>) U Attribute)+      where+        AttrSym0KindInference :: SameKind (Apply AttrSym0 arg) (AttrSym1 arg) =>+                                 AttrSym0 a0123456789876543210+    type instance Apply AttrSym0 a0123456789876543210 = AttrSym1 a0123456789876543210+    instance SuppressUnusedWarnings AttrSym0 where+      suppressUnusedWarnings = snd (((,) AttrSym0KindInference) ())+    type AttrSym1 :: [AChar] -> (~>) U Attribute+    data AttrSym1 (a0123456789876543210 :: [AChar]) :: (~>) U Attribute+      where+        AttrSym1KindInference :: SameKind (Apply (AttrSym1 a0123456789876543210) arg) (AttrSym2 a0123456789876543210 arg) =>+                                 AttrSym1 a0123456789876543210 a0123456789876543210+    type instance Apply (AttrSym1 a0123456789876543210) a0123456789876543210 = Attr a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (AttrSym1 a0123456789876543210) where+      suppressUnusedWarnings = snd (((,) AttrSym1KindInference) ())+    type AttrSym2 :: [AChar] -> U -> Attribute+    type family AttrSym2 (a0123456789876543210 :: [AChar]) (a0123456789876543210 :: U) :: Attribute where+      AttrSym2 a0123456789876543210 a0123456789876543210 = Attr a0123456789876543210 a0123456789876543210+    type SchSym0 :: (~>) [Attribute] Schema+    data SchSym0 :: (~>) [Attribute] Schema+      where+        SchSym0KindInference :: SameKind (Apply SchSym0 arg) (SchSym1 arg) =>+                                SchSym0 a0123456789876543210+    type instance Apply SchSym0 a0123456789876543210 = Sch a0123456789876543210+    instance SuppressUnusedWarnings SchSym0 where+      suppressUnusedWarnings = snd (((,) SchSym0KindInference) ())+    type SchSym1 :: [Attribute] -> Schema+    type family SchSym1 (a0123456789876543210 :: [Attribute]) :: Schema where+      SchSym1 a0123456789876543210 = Sch a0123456789876543210+    data Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210+      where+        Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>+                                                                                Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210+    type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210+    instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where+      suppressUnusedWarnings+        = snd+            (((,)+                Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)+               ())+    data Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210 name'0123456789876543210+      where+        Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference :: SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 arg) =>+                                                                                Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210 name'0123456789876543210+    type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) name'0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210+    instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) where+      suppressUnusedWarnings+        = snd+            (((,)+                Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference)+               ())+    data Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210 u0123456789876543210+      where+        Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference :: SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 arg) =>+                                                                                Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210 u0123456789876543210+    type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210) u0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210+    instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210) where+      suppressUnusedWarnings+        = snd+            (((,)+                Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference)+               ())+    data Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210+      where+        Let0123456789876543210Scrutinee_0123456789876543210Sym3KindInference :: SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name0123456789876543210 name'0123456789876543210 u0123456789876543210 arg) =>+                                                                                Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210+    type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210) attrs0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210+    instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210) where+      suppressUnusedWarnings+        = snd+            (((,)+                Let0123456789876543210Scrutinee_0123456789876543210Sym3KindInference)+               ())+    type family Let0123456789876543210Scrutinee_0123456789876543210Sym4 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210 where+      Let0123456789876543210Scrutinee_0123456789876543210Sym4 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210+    type family Let0123456789876543210Scrutinee_0123456789876543210 name name' u attrs where+      Let0123456789876543210Scrutinee_0123456789876543210 name name' u attrs = Apply (Apply (==@#@$) name) name'+    type family Case_0123456789876543210 name name' u attrs t where+      Case_0123456789876543210 name name' u attrs 'True = u+      Case_0123456789876543210 name name' u attrs 'False = Apply (Apply LookupSym0 name) (Apply SchSym0 attrs)+    type LookupSym0 :: (~>) [AChar] ((~>) Schema U)+    data LookupSym0 :: (~>) [AChar] ((~>) Schema U)+      where+        LookupSym0KindInference :: SameKind (Apply LookupSym0 arg) (LookupSym1 arg) =>+                                   LookupSym0 a0123456789876543210+    type instance Apply LookupSym0 a0123456789876543210 = LookupSym1 a0123456789876543210+    instance SuppressUnusedWarnings LookupSym0 where+      suppressUnusedWarnings = snd (((,) LookupSym0KindInference) ())+    type LookupSym1 :: [AChar] -> (~>) Schema U+    data LookupSym1 (a0123456789876543210 :: [AChar]) :: (~>) Schema U+      where+        LookupSym1KindInference :: SameKind (Apply (LookupSym1 a0123456789876543210) arg) (LookupSym2 a0123456789876543210 arg) =>+                                   LookupSym1 a0123456789876543210 a0123456789876543210+    type instance Apply (LookupSym1 a0123456789876543210) a0123456789876543210 = Lookup a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (LookupSym1 a0123456789876543210) where+      suppressUnusedWarnings = snd (((,) LookupSym1KindInference) ())+    type LookupSym2 :: [AChar] -> Schema -> U+    type family LookupSym2 (a0123456789876543210 :: [AChar]) (a0123456789876543210 :: Schema) :: U where+      LookupSym2 a0123456789876543210 a0123456789876543210 = Lookup a0123456789876543210 a0123456789876543210+    type OccursSym0 :: (~>) [AChar] ((~>) Schema Bool)+    data OccursSym0 :: (~>) [AChar] ((~>) Schema Bool)+      where+        OccursSym0KindInference :: SameKind (Apply OccursSym0 arg) (OccursSym1 arg) =>+                                   OccursSym0 a0123456789876543210+    type instance Apply OccursSym0 a0123456789876543210 = OccursSym1 a0123456789876543210+    instance SuppressUnusedWarnings OccursSym0 where+      suppressUnusedWarnings = snd (((,) OccursSym0KindInference) ())+    type OccursSym1 :: [AChar] -> (~>) Schema Bool+    data OccursSym1 (a0123456789876543210 :: [AChar]) :: (~>) Schema Bool+      where+        OccursSym1KindInference :: SameKind (Apply (OccursSym1 a0123456789876543210) arg) (OccursSym2 a0123456789876543210 arg) =>+                                   OccursSym1 a0123456789876543210 a0123456789876543210+    type instance Apply (OccursSym1 a0123456789876543210) a0123456789876543210 = Occurs a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (OccursSym1 a0123456789876543210) where+      suppressUnusedWarnings = snd (((,) OccursSym1KindInference) ())+    type OccursSym2 :: [AChar] -> Schema -> Bool+    type family OccursSym2 (a0123456789876543210 :: [AChar]) (a0123456789876543210 :: Schema) :: Bool where+      OccursSym2 a0123456789876543210 a0123456789876543210 = Occurs a0123456789876543210 a0123456789876543210+    type DisjointSym0 :: (~>) Schema ((~>) Schema Bool)+    data DisjointSym0 :: (~>) Schema ((~>) Schema Bool)+      where+        DisjointSym0KindInference :: SameKind (Apply DisjointSym0 arg) (DisjointSym1 arg) =>+                                     DisjointSym0 a0123456789876543210+    type instance Apply DisjointSym0 a0123456789876543210 = DisjointSym1 a0123456789876543210+    instance SuppressUnusedWarnings DisjointSym0 where+      suppressUnusedWarnings = snd (((,) DisjointSym0KindInference) ())+    type DisjointSym1 :: Schema -> (~>) Schema Bool+    data DisjointSym1 (a0123456789876543210 :: Schema) :: (~>) Schema Bool+      where+        DisjointSym1KindInference :: SameKind (Apply (DisjointSym1 a0123456789876543210) arg) (DisjointSym2 a0123456789876543210 arg) =>+                                     DisjointSym1 a0123456789876543210 a0123456789876543210+    type instance Apply (DisjointSym1 a0123456789876543210) a0123456789876543210 = Disjoint a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (DisjointSym1 a0123456789876543210) where+      suppressUnusedWarnings = snd (((,) DisjointSym1KindInference) ())+    type DisjointSym2 :: Schema -> Schema -> Bool+    type family DisjointSym2 (a0123456789876543210 :: Schema) (a0123456789876543210 :: Schema) :: Bool where+      DisjointSym2 a0123456789876543210 a0123456789876543210 = Disjoint a0123456789876543210 a0123456789876543210+    type AttrNotInSym0 :: (~>) Attribute ((~>) Schema Bool)+    data AttrNotInSym0 :: (~>) Attribute ((~>) Schema Bool)+      where+        AttrNotInSym0KindInference :: SameKind (Apply AttrNotInSym0 arg) (AttrNotInSym1 arg) =>+                                      AttrNotInSym0 a0123456789876543210+    type instance Apply AttrNotInSym0 a0123456789876543210 = AttrNotInSym1 a0123456789876543210+    instance SuppressUnusedWarnings AttrNotInSym0 where+      suppressUnusedWarnings = snd (((,) AttrNotInSym0KindInference) ())+    type AttrNotInSym1 :: Attribute -> (~>) Schema Bool+    data AttrNotInSym1 (a0123456789876543210 :: Attribute) :: (~>) Schema Bool+      where+        AttrNotInSym1KindInference :: SameKind (Apply (AttrNotInSym1 a0123456789876543210) arg) (AttrNotInSym2 a0123456789876543210 arg) =>+                                      AttrNotInSym1 a0123456789876543210 a0123456789876543210+    type instance Apply (AttrNotInSym1 a0123456789876543210) a0123456789876543210 = AttrNotIn a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (AttrNotInSym1 a0123456789876543210) where+      suppressUnusedWarnings = snd (((,) AttrNotInSym1KindInference) ())+    type AttrNotInSym2 :: Attribute -> Schema -> Bool+    type family AttrNotInSym2 (a0123456789876543210 :: Attribute) (a0123456789876543210 :: Schema) :: Bool where+      AttrNotInSym2 a0123456789876543210 a0123456789876543210 = AttrNotIn a0123456789876543210 a0123456789876543210+    type AppendSym0 :: (~>) Schema ((~>) Schema Schema)+    data AppendSym0 :: (~>) Schema ((~>) Schema Schema)+      where+        AppendSym0KindInference :: SameKind (Apply AppendSym0 arg) (AppendSym1 arg) =>+                                   AppendSym0 a0123456789876543210+    type instance Apply AppendSym0 a0123456789876543210 = AppendSym1 a0123456789876543210+    instance SuppressUnusedWarnings AppendSym0 where+      suppressUnusedWarnings = snd (((,) AppendSym0KindInference) ())+    type AppendSym1 :: Schema -> (~>) Schema Schema+    data AppendSym1 (a0123456789876543210 :: Schema) :: (~>) Schema Schema+      where+        AppendSym1KindInference :: SameKind (Apply (AppendSym1 a0123456789876543210) arg) (AppendSym2 a0123456789876543210 arg) =>+                                   AppendSym1 a0123456789876543210 a0123456789876543210+    type instance Apply (AppendSym1 a0123456789876543210) a0123456789876543210 = Append a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (AppendSym1 a0123456789876543210) where+      suppressUnusedWarnings = snd (((,) AppendSym1KindInference) ())+    type AppendSym2 :: Schema -> Schema -> Schema+    type family AppendSym2 (a0123456789876543210 :: Schema) (a0123456789876543210 :: Schema) :: Schema where+      AppendSym2 a0123456789876543210 a0123456789876543210 = Append a0123456789876543210 a0123456789876543210+    type Lookup :: [AChar] -> Schema -> U+    type family Lookup (a :: [AChar]) (a :: Schema) :: U where+      Lookup _ (Sch '[]) = UndefinedSym0+      Lookup name (Sch ('(:) (Attr name' u) attrs)) = Case_0123456789876543210 name name' u attrs (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs)+    type Occurs :: [AChar] -> Schema -> Bool+    type family Occurs (a :: [AChar]) (a :: Schema) :: Bool where+      Occurs _ (Sch '[]) = FalseSym0+      Occurs name (Sch ('(:) (Attr name' _) attrs)) = Apply (Apply (||@#@$) (Apply (Apply (==@#@$) name) name')) (Apply (Apply OccursSym0 name) (Apply SchSym0 attrs))+    type Disjoint :: Schema -> Schema -> Bool+    type family Disjoint (a :: Schema) (a :: Schema) :: Bool where+      Disjoint (Sch '[]) _ = TrueSym0+      Disjoint (Sch ('(:) h t)) s = Apply (Apply (&&@#@$) (Apply (Apply AttrNotInSym0 h) s)) (Apply (Apply DisjointSym0 (Apply SchSym0 t)) s)+    type AttrNotIn :: Attribute -> Schema -> Bool+    type family AttrNotIn (a :: Attribute) (a :: Schema) :: Bool where+      AttrNotIn _ (Sch '[]) = TrueSym0+      AttrNotIn (Attr name u) (Sch ('(:) (Attr name' _) t)) = Apply (Apply (&&@#@$) (Apply (Apply (/=@#@$) name) name')) (Apply (Apply AttrNotInSym0 (Apply (Apply AttrSym0 name) u)) (Apply SchSym0 t))+    type Append :: Schema -> Schema -> Schema+    type family Append (a :: Schema) (a :: Schema) :: Schema where+      Append (Sch s1) (Sch s2) = Apply SchSym0 (Apply (Apply (++@#@$) s1) s2)+    type TFHelper_0123456789876543210 :: U -> U -> Bool+    type family TFHelper_0123456789876543210 (a :: U) (a :: U) :: Bool where+      TFHelper_0123456789876543210 BOOL BOOL = TrueSym0+      TFHelper_0123456789876543210 BOOL STRING = FalseSym0+      TFHelper_0123456789876543210 BOOL NAT = FalseSym0+      TFHelper_0123456789876543210 BOOL (VEC _ _) = FalseSym0+      TFHelper_0123456789876543210 STRING BOOL = FalseSym0+      TFHelper_0123456789876543210 STRING STRING = TrueSym0+      TFHelper_0123456789876543210 STRING NAT = FalseSym0+      TFHelper_0123456789876543210 STRING (VEC _ _) = FalseSym0+      TFHelper_0123456789876543210 NAT BOOL = FalseSym0+      TFHelper_0123456789876543210 NAT STRING = FalseSym0+      TFHelper_0123456789876543210 NAT NAT = TrueSym0+      TFHelper_0123456789876543210 NAT (VEC _ _) = FalseSym0+      TFHelper_0123456789876543210 (VEC _ _) BOOL = FalseSym0+      TFHelper_0123456789876543210 (VEC _ _) STRING = FalseSym0+      TFHelper_0123456789876543210 (VEC _ _) NAT = FalseSym0+      TFHelper_0123456789876543210 (VEC a_0123456789876543210 a_0123456789876543210) (VEC b_0123456789876543210 b_0123456789876543210) = Apply (Apply (&&@#@$) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (==@#@$) a_0123456789876543210) b_0123456789876543210)+    type TFHelper_0123456789876543210Sym0 :: (~>) U ((~>) U Bool)+    data TFHelper_0123456789876543210Sym0 :: (~>) U ((~>) U Bool)+      where+        TFHelper_0123456789876543210Sym0KindInference :: SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>+                                                         TFHelper_0123456789876543210Sym0 a0123456789876543210+    type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210+    instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where+      suppressUnusedWarnings+        = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())+    type TFHelper_0123456789876543210Sym1 :: U -> (~>) U Bool+    data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: U) :: (~>) U Bool+      where+        TFHelper_0123456789876543210Sym1KindInference :: SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>+                                                         TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+    type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where+      suppressUnusedWarnings+        = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())+    type TFHelper_0123456789876543210Sym2 :: U -> U -> Bool+    type family TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: U) (a0123456789876543210 :: U) :: Bool where+      TFHelper_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+    instance PEq U where+      type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural+                                          -> U -> Symbol -> Symbol+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: U) (a :: Symbol) :: Symbol where+      ShowsPrec_0123456789876543210 _ BOOL a_0123456789876543210 = Apply (Apply ShowStringSym0 "BOOL") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ STRING a_0123456789876543210 = Apply (Apply ShowStringSym0 "STRING") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ NAT a_0123456789876543210 = Apply (Apply ShowStringSym0 "NAT") a_0123456789876543210+      ShowsPrec_0123456789876543210 p_0123456789876543210 (VEC arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "VEC ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) U ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) U ((~>) Symbol Symbol))+      where+        ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+                                                          ShowsPrec_0123456789876543210Sym0 a0123456789876543210+    type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+    instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+      suppressUnusedWarnings+        = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural+                                              -> (~>) U ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) U ((~>) Symbol Symbol)+      where+        ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+                                                          ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+    type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+      suppressUnusedWarnings+        = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural+                                              -> U -> (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: U) :: (~>) Symbol Symbol+      where+        ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+                                                          ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+    type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+      suppressUnusedWarnings+        = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural+                                              -> U -> Symbol -> Symbol+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: U) (a0123456789876543210 :: Symbol) :: Symbol where+      ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+    instance PShow U where+      type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural+                                          -> AChar -> Symbol -> Symbol+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: AChar) (a :: Symbol) :: Symbol where+      ShowsPrec_0123456789876543210 _ CA a_0123456789876543210 = Apply (Apply ShowStringSym0 "CA") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CB a_0123456789876543210 = Apply (Apply ShowStringSym0 "CB") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CC a_0123456789876543210 = Apply (Apply ShowStringSym0 "CC") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CD a_0123456789876543210 = Apply (Apply ShowStringSym0 "CD") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CE a_0123456789876543210 = Apply (Apply ShowStringSym0 "CE") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CF a_0123456789876543210 = Apply (Apply ShowStringSym0 "CF") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CG a_0123456789876543210 = Apply (Apply ShowStringSym0 "CG") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CH a_0123456789876543210 = Apply (Apply ShowStringSym0 "CH") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CI a_0123456789876543210 = Apply (Apply ShowStringSym0 "CI") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CJ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CJ") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CK a_0123456789876543210 = Apply (Apply ShowStringSym0 "CK") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CL a_0123456789876543210 = Apply (Apply ShowStringSym0 "CL") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CM a_0123456789876543210 = Apply (Apply ShowStringSym0 "CM") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CN a_0123456789876543210 = Apply (Apply ShowStringSym0 "CN") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CO a_0123456789876543210 = Apply (Apply ShowStringSym0 "CO") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CP a_0123456789876543210 = Apply (Apply ShowStringSym0 "CP") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CQ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CQ") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CR a_0123456789876543210 = Apply (Apply ShowStringSym0 "CR") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CS a_0123456789876543210 = Apply (Apply ShowStringSym0 "CS") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CT a_0123456789876543210 = Apply (Apply ShowStringSym0 "CT") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CU a_0123456789876543210 = Apply (Apply ShowStringSym0 "CU") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CV a_0123456789876543210 = Apply (Apply ShowStringSym0 "CV") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CW a_0123456789876543210 = Apply (Apply ShowStringSym0 "CW") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CX a_0123456789876543210 = Apply (Apply ShowStringSym0 "CX") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CY a_0123456789876543210 = Apply (Apply ShowStringSym0 "CY") a_0123456789876543210+      ShowsPrec_0123456789876543210 _ CZ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CZ") a_0123456789876543210+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) AChar ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) AChar ((~>) Symbol Symbol))+      where+        ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+                                                          ShowsPrec_0123456789876543210Sym0 a0123456789876543210+    type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+    instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+      suppressUnusedWarnings+        = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural+                                              -> (~>) AChar ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) AChar ((~>) Symbol Symbol)+      where+        ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+                                                          ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+    type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+      suppressUnusedWarnings+        = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural+                                              -> AChar -> (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: AChar) :: (~>) Symbol Symbol+      where+        ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+                                                          ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+    type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+      suppressUnusedWarnings+        = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural+                                              -> AChar -> Symbol -> Symbol+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: AChar) (a0123456789876543210 :: Symbol) :: Symbol where+      ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+    instance PShow AChar where+      type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+    type TFHelper_0123456789876543210 :: AChar -> AChar -> Bool+    type family TFHelper_0123456789876543210 (a :: AChar) (a :: AChar) :: Bool where+      TFHelper_0123456789876543210 CA CA = TrueSym0+      TFHelper_0123456789876543210 CA CB = FalseSym0+      TFHelper_0123456789876543210 CA CC = FalseSym0+      TFHelper_0123456789876543210 CA CD = FalseSym0+      TFHelper_0123456789876543210 CA CE = FalseSym0+      TFHelper_0123456789876543210 CA CF = FalseSym0+      TFHelper_0123456789876543210 CA CG = FalseSym0+      TFHelper_0123456789876543210 CA CH = FalseSym0+      TFHelper_0123456789876543210 CA CI = FalseSym0+      TFHelper_0123456789876543210 CA CJ = FalseSym0+      TFHelper_0123456789876543210 CA CK = FalseSym0+      TFHelper_0123456789876543210 CA CL = FalseSym0+      TFHelper_0123456789876543210 CA CM = FalseSym0+      TFHelper_0123456789876543210 CA CN = FalseSym0+      TFHelper_0123456789876543210 CA CO = FalseSym0+      TFHelper_0123456789876543210 CA CP = FalseSym0+      TFHelper_0123456789876543210 CA CQ = FalseSym0+      TFHelper_0123456789876543210 CA CR = FalseSym0+      TFHelper_0123456789876543210 CA CS = FalseSym0+      TFHelper_0123456789876543210 CA CT = FalseSym0+      TFHelper_0123456789876543210 CA CU = FalseSym0+      TFHelper_0123456789876543210 CA CV = FalseSym0+      TFHelper_0123456789876543210 CA CW = FalseSym0+      TFHelper_0123456789876543210 CA CX = FalseSym0+      TFHelper_0123456789876543210 CA CY = FalseSym0+      TFHelper_0123456789876543210 CA CZ = FalseSym0+      TFHelper_0123456789876543210 CB CA = FalseSym0+      TFHelper_0123456789876543210 CB CB = TrueSym0+      TFHelper_0123456789876543210 CB CC = FalseSym0+      TFHelper_0123456789876543210 CB CD = FalseSym0+      TFHelper_0123456789876543210 CB CE = FalseSym0+      TFHelper_0123456789876543210 CB CF = FalseSym0+      TFHelper_0123456789876543210 CB CG = FalseSym0+      TFHelper_0123456789876543210 CB CH = FalseSym0+      TFHelper_0123456789876543210 CB CI = FalseSym0+      TFHelper_0123456789876543210 CB CJ = FalseSym0+      TFHelper_0123456789876543210 CB CK = FalseSym0+      TFHelper_0123456789876543210 CB CL = FalseSym0+      TFHelper_0123456789876543210 CB CM = FalseSym0+      TFHelper_0123456789876543210 CB CN = FalseSym0+      TFHelper_0123456789876543210 CB CO = FalseSym0+      TFHelper_0123456789876543210 CB CP = FalseSym0+      TFHelper_0123456789876543210 CB CQ = FalseSym0+      TFHelper_0123456789876543210 CB CR = FalseSym0+      TFHelper_0123456789876543210 CB CS = FalseSym0+      TFHelper_0123456789876543210 CB CT = FalseSym0+      TFHelper_0123456789876543210 CB CU = FalseSym0+      TFHelper_0123456789876543210 CB CV = FalseSym0+      TFHelper_0123456789876543210 CB CW = FalseSym0+      TFHelper_0123456789876543210 CB CX = FalseSym0+      TFHelper_0123456789876543210 CB CY = FalseSym0+      TFHelper_0123456789876543210 CB CZ = FalseSym0+      TFHelper_0123456789876543210 CC CA = FalseSym0+      TFHelper_0123456789876543210 CC CB = FalseSym0+      TFHelper_0123456789876543210 CC CC = TrueSym0+      TFHelper_0123456789876543210 CC CD = FalseSym0+      TFHelper_0123456789876543210 CC CE = FalseSym0+      TFHelper_0123456789876543210 CC CF = FalseSym0+      TFHelper_0123456789876543210 CC CG = FalseSym0+      TFHelper_0123456789876543210 CC CH = FalseSym0+      TFHelper_0123456789876543210 CC CI = FalseSym0+      TFHelper_0123456789876543210 CC CJ = FalseSym0+      TFHelper_0123456789876543210 CC CK = FalseSym0+      TFHelper_0123456789876543210 CC CL = FalseSym0+      TFHelper_0123456789876543210 CC CM = FalseSym0+      TFHelper_0123456789876543210 CC CN = FalseSym0+      TFHelper_0123456789876543210 CC CO = FalseSym0+      TFHelper_0123456789876543210 CC CP = FalseSym0+      TFHelper_0123456789876543210 CC CQ = FalseSym0+      TFHelper_0123456789876543210 CC CR = FalseSym0+      TFHelper_0123456789876543210 CC CS = FalseSym0+      TFHelper_0123456789876543210 CC CT = FalseSym0+      TFHelper_0123456789876543210 CC CU = FalseSym0+      TFHelper_0123456789876543210 CC CV = FalseSym0+      TFHelper_0123456789876543210 CC CW = FalseSym0+      TFHelper_0123456789876543210 CC CX = FalseSym0+      TFHelper_0123456789876543210 CC CY = FalseSym0+      TFHelper_0123456789876543210 CC CZ = FalseSym0+      TFHelper_0123456789876543210 CD CA = FalseSym0+      TFHelper_0123456789876543210 CD CB = FalseSym0+      TFHelper_0123456789876543210 CD CC = FalseSym0+      TFHelper_0123456789876543210 CD CD = TrueSym0+      TFHelper_0123456789876543210 CD CE = FalseSym0+      TFHelper_0123456789876543210 CD CF = FalseSym0+      TFHelper_0123456789876543210 CD CG = FalseSym0+      TFHelper_0123456789876543210 CD CH = FalseSym0+      TFHelper_0123456789876543210 CD CI = FalseSym0+      TFHelper_0123456789876543210 CD CJ = FalseSym0+      TFHelper_0123456789876543210 CD CK = FalseSym0+      TFHelper_0123456789876543210 CD CL = FalseSym0+      TFHelper_0123456789876543210 CD CM = FalseSym0+      TFHelper_0123456789876543210 CD CN = FalseSym0+      TFHelper_0123456789876543210 CD CO = FalseSym0+      TFHelper_0123456789876543210 CD CP = FalseSym0+      TFHelper_0123456789876543210 CD CQ = FalseSym0+      TFHelper_0123456789876543210 CD CR = FalseSym0+      TFHelper_0123456789876543210 CD CS = FalseSym0+      TFHelper_0123456789876543210 CD CT = FalseSym0+      TFHelper_0123456789876543210 CD CU = FalseSym0+      TFHelper_0123456789876543210 CD CV = FalseSym0+      TFHelper_0123456789876543210 CD CW = FalseSym0+      TFHelper_0123456789876543210 CD CX = FalseSym0+      TFHelper_0123456789876543210 CD CY = FalseSym0+      TFHelper_0123456789876543210 CD CZ = FalseSym0+      TFHelper_0123456789876543210 CE CA = FalseSym0+      TFHelper_0123456789876543210 CE CB = FalseSym0+      TFHelper_0123456789876543210 CE CC = FalseSym0+      TFHelper_0123456789876543210 CE CD = FalseSym0+      TFHelper_0123456789876543210 CE CE = TrueSym0+      TFHelper_0123456789876543210 CE CF = FalseSym0+      TFHelper_0123456789876543210 CE CG = FalseSym0+      TFHelper_0123456789876543210 CE CH = FalseSym0+      TFHelper_0123456789876543210 CE CI = FalseSym0+      TFHelper_0123456789876543210 CE CJ = FalseSym0+      TFHelper_0123456789876543210 CE CK = FalseSym0+      TFHelper_0123456789876543210 CE CL = FalseSym0+      TFHelper_0123456789876543210 CE CM = FalseSym0+      TFHelper_0123456789876543210 CE CN = FalseSym0+      TFHelper_0123456789876543210 CE CO = FalseSym0+      TFHelper_0123456789876543210 CE CP = FalseSym0+      TFHelper_0123456789876543210 CE CQ = FalseSym0+      TFHelper_0123456789876543210 CE CR = FalseSym0+      TFHelper_0123456789876543210 CE CS = FalseSym0+      TFHelper_0123456789876543210 CE CT = FalseSym0+      TFHelper_0123456789876543210 CE CU = FalseSym0+      TFHelper_0123456789876543210 CE CV = FalseSym0+      TFHelper_0123456789876543210 CE CW = FalseSym0+      TFHelper_0123456789876543210 CE CX = FalseSym0+      TFHelper_0123456789876543210 CE CY = FalseSym0+      TFHelper_0123456789876543210 CE CZ = FalseSym0+      TFHelper_0123456789876543210 CF CA = FalseSym0+      TFHelper_0123456789876543210 CF CB = FalseSym0+      TFHelper_0123456789876543210 CF CC = FalseSym0+      TFHelper_0123456789876543210 CF CD = FalseSym0+      TFHelper_0123456789876543210 CF CE = FalseSym0+      TFHelper_0123456789876543210 CF CF = TrueSym0+      TFHelper_0123456789876543210 CF CG = FalseSym0+      TFHelper_0123456789876543210 CF CH = FalseSym0+      TFHelper_0123456789876543210 CF CI = FalseSym0+      TFHelper_0123456789876543210 CF CJ = FalseSym0+      TFHelper_0123456789876543210 CF CK = FalseSym0+      TFHelper_0123456789876543210 CF CL = FalseSym0+      TFHelper_0123456789876543210 CF CM = FalseSym0+      TFHelper_0123456789876543210 CF CN = FalseSym0+      TFHelper_0123456789876543210 CF CO = FalseSym0+      TFHelper_0123456789876543210 CF CP = FalseSym0+      TFHelper_0123456789876543210 CF CQ = FalseSym0+      TFHelper_0123456789876543210 CF CR = FalseSym0+      TFHelper_0123456789876543210 CF CS = FalseSym0+      TFHelper_0123456789876543210 CF CT = FalseSym0+      TFHelper_0123456789876543210 CF CU = FalseSym0+      TFHelper_0123456789876543210 CF CV = FalseSym0+      TFHelper_0123456789876543210 CF CW = FalseSym0+      TFHelper_0123456789876543210 CF CX = FalseSym0+      TFHelper_0123456789876543210 CF CY = FalseSym0+      TFHelper_0123456789876543210 CF CZ = FalseSym0+      TFHelper_0123456789876543210 CG CA = FalseSym0+      TFHelper_0123456789876543210 CG CB = FalseSym0+      TFHelper_0123456789876543210 CG CC = FalseSym0+      TFHelper_0123456789876543210 CG CD = FalseSym0+      TFHelper_0123456789876543210 CG CE = FalseSym0+      TFHelper_0123456789876543210 CG CF = FalseSym0+      TFHelper_0123456789876543210 CG CG = TrueSym0+      TFHelper_0123456789876543210 CG CH = FalseSym0+      TFHelper_0123456789876543210 CG CI = FalseSym0+      TFHelper_0123456789876543210 CG CJ = FalseSym0+      TFHelper_0123456789876543210 CG CK = FalseSym0+      TFHelper_0123456789876543210 CG CL = FalseSym0+      TFHelper_0123456789876543210 CG CM = FalseSym0+      TFHelper_0123456789876543210 CG CN = FalseSym0+      TFHelper_0123456789876543210 CG CO = FalseSym0+      TFHelper_0123456789876543210 CG CP = FalseSym0+      TFHelper_0123456789876543210 CG CQ = FalseSym0+      TFHelper_0123456789876543210 CG CR = FalseSym0+      TFHelper_0123456789876543210 CG CS = FalseSym0+      TFHelper_0123456789876543210 CG CT = FalseSym0+      TFHelper_0123456789876543210 CG CU = FalseSym0+      TFHelper_0123456789876543210 CG CV = FalseSym0+      TFHelper_0123456789876543210 CG CW = FalseSym0+      TFHelper_0123456789876543210 CG CX = FalseSym0+      TFHelper_0123456789876543210 CG CY = FalseSym0+      TFHelper_0123456789876543210 CG CZ = FalseSym0+      TFHelper_0123456789876543210 CH CA = FalseSym0+      TFHelper_0123456789876543210 CH CB = FalseSym0+      TFHelper_0123456789876543210 CH CC = FalseSym0+      TFHelper_0123456789876543210 CH CD = FalseSym0+      TFHelper_0123456789876543210 CH CE = FalseSym0+      TFHelper_0123456789876543210 CH CF = FalseSym0+      TFHelper_0123456789876543210 CH CG = FalseSym0+      TFHelper_0123456789876543210 CH CH = TrueSym0+      TFHelper_0123456789876543210 CH CI = FalseSym0+      TFHelper_0123456789876543210 CH CJ = FalseSym0+      TFHelper_0123456789876543210 CH CK = FalseSym0+      TFHelper_0123456789876543210 CH CL = FalseSym0+      TFHelper_0123456789876543210 CH CM = FalseSym0+      TFHelper_0123456789876543210 CH CN = FalseSym0+      TFHelper_0123456789876543210 CH CO = FalseSym0+      TFHelper_0123456789876543210 CH CP = FalseSym0+      TFHelper_0123456789876543210 CH CQ = FalseSym0+      TFHelper_0123456789876543210 CH CR = FalseSym0+      TFHelper_0123456789876543210 CH CS = FalseSym0+      TFHelper_0123456789876543210 CH CT = FalseSym0+      TFHelper_0123456789876543210 CH CU = FalseSym0+      TFHelper_0123456789876543210 CH CV = FalseSym0+      TFHelper_0123456789876543210 CH CW = FalseSym0+      TFHelper_0123456789876543210 CH CX = FalseSym0+      TFHelper_0123456789876543210 CH CY = FalseSym0+      TFHelper_0123456789876543210 CH CZ = FalseSym0+      TFHelper_0123456789876543210 CI CA = FalseSym0+      TFHelper_0123456789876543210 CI CB = FalseSym0+      TFHelper_0123456789876543210 CI CC = FalseSym0+      TFHelper_0123456789876543210 CI CD = FalseSym0+      TFHelper_0123456789876543210 CI CE = FalseSym0+      TFHelper_0123456789876543210 CI CF = FalseSym0+      TFHelper_0123456789876543210 CI CG = FalseSym0+      TFHelper_0123456789876543210 CI CH = FalseSym0+      TFHelper_0123456789876543210 CI CI = TrueSym0+      TFHelper_0123456789876543210 CI CJ = FalseSym0+      TFHelper_0123456789876543210 CI CK = FalseSym0+      TFHelper_0123456789876543210 CI CL = FalseSym0+      TFHelper_0123456789876543210 CI CM = FalseSym0+      TFHelper_0123456789876543210 CI CN = FalseSym0+      TFHelper_0123456789876543210 CI CO = FalseSym0+      TFHelper_0123456789876543210 CI CP = FalseSym0+      TFHelper_0123456789876543210 CI CQ = FalseSym0+      TFHelper_0123456789876543210 CI CR = FalseSym0+      TFHelper_0123456789876543210 CI CS = FalseSym0+      TFHelper_0123456789876543210 CI CT = FalseSym0+      TFHelper_0123456789876543210 CI CU = FalseSym0+      TFHelper_0123456789876543210 CI CV = FalseSym0+      TFHelper_0123456789876543210 CI CW = FalseSym0+      TFHelper_0123456789876543210 CI CX = FalseSym0+      TFHelper_0123456789876543210 CI CY = FalseSym0+      TFHelper_0123456789876543210 CI CZ = FalseSym0+      TFHelper_0123456789876543210 CJ CA = FalseSym0+      TFHelper_0123456789876543210 CJ CB = FalseSym0+      TFHelper_0123456789876543210 CJ CC = FalseSym0+      TFHelper_0123456789876543210 CJ CD = FalseSym0+      TFHelper_0123456789876543210 CJ CE = FalseSym0+      TFHelper_0123456789876543210 CJ CF = FalseSym0+      TFHelper_0123456789876543210 CJ CG = FalseSym0+      TFHelper_0123456789876543210 CJ CH = FalseSym0+      TFHelper_0123456789876543210 CJ CI = FalseSym0+      TFHelper_0123456789876543210 CJ CJ = TrueSym0+      TFHelper_0123456789876543210 CJ CK = FalseSym0+      TFHelper_0123456789876543210 CJ CL = FalseSym0+      TFHelper_0123456789876543210 CJ CM = FalseSym0+      TFHelper_0123456789876543210 CJ CN = FalseSym0+      TFHelper_0123456789876543210 CJ CO = FalseSym0+      TFHelper_0123456789876543210 CJ CP = FalseSym0+      TFHelper_0123456789876543210 CJ CQ = FalseSym0+      TFHelper_0123456789876543210 CJ CR = FalseSym0+      TFHelper_0123456789876543210 CJ CS = FalseSym0+      TFHelper_0123456789876543210 CJ CT = FalseSym0+      TFHelper_0123456789876543210 CJ CU = FalseSym0+      TFHelper_0123456789876543210 CJ CV = FalseSym0+      TFHelper_0123456789876543210 CJ CW = FalseSym0+      TFHelper_0123456789876543210 CJ CX = FalseSym0+      TFHelper_0123456789876543210 CJ CY = FalseSym0+      TFHelper_0123456789876543210 CJ CZ = FalseSym0+      TFHelper_0123456789876543210 CK CA = FalseSym0+      TFHelper_0123456789876543210 CK CB = FalseSym0+      TFHelper_0123456789876543210 CK CC = FalseSym0+      TFHelper_0123456789876543210 CK CD = FalseSym0+      TFHelper_0123456789876543210 CK CE = FalseSym0+      TFHelper_0123456789876543210 CK CF = FalseSym0+      TFHelper_0123456789876543210 CK CG = FalseSym0+      TFHelper_0123456789876543210 CK CH = FalseSym0+      TFHelper_0123456789876543210 CK CI = FalseSym0+      TFHelper_0123456789876543210 CK CJ = FalseSym0+      TFHelper_0123456789876543210 CK CK = TrueSym0+      TFHelper_0123456789876543210 CK CL = FalseSym0+      TFHelper_0123456789876543210 CK CM = FalseSym0+      TFHelper_0123456789876543210 CK CN = FalseSym0+      TFHelper_0123456789876543210 CK CO = FalseSym0+      TFHelper_0123456789876543210 CK CP = FalseSym0+      TFHelper_0123456789876543210 CK CQ = FalseSym0+      TFHelper_0123456789876543210 CK CR = FalseSym0+      TFHelper_0123456789876543210 CK CS = FalseSym0+      TFHelper_0123456789876543210 CK CT = FalseSym0+      TFHelper_0123456789876543210 CK CU = FalseSym0+      TFHelper_0123456789876543210 CK CV = FalseSym0+      TFHelper_0123456789876543210 CK CW = FalseSym0+      TFHelper_0123456789876543210 CK CX = FalseSym0+      TFHelper_0123456789876543210 CK CY = FalseSym0+      TFHelper_0123456789876543210 CK CZ = FalseSym0+      TFHelper_0123456789876543210 CL CA = FalseSym0+      TFHelper_0123456789876543210 CL CB = FalseSym0+      TFHelper_0123456789876543210 CL CC = FalseSym0+      TFHelper_0123456789876543210 CL CD = FalseSym0+      TFHelper_0123456789876543210 CL CE = FalseSym0+      TFHelper_0123456789876543210 CL CF = FalseSym0+      TFHelper_0123456789876543210 CL CG = FalseSym0+      TFHelper_0123456789876543210 CL CH = FalseSym0+      TFHelper_0123456789876543210 CL CI = FalseSym0+      TFHelper_0123456789876543210 CL CJ = FalseSym0+      TFHelper_0123456789876543210 CL CK = FalseSym0+      TFHelper_0123456789876543210 CL CL = TrueSym0+      TFHelper_0123456789876543210 CL CM = FalseSym0+      TFHelper_0123456789876543210 CL CN = FalseSym0+      TFHelper_0123456789876543210 CL CO = FalseSym0+      TFHelper_0123456789876543210 CL CP = FalseSym0+      TFHelper_0123456789876543210 CL CQ = FalseSym0+      TFHelper_0123456789876543210 CL CR = FalseSym0+      TFHelper_0123456789876543210 CL CS = FalseSym0+      TFHelper_0123456789876543210 CL CT = FalseSym0+      TFHelper_0123456789876543210 CL CU = FalseSym0+      TFHelper_0123456789876543210 CL CV = FalseSym0+      TFHelper_0123456789876543210 CL CW = FalseSym0+      TFHelper_0123456789876543210 CL CX = FalseSym0+      TFHelper_0123456789876543210 CL CY = FalseSym0+      TFHelper_0123456789876543210 CL CZ = FalseSym0+      TFHelper_0123456789876543210 CM CA = FalseSym0+      TFHelper_0123456789876543210 CM CB = FalseSym0+      TFHelper_0123456789876543210 CM CC = FalseSym0+      TFHelper_0123456789876543210 CM CD = FalseSym0+      TFHelper_0123456789876543210 CM CE = FalseSym0+      TFHelper_0123456789876543210 CM CF = FalseSym0+      TFHelper_0123456789876543210 CM CG = FalseSym0+      TFHelper_0123456789876543210 CM CH = FalseSym0+      TFHelper_0123456789876543210 CM CI = FalseSym0+      TFHelper_0123456789876543210 CM CJ = FalseSym0+      TFHelper_0123456789876543210 CM CK = FalseSym0+      TFHelper_0123456789876543210 CM CL = FalseSym0+      TFHelper_0123456789876543210 CM CM = TrueSym0+      TFHelper_0123456789876543210 CM CN = FalseSym0+      TFHelper_0123456789876543210 CM CO = FalseSym0+      TFHelper_0123456789876543210 CM CP = FalseSym0+      TFHelper_0123456789876543210 CM CQ = FalseSym0+      TFHelper_0123456789876543210 CM CR = FalseSym0+      TFHelper_0123456789876543210 CM CS = FalseSym0+      TFHelper_0123456789876543210 CM CT = FalseSym0+      TFHelper_0123456789876543210 CM CU = FalseSym0+      TFHelper_0123456789876543210 CM CV = FalseSym0+      TFHelper_0123456789876543210 CM CW = FalseSym0+      TFHelper_0123456789876543210 CM CX = FalseSym0+      TFHelper_0123456789876543210 CM CY = FalseSym0+      TFHelper_0123456789876543210 CM CZ = FalseSym0+      TFHelper_0123456789876543210 CN CA = FalseSym0+      TFHelper_0123456789876543210 CN CB = FalseSym0+      TFHelper_0123456789876543210 CN CC = FalseSym0+      TFHelper_0123456789876543210 CN CD = FalseSym0+      TFHelper_0123456789876543210 CN CE = FalseSym0+      TFHelper_0123456789876543210 CN CF = FalseSym0+      TFHelper_0123456789876543210 CN CG = FalseSym0+      TFHelper_0123456789876543210 CN CH = FalseSym0+      TFHelper_0123456789876543210 CN CI = FalseSym0+      TFHelper_0123456789876543210 CN CJ = FalseSym0+      TFHelper_0123456789876543210 CN CK = FalseSym0+      TFHelper_0123456789876543210 CN CL = FalseSym0+      TFHelper_0123456789876543210 CN CM = FalseSym0+      TFHelper_0123456789876543210 CN CN = TrueSym0+      TFHelper_0123456789876543210 CN CO = FalseSym0+      TFHelper_0123456789876543210 CN CP = FalseSym0+      TFHelper_0123456789876543210 CN CQ = FalseSym0+      TFHelper_0123456789876543210 CN CR = FalseSym0+      TFHelper_0123456789876543210 CN CS = FalseSym0+      TFHelper_0123456789876543210 CN CT = FalseSym0+      TFHelper_0123456789876543210 CN CU = FalseSym0+      TFHelper_0123456789876543210 CN CV = FalseSym0+      TFHelper_0123456789876543210 CN CW = FalseSym0+      TFHelper_0123456789876543210 CN CX = FalseSym0+      TFHelper_0123456789876543210 CN CY = FalseSym0+      TFHelper_0123456789876543210 CN CZ = FalseSym0+      TFHelper_0123456789876543210 CO CA = FalseSym0+      TFHelper_0123456789876543210 CO CB = FalseSym0+      TFHelper_0123456789876543210 CO CC = FalseSym0+      TFHelper_0123456789876543210 CO CD = FalseSym0+      TFHelper_0123456789876543210 CO CE = FalseSym0+      TFHelper_0123456789876543210 CO CF = FalseSym0+      TFHelper_0123456789876543210 CO CG = FalseSym0+      TFHelper_0123456789876543210 CO CH = FalseSym0+      TFHelper_0123456789876543210 CO CI = FalseSym0+      TFHelper_0123456789876543210 CO CJ = FalseSym0+      TFHelper_0123456789876543210 CO CK = FalseSym0+      TFHelper_0123456789876543210 CO CL = FalseSym0+      TFHelper_0123456789876543210 CO CM = FalseSym0+      TFHelper_0123456789876543210 CO CN = FalseSym0+      TFHelper_0123456789876543210 CO CO = TrueSym0+      TFHelper_0123456789876543210 CO CP = FalseSym0+      TFHelper_0123456789876543210 CO CQ = FalseSym0+      TFHelper_0123456789876543210 CO CR = FalseSym0+      TFHelper_0123456789876543210 CO CS = FalseSym0+      TFHelper_0123456789876543210 CO CT = FalseSym0+      TFHelper_0123456789876543210 CO CU = FalseSym0+      TFHelper_0123456789876543210 CO CV = FalseSym0+      TFHelper_0123456789876543210 CO CW = FalseSym0+      TFHelper_0123456789876543210 CO CX = FalseSym0+      TFHelper_0123456789876543210 CO CY = FalseSym0+      TFHelper_0123456789876543210 CO CZ = FalseSym0+      TFHelper_0123456789876543210 CP CA = FalseSym0+      TFHelper_0123456789876543210 CP CB = FalseSym0+      TFHelper_0123456789876543210 CP CC = FalseSym0+      TFHelper_0123456789876543210 CP CD = FalseSym0+      TFHelper_0123456789876543210 CP CE = FalseSym0+      TFHelper_0123456789876543210 CP CF = FalseSym0+      TFHelper_0123456789876543210 CP CG = FalseSym0+      TFHelper_0123456789876543210 CP CH = FalseSym0+      TFHelper_0123456789876543210 CP CI = FalseSym0+      TFHelper_0123456789876543210 CP CJ = FalseSym0+      TFHelper_0123456789876543210 CP CK = FalseSym0+      TFHelper_0123456789876543210 CP CL = FalseSym0+      TFHelper_0123456789876543210 CP CM = FalseSym0+      TFHelper_0123456789876543210 CP CN = FalseSym0+      TFHelper_0123456789876543210 CP CO = FalseSym0+      TFHelper_0123456789876543210 CP CP = TrueSym0+      TFHelper_0123456789876543210 CP CQ = FalseSym0+      TFHelper_0123456789876543210 CP CR = FalseSym0+      TFHelper_0123456789876543210 CP CS = FalseSym0+      TFHelper_0123456789876543210 CP CT = FalseSym0+      TFHelper_0123456789876543210 CP CU = FalseSym0+      TFHelper_0123456789876543210 CP CV = FalseSym0+      TFHelper_0123456789876543210 CP CW = FalseSym0+      TFHelper_0123456789876543210 CP CX = FalseSym0+      TFHelper_0123456789876543210 CP CY = FalseSym0+      TFHelper_0123456789876543210 CP CZ = FalseSym0+      TFHelper_0123456789876543210 CQ CA = FalseSym0+      TFHelper_0123456789876543210 CQ CB = FalseSym0+      TFHelper_0123456789876543210 CQ CC = FalseSym0+      TFHelper_0123456789876543210 CQ CD = FalseSym0+      TFHelper_0123456789876543210 CQ CE = FalseSym0+      TFHelper_0123456789876543210 CQ CF = FalseSym0+      TFHelper_0123456789876543210 CQ CG = FalseSym0+      TFHelper_0123456789876543210 CQ CH = FalseSym0+      TFHelper_0123456789876543210 CQ CI = FalseSym0+      TFHelper_0123456789876543210 CQ CJ = FalseSym0+      TFHelper_0123456789876543210 CQ CK = FalseSym0+      TFHelper_0123456789876543210 CQ CL = FalseSym0+      TFHelper_0123456789876543210 CQ CM = FalseSym0+      TFHelper_0123456789876543210 CQ CN = FalseSym0+      TFHelper_0123456789876543210 CQ CO = FalseSym0+      TFHelper_0123456789876543210 CQ CP = FalseSym0+      TFHelper_0123456789876543210 CQ CQ = TrueSym0+      TFHelper_0123456789876543210 CQ CR = FalseSym0+      TFHelper_0123456789876543210 CQ CS = FalseSym0+      TFHelper_0123456789876543210 CQ CT = FalseSym0+      TFHelper_0123456789876543210 CQ CU = FalseSym0+      TFHelper_0123456789876543210 CQ CV = FalseSym0+      TFHelper_0123456789876543210 CQ CW = FalseSym0+      TFHelper_0123456789876543210 CQ CX = FalseSym0+      TFHelper_0123456789876543210 CQ CY = FalseSym0+      TFHelper_0123456789876543210 CQ CZ = FalseSym0+      TFHelper_0123456789876543210 CR CA = FalseSym0+      TFHelper_0123456789876543210 CR CB = FalseSym0+      TFHelper_0123456789876543210 CR CC = FalseSym0+      TFHelper_0123456789876543210 CR CD = FalseSym0+      TFHelper_0123456789876543210 CR CE = FalseSym0+      TFHelper_0123456789876543210 CR CF = FalseSym0+      TFHelper_0123456789876543210 CR CG = FalseSym0+      TFHelper_0123456789876543210 CR CH = FalseSym0+      TFHelper_0123456789876543210 CR CI = FalseSym0+      TFHelper_0123456789876543210 CR CJ = FalseSym0+      TFHelper_0123456789876543210 CR CK = FalseSym0+      TFHelper_0123456789876543210 CR CL = FalseSym0+      TFHelper_0123456789876543210 CR CM = FalseSym0+      TFHelper_0123456789876543210 CR CN = FalseSym0+      TFHelper_0123456789876543210 CR CO = FalseSym0+      TFHelper_0123456789876543210 CR CP = FalseSym0+      TFHelper_0123456789876543210 CR CQ = FalseSym0+      TFHelper_0123456789876543210 CR CR = TrueSym0+      TFHelper_0123456789876543210 CR CS = FalseSym0+      TFHelper_0123456789876543210 CR CT = FalseSym0+      TFHelper_0123456789876543210 CR CU = FalseSym0+      TFHelper_0123456789876543210 CR CV = FalseSym0+      TFHelper_0123456789876543210 CR CW = FalseSym0+      TFHelper_0123456789876543210 CR CX = FalseSym0+      TFHelper_0123456789876543210 CR CY = FalseSym0+      TFHelper_0123456789876543210 CR CZ = FalseSym0+      TFHelper_0123456789876543210 CS CA = FalseSym0+      TFHelper_0123456789876543210 CS CB = FalseSym0+      TFHelper_0123456789876543210 CS CC = FalseSym0+      TFHelper_0123456789876543210 CS CD = FalseSym0+      TFHelper_0123456789876543210 CS CE = FalseSym0+      TFHelper_0123456789876543210 CS CF = FalseSym0+      TFHelper_0123456789876543210 CS CG = FalseSym0+      TFHelper_0123456789876543210 CS CH = FalseSym0+      TFHelper_0123456789876543210 CS CI = FalseSym0+      TFHelper_0123456789876543210 CS CJ = FalseSym0+      TFHelper_0123456789876543210 CS CK = FalseSym0+      TFHelper_0123456789876543210 CS CL = FalseSym0+      TFHelper_0123456789876543210 CS CM = FalseSym0+      TFHelper_0123456789876543210 CS CN = FalseSym0+      TFHelper_0123456789876543210 CS CO = FalseSym0+      TFHelper_0123456789876543210 CS CP = FalseSym0+      TFHelper_0123456789876543210 CS CQ = FalseSym0+      TFHelper_0123456789876543210 CS CR = FalseSym0+      TFHelper_0123456789876543210 CS CS = TrueSym0+      TFHelper_0123456789876543210 CS CT = FalseSym0+      TFHelper_0123456789876543210 CS CU = FalseSym0+      TFHelper_0123456789876543210 CS CV = FalseSym0+      TFHelper_0123456789876543210 CS CW = FalseSym0+      TFHelper_0123456789876543210 CS CX = FalseSym0+      TFHelper_0123456789876543210 CS CY = FalseSym0+      TFHelper_0123456789876543210 CS CZ = FalseSym0+      TFHelper_0123456789876543210 CT CA = FalseSym0+      TFHelper_0123456789876543210 CT CB = FalseSym0+      TFHelper_0123456789876543210 CT CC = FalseSym0+      TFHelper_0123456789876543210 CT CD = FalseSym0+      TFHelper_0123456789876543210 CT CE = FalseSym0+      TFHelper_0123456789876543210 CT CF = FalseSym0+      TFHelper_0123456789876543210 CT CG = FalseSym0+      TFHelper_0123456789876543210 CT CH = FalseSym0+      TFHelper_0123456789876543210 CT CI = FalseSym0+      TFHelper_0123456789876543210 CT CJ = FalseSym0+      TFHelper_0123456789876543210 CT CK = FalseSym0+      TFHelper_0123456789876543210 CT CL = FalseSym0+      TFHelper_0123456789876543210 CT CM = FalseSym0+      TFHelper_0123456789876543210 CT CN = FalseSym0+      TFHelper_0123456789876543210 CT CO = FalseSym0+      TFHelper_0123456789876543210 CT CP = FalseSym0+      TFHelper_0123456789876543210 CT CQ = FalseSym0+      TFHelper_0123456789876543210 CT CR = FalseSym0+      TFHelper_0123456789876543210 CT CS = FalseSym0+      TFHelper_0123456789876543210 CT CT = TrueSym0+      TFHelper_0123456789876543210 CT CU = FalseSym0+      TFHelper_0123456789876543210 CT CV = FalseSym0+      TFHelper_0123456789876543210 CT CW = FalseSym0+      TFHelper_0123456789876543210 CT CX = FalseSym0+      TFHelper_0123456789876543210 CT CY = FalseSym0+      TFHelper_0123456789876543210 CT CZ = FalseSym0+      TFHelper_0123456789876543210 CU CA = FalseSym0+      TFHelper_0123456789876543210 CU CB = FalseSym0+      TFHelper_0123456789876543210 CU CC = FalseSym0+      TFHelper_0123456789876543210 CU CD = FalseSym0+      TFHelper_0123456789876543210 CU CE = FalseSym0+      TFHelper_0123456789876543210 CU CF = FalseSym0+      TFHelper_0123456789876543210 CU CG = FalseSym0+      TFHelper_0123456789876543210 CU CH = FalseSym0+      TFHelper_0123456789876543210 CU CI = FalseSym0+      TFHelper_0123456789876543210 CU CJ = FalseSym0+      TFHelper_0123456789876543210 CU CK = FalseSym0+      TFHelper_0123456789876543210 CU CL = FalseSym0+      TFHelper_0123456789876543210 CU CM = FalseSym0+      TFHelper_0123456789876543210 CU CN = FalseSym0+      TFHelper_0123456789876543210 CU CO = FalseSym0+      TFHelper_0123456789876543210 CU CP = FalseSym0+      TFHelper_0123456789876543210 CU CQ = FalseSym0+      TFHelper_0123456789876543210 CU CR = FalseSym0+      TFHelper_0123456789876543210 CU CS = FalseSym0+      TFHelper_0123456789876543210 CU CT = FalseSym0+      TFHelper_0123456789876543210 CU CU = TrueSym0+      TFHelper_0123456789876543210 CU CV = FalseSym0+      TFHelper_0123456789876543210 CU CW = FalseSym0+      TFHelper_0123456789876543210 CU CX = FalseSym0+      TFHelper_0123456789876543210 CU CY = FalseSym0+      TFHelper_0123456789876543210 CU CZ = FalseSym0+      TFHelper_0123456789876543210 CV CA = FalseSym0+      TFHelper_0123456789876543210 CV CB = FalseSym0+      TFHelper_0123456789876543210 CV CC = FalseSym0+      TFHelper_0123456789876543210 CV CD = FalseSym0+      TFHelper_0123456789876543210 CV CE = FalseSym0+      TFHelper_0123456789876543210 CV CF = FalseSym0+      TFHelper_0123456789876543210 CV CG = FalseSym0+      TFHelper_0123456789876543210 CV CH = FalseSym0+      TFHelper_0123456789876543210 CV CI = FalseSym0+      TFHelper_0123456789876543210 CV CJ = FalseSym0+      TFHelper_0123456789876543210 CV CK = FalseSym0+      TFHelper_0123456789876543210 CV CL = FalseSym0+      TFHelper_0123456789876543210 CV CM = FalseSym0+      TFHelper_0123456789876543210 CV CN = FalseSym0+      TFHelper_0123456789876543210 CV CO = FalseSym0+      TFHelper_0123456789876543210 CV CP = FalseSym0+      TFHelper_0123456789876543210 CV CQ = FalseSym0+      TFHelper_0123456789876543210 CV CR = FalseSym0+      TFHelper_0123456789876543210 CV CS = FalseSym0+      TFHelper_0123456789876543210 CV CT = FalseSym0+      TFHelper_0123456789876543210 CV CU = FalseSym0+      TFHelper_0123456789876543210 CV CV = TrueSym0+      TFHelper_0123456789876543210 CV CW = FalseSym0+      TFHelper_0123456789876543210 CV CX = FalseSym0+      TFHelper_0123456789876543210 CV CY = FalseSym0+      TFHelper_0123456789876543210 CV CZ = FalseSym0+      TFHelper_0123456789876543210 CW CA = FalseSym0+      TFHelper_0123456789876543210 CW CB = FalseSym0+      TFHelper_0123456789876543210 CW CC = FalseSym0+      TFHelper_0123456789876543210 CW CD = FalseSym0+      TFHelper_0123456789876543210 CW CE = FalseSym0+      TFHelper_0123456789876543210 CW CF = FalseSym0+      TFHelper_0123456789876543210 CW CG = FalseSym0+      TFHelper_0123456789876543210 CW CH = FalseSym0+      TFHelper_0123456789876543210 CW CI = FalseSym0+      TFHelper_0123456789876543210 CW CJ = FalseSym0+      TFHelper_0123456789876543210 CW CK = FalseSym0+      TFHelper_0123456789876543210 CW CL = FalseSym0+      TFHelper_0123456789876543210 CW CM = FalseSym0+      TFHelper_0123456789876543210 CW CN = FalseSym0+      TFHelper_0123456789876543210 CW CO = FalseSym0+      TFHelper_0123456789876543210 CW CP = FalseSym0+      TFHelper_0123456789876543210 CW CQ = FalseSym0+      TFHelper_0123456789876543210 CW CR = FalseSym0+      TFHelper_0123456789876543210 CW CS = FalseSym0+      TFHelper_0123456789876543210 CW CT = FalseSym0+      TFHelper_0123456789876543210 CW CU = FalseSym0+      TFHelper_0123456789876543210 CW CV = FalseSym0+      TFHelper_0123456789876543210 CW CW = TrueSym0+      TFHelper_0123456789876543210 CW CX = FalseSym0+      TFHelper_0123456789876543210 CW CY = FalseSym0+      TFHelper_0123456789876543210 CW CZ = FalseSym0+      TFHelper_0123456789876543210 CX CA = FalseSym0+      TFHelper_0123456789876543210 CX CB = FalseSym0+      TFHelper_0123456789876543210 CX CC = FalseSym0+      TFHelper_0123456789876543210 CX CD = FalseSym0+      TFHelper_0123456789876543210 CX CE = FalseSym0+      TFHelper_0123456789876543210 CX CF = FalseSym0+      TFHelper_0123456789876543210 CX CG = FalseSym0+      TFHelper_0123456789876543210 CX CH = FalseSym0+      TFHelper_0123456789876543210 CX CI = FalseSym0+      TFHelper_0123456789876543210 CX CJ = FalseSym0+      TFHelper_0123456789876543210 CX CK = FalseSym0+      TFHelper_0123456789876543210 CX CL = FalseSym0+      TFHelper_0123456789876543210 CX CM = FalseSym0+      TFHelper_0123456789876543210 CX CN = FalseSym0+      TFHelper_0123456789876543210 CX CO = FalseSym0+      TFHelper_0123456789876543210 CX CP = FalseSym0+      TFHelper_0123456789876543210 CX CQ = FalseSym0+      TFHelper_0123456789876543210 CX CR = FalseSym0+      TFHelper_0123456789876543210 CX CS = FalseSym0+      TFHelper_0123456789876543210 CX CT = FalseSym0+      TFHelper_0123456789876543210 CX CU = FalseSym0+      TFHelper_0123456789876543210 CX CV = FalseSym0+      TFHelper_0123456789876543210 CX CW = FalseSym0+      TFHelper_0123456789876543210 CX CX = TrueSym0+      TFHelper_0123456789876543210 CX CY = FalseSym0+      TFHelper_0123456789876543210 CX CZ = FalseSym0+      TFHelper_0123456789876543210 CY CA = FalseSym0+      TFHelper_0123456789876543210 CY CB = FalseSym0+      TFHelper_0123456789876543210 CY CC = FalseSym0+      TFHelper_0123456789876543210 CY CD = FalseSym0+      TFHelper_0123456789876543210 CY CE = FalseSym0+      TFHelper_0123456789876543210 CY CF = FalseSym0+      TFHelper_0123456789876543210 CY CG = FalseSym0+      TFHelper_0123456789876543210 CY CH = FalseSym0+      TFHelper_0123456789876543210 CY CI = FalseSym0+      TFHelper_0123456789876543210 CY CJ = FalseSym0+      TFHelper_0123456789876543210 CY CK = FalseSym0+      TFHelper_0123456789876543210 CY CL = FalseSym0+      TFHelper_0123456789876543210 CY CM = FalseSym0+      TFHelper_0123456789876543210 CY CN = FalseSym0+      TFHelper_0123456789876543210 CY CO = FalseSym0+      TFHelper_0123456789876543210 CY CP = FalseSym0+      TFHelper_0123456789876543210 CY CQ = FalseSym0+      TFHelper_0123456789876543210 CY CR = FalseSym0+      TFHelper_0123456789876543210 CY CS = FalseSym0+      TFHelper_0123456789876543210 CY CT = FalseSym0+      TFHelper_0123456789876543210 CY CU = FalseSym0+      TFHelper_0123456789876543210 CY CV = FalseSym0+      TFHelper_0123456789876543210 CY CW = FalseSym0+      TFHelper_0123456789876543210 CY CX = FalseSym0+      TFHelper_0123456789876543210 CY CY = TrueSym0+      TFHelper_0123456789876543210 CY CZ = FalseSym0+      TFHelper_0123456789876543210 CZ CA = FalseSym0+      TFHelper_0123456789876543210 CZ CB = FalseSym0+      TFHelper_0123456789876543210 CZ CC = FalseSym0+      TFHelper_0123456789876543210 CZ CD = FalseSym0+      TFHelper_0123456789876543210 CZ CE = FalseSym0+      TFHelper_0123456789876543210 CZ CF = FalseSym0+      TFHelper_0123456789876543210 CZ CG = FalseSym0+      TFHelper_0123456789876543210 CZ CH = FalseSym0+      TFHelper_0123456789876543210 CZ CI = FalseSym0+      TFHelper_0123456789876543210 CZ CJ = FalseSym0+      TFHelper_0123456789876543210 CZ CK = FalseSym0+      TFHelper_0123456789876543210 CZ CL = FalseSym0+      TFHelper_0123456789876543210 CZ CM = FalseSym0+      TFHelper_0123456789876543210 CZ CN = FalseSym0+      TFHelper_0123456789876543210 CZ CO = FalseSym0+      TFHelper_0123456789876543210 CZ CP = FalseSym0+      TFHelper_0123456789876543210 CZ CQ = FalseSym0+      TFHelper_0123456789876543210 CZ CR = FalseSym0+      TFHelper_0123456789876543210 CZ CS = FalseSym0+      TFHelper_0123456789876543210 CZ CT = FalseSym0+      TFHelper_0123456789876543210 CZ CU = FalseSym0+      TFHelper_0123456789876543210 CZ CV = FalseSym0+      TFHelper_0123456789876543210 CZ CW = FalseSym0+      TFHelper_0123456789876543210 CZ CX = FalseSym0+      TFHelper_0123456789876543210 CZ CY = FalseSym0+      TFHelper_0123456789876543210 CZ CZ = TrueSym0+    type TFHelper_0123456789876543210Sym0 :: (~>) AChar ((~>) AChar Bool)+    data TFHelper_0123456789876543210Sym0 :: (~>) AChar ((~>) AChar Bool)+      where+        TFHelper_0123456789876543210Sym0KindInference :: SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>+                                                         TFHelper_0123456789876543210Sym0 a0123456789876543210+    type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210+    instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where+      suppressUnusedWarnings+        = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())+    type TFHelper_0123456789876543210Sym1 :: AChar -> (~>) AChar Bool+    data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: AChar) :: (~>) AChar Bool+      where+        TFHelper_0123456789876543210Sym1KindInference :: SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>+                                                         TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+    type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where+      suppressUnusedWarnings+        = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())+    type TFHelper_0123456789876543210Sym2 :: AChar -> AChar -> Bool+    type family TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: AChar) (a0123456789876543210 :: AChar) :: Bool where+      TFHelper_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+    instance PEq AChar where+      type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a+    sLookup ::+      forall (t :: [AChar]) (t :: Schema). Sing t+                                           -> Sing t -> Sing (Apply (Apply LookupSym0 t) t :: U)+    sOccurs ::+      forall (t :: [AChar]) (t :: Schema). Sing t+                                           -> Sing t -> Sing (Apply (Apply OccursSym0 t) t :: Bool)+    sDisjoint ::+      forall (t :: Schema) (t :: Schema). Sing t+                                          -> Sing t -> Sing (Apply (Apply DisjointSym0 t) t :: Bool)+    sAttrNotIn ::+      forall (t :: Attribute) (t :: Schema). Sing t+                                             -> Sing t+                                                -> Sing (Apply (Apply AttrNotInSym0 t) t :: Bool)+    sAppend ::+      forall (t :: Schema) (t :: Schema). Sing t+                                          -> Sing t -> Sing (Apply (Apply AppendSym0 t) t :: Schema)+    sLookup _ (SSch SNil) = sUndefined+    sLookup+      (sName :: Sing name)+      (SSch (SCons (SAttr (sName' :: Sing name') (sU :: Sing u))+                   (sAttrs :: Sing attrs)))+      = let+          sScrutinee_0123456789876543210 ::+            Sing @_ (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs)+          sScrutinee_0123456789876543210+            = (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sName))+                sName'+        in+          (GHC.Base.id+             @(Sing (Case_0123456789876543210 name name' u attrs (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs) :: U)))+            (case sScrutinee_0123456789876543210 of+               STrue -> sU+               SFalse+                 -> (applySing ((applySing ((singFun2 @LookupSym0) sLookup)) sName))+                      ((applySing ((singFun1 @SchSym0) SSch)) sAttrs))+    sOccurs _ (SSch SNil) = SFalse+    sOccurs+      (sName :: Sing name)+      (SSch (SCons (SAttr (sName' :: Sing name') _)+                   (sAttrs :: Sing attrs)))+      = (applySing+           ((applySing ((singFun2 @(||@#@$)) (%||)))+              ((applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sName))+                 sName')))+          ((applySing ((applySing ((singFun2 @OccursSym0) sOccurs)) sName))+             ((applySing ((singFun1 @SchSym0) SSch)) sAttrs))+    sDisjoint (SSch SNil) _ = STrue+    sDisjoint+      (SSch (SCons (sH :: Sing h) (sT :: Sing t)))+      (sS :: Sing s)+      = (applySing+           ((applySing ((singFun2 @(&&@#@$)) (%&&)))+              ((applySing+                  ((applySing ((singFun2 @AttrNotInSym0) sAttrNotIn)) sH))+                 sS)))+          ((applySing+              ((applySing ((singFun2 @DisjointSym0) sDisjoint))+                 ((applySing ((singFun1 @SchSym0) SSch)) sT)))+             sS)+    sAttrNotIn _ (SSch SNil) = STrue+    sAttrNotIn+      (SAttr (sName :: Sing name) (sU :: Sing u))+      (SSch (SCons (SAttr (sName' :: Sing name') _) (sT :: Sing t)))+      = (applySing+           ((applySing ((singFun2 @(&&@#@$)) (%&&)))+              ((applySing ((applySing ((singFun2 @(/=@#@$)) (%/=))) sName))+                 sName')))+          ((applySing+              ((applySing ((singFun2 @AttrNotInSym0) sAttrNotIn))+                 ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sName)) sU)))+             ((applySing ((singFun1 @SchSym0) SSch)) sT))+    sAppend (SSch (sS1 :: Sing s1)) (SSch (sS2 :: Sing s2))+      = (applySing ((singFun1 @SchSym0) SSch))+          ((applySing ((applySing ((singFun2 @(++@#@$)) (%++))) sS1)) sS2)+    instance SingI (LookupSym0 :: (~>) [AChar] ((~>) Schema U)) where+      sing = (singFun2 @LookupSym0) sLookup+    instance SingI d =>+             SingI (LookupSym1 (d :: [AChar]) :: (~>) Schema U) where+      sing = (singFun1 @(LookupSym1 (d :: [AChar]))) (sLookup (sing @d))+    instance SingI1 (LookupSym1 :: [AChar] -> (~>) Schema U) where+      liftSing (s :: Sing (d :: [AChar]))+        = (singFun1 @(LookupSym1 (d :: [AChar]))) (sLookup s)+    instance SingI (OccursSym0 :: (~>) [AChar] ((~>) Schema Bool)) where+      sing = (singFun2 @OccursSym0) sOccurs+    instance SingI d =>+             SingI (OccursSym1 (d :: [AChar]) :: (~>) Schema Bool) where+      sing = (singFun1 @(OccursSym1 (d :: [AChar]))) (sOccurs (sing @d))+    instance SingI1 (OccursSym1 :: [AChar] -> (~>) Schema Bool) where+      liftSing (s :: Sing (d :: [AChar]))+        = (singFun1 @(OccursSym1 (d :: [AChar]))) (sOccurs s)+    instance SingI (DisjointSym0 :: (~>) Schema ((~>) Schema Bool)) where+      sing = (singFun2 @DisjointSym0) sDisjoint+    instance SingI d =>+             SingI (DisjointSym1 (d :: Schema) :: (~>) Schema Bool) where+      sing+        = (singFun1 @(DisjointSym1 (d :: Schema))) (sDisjoint (sing @d))+    instance SingI1 (DisjointSym1 :: Schema -> (~>) Schema Bool) where+      liftSing (s :: Sing (d :: Schema))+        = (singFun1 @(DisjointSym1 (d :: Schema))) (sDisjoint s)+    instance SingI (AttrNotInSym0 :: (~>) Attribute ((~>) Schema Bool)) where+      sing = (singFun2 @AttrNotInSym0) sAttrNotIn+    instance SingI d =>+             SingI (AttrNotInSym1 (d :: Attribute) :: (~>) Schema Bool) where+      sing+        = (singFun1 @(AttrNotInSym1 (d :: Attribute)))+            (sAttrNotIn (sing @d))+    instance SingI1 (AttrNotInSym1 :: Attribute+                                      -> (~>) Schema Bool) where+      liftSing (s :: Sing (d :: Attribute))+        = (singFun1 @(AttrNotInSym1 (d :: Attribute))) (sAttrNotIn s)+    instance SingI (AppendSym0 :: (~>) Schema ((~>) Schema Schema)) where+      sing = (singFun2 @AppendSym0) sAppend+    instance SingI d =>+             SingI (AppendSym1 (d :: Schema) :: (~>) Schema Schema) where+      sing = (singFun1 @(AppendSym1 (d :: Schema))) (sAppend (sing @d))+    instance SingI1 (AppendSym1 :: Schema -> (~>) Schema Schema) where+      liftSing (s :: Sing (d :: Schema))+        = (singFun1 @(AppendSym1 (d :: Schema))) (sAppend s)+    data SU :: U -> Type+      where+        SBOOL :: SU (BOOL :: U)+        SSTRING :: SU (STRING :: U)+        SNAT :: SU (NAT :: U)+        SVEC :: forall (n :: U) (n :: Nat).+                (Sing n) -> (Sing n) -> SU (VEC n n :: U)+    type instance Sing @U = SU+    instance SingKind U where+      type Demote 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 :: Demote U) (b :: Demote Nat))+        = case ((,) (toSing b :: SomeSing U)) (toSing b :: SomeSing Nat) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SVEC c) c)+    data SAChar :: AChar -> Type+      where+        SCA :: SAChar (CA :: AChar)+        SCB :: SAChar (CB :: AChar)+        SCC :: SAChar (CC :: AChar)+        SCD :: SAChar (CD :: AChar)+        SCE :: SAChar (CE :: AChar)+        SCF :: SAChar (CF :: AChar)+        SCG :: SAChar (CG :: AChar)+        SCH :: SAChar (CH :: AChar)+        SCI :: SAChar (CI :: AChar)+        SCJ :: SAChar (CJ :: AChar)+        SCK :: SAChar (CK :: AChar)+        SCL :: SAChar (CL :: AChar)+        SCM :: SAChar (CM :: AChar)+        SCN :: SAChar (CN :: AChar)+        SCO :: SAChar (CO :: AChar)+        SCP :: SAChar (CP :: AChar)+        SCQ :: SAChar (CQ :: AChar)+        SCR :: SAChar (CR :: AChar)+        SCS :: SAChar (CS :: AChar)+        SCT :: SAChar (CT :: AChar)+        SCU :: SAChar (CU :: AChar)+        SCV :: SAChar (CV :: AChar)+        SCW :: SAChar (CW :: AChar)+        SCX :: SAChar (CX :: AChar)+        SCY :: SAChar (CY :: AChar)+        SCZ :: SAChar (CZ :: AChar)+    type instance Sing @AChar = SAChar+    instance SingKind AChar where+      type Demote 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+    data SAttribute :: Attribute -> Type+      where+        SAttr :: forall (n :: [AChar]) (n :: U).+                 (Sing n) -> (Sing n) -> SAttribute (Attr n n :: Attribute)+    type instance Sing @Attribute = SAttribute+    instance SingKind Attribute where+      type Demote Attribute = Attribute+      fromSing (SAttr b b) = (Attr (fromSing b)) (fromSing b)+      toSing (Attr (b :: Demote [AChar]) (b :: Demote U))+        = case+              ((,) (toSing b :: SomeSing [AChar])) (toSing b :: SomeSing U)+          of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SAttr c) c)+    data SSchema :: Schema -> Type+      where+        SSch :: forall (n :: [Attribute]).+                (Sing n) -> SSchema (Sch n :: Schema)+    type instance Sing @Schema = SSchema+    instance SingKind Schema where+      type Demote Schema = Schema+      fromSing (SSch b) = Sch (fromSing b)+      toSing (Sch (b :: Demote [Attribute]))+        = case toSing b :: SomeSing [Attribute] of+            SomeSing c -> SomeSing (SSch c)+    instance (SEq U, SEq Nat) => SEq U where+      (%==) ::+        forall (t1 :: U) (t2 :: U). Sing t1+                                    -> Sing t2+                                       -> Sing (Apply (Apply ((==@#@$) :: TyFun U ((~>) U Bool)+                                                                          -> Type) t1) t2)+      (%==) 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 (sA_0123456789876543210 :: Sing a_0123456789876543210)+              (sA_0123456789876543210 :: Sing a_0123456789876543210))+        (SVEC (sB_0123456789876543210 :: Sing b_0123456789876543210)+              (sB_0123456789876543210 :: Sing b_0123456789876543210))+        = (applySing+             ((applySing ((singFun2 @(&&@#@$)) (%&&)))+                ((applySing+                    ((applySing ((singFun2 @(==@#@$)) (%==))) sA_0123456789876543210))+                   sB_0123456789876543210)))+            ((applySing+                ((applySing ((singFun2 @(==@#@$)) (%==))) sA_0123456789876543210))+               sB_0123456789876543210)+    instance (SShow U, SShow Nat) => SShow U where+      sShowsPrec ::+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: U)+               (t3 :: Symbol). Sing t1+                               -> Sing t2+                                  -> Sing t3+                                     -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) U ((~>) Symbol Symbol))+                                                                                    -> Type) t1) t2) t3)+      sShowsPrec+        _+        SBOOL+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "BOOL")))+            sA_0123456789876543210+      sShowsPrec+        _+        SSTRING+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "STRING")))+            sA_0123456789876543210+      sShowsPrec+        _+        SNAT+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "NAT")))+            sA_0123456789876543210+      sShowsPrec+        (sP_0123456789876543210 :: Sing p_0123456789876543210)+        (SVEC (sArg_0123456789876543210 :: Sing arg_0123456789876543210)+              (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing+                 ((applySing ((singFun3 @ShowParenSym0) sShowParen))+                    ((applySing+                        ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+                       (sFromInteger (sing :: Sing 10)))))+                ((applySing+                    ((applySing ((singFun3 @(.@#@$)) (%.)))+                       ((applySing ((singFun2 @ShowStringSym0) sShowString))+                          (sing :: Sing "VEC "))))+                   ((applySing+                       ((applySing ((singFun3 @(.@#@$)) (%.)))+                          ((applySing+                              ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+                                 (sFromInteger (sing :: Sing 11))))+                             sArg_0123456789876543210)))+                      ((applySing+                          ((applySing ((singFun3 @(.@#@$)) (%.)))+                             ((singFun1 @ShowSpaceSym0) sShowSpace)))+                         ((applySing+                             ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+                                (sFromInteger (sing :: Sing 11))))+                            sArg_0123456789876543210))))))+            sA_0123456789876543210+    instance SShow AChar where+      sShowsPrec ::+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: AChar)+               (t3 :: Symbol). Sing t1+                               -> Sing t2+                                  -> Sing t3+                                     -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) AChar ((~>) Symbol Symbol))+                                                                                    -> Type) t1) t2) t3)+      sShowsPrec+        _+        SCA+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CA")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCB+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CB")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCC+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CC")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCD+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CD")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCE+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CE")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCF+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CF")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCG+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CG")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCH+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CH")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCI+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CI")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCJ+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CJ")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCK+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CK")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCL+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CL")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCM+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CM")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCN+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CN")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCO+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CO")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCP+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CP")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCQ+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CQ")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCR+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CR")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCS+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CS")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCT+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CT")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCU+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CU")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCV+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CV")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCW+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CW")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCX+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CX")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCY+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CY")))+            sA_0123456789876543210+      sShowsPrec+        _+        SCZ+        (sA_0123456789876543210 :: Sing a_0123456789876543210)+        = (applySing+             ((applySing ((singFun2 @ShowStringSym0) sShowString))+                (sing :: Sing "CZ")))+            sA_0123456789876543210+    instance SEq AChar where+      (%==) ::+        forall (t1 :: AChar) (t2 :: AChar). Sing t1+                                            -> Sing t2+                                               -> Sing (Apply (Apply ((==@#@$) :: TyFun AChar ((~>) AChar Bool)+                                                                                  -> Type) t1) t2)+      (%==) 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 U, SDecide Nat) => SDecide U where+      (%~) SBOOL SBOOL = Proved Refl+      (%~) SBOOL SSTRING = Disproved (\ x -> case x of {})+      (%~) SBOOL SNAT = Disproved (\ x -> case x of {})+      (%~) SBOOL (SVEC _ _) = Disproved (\ x -> case x of {})+      (%~) SSTRING SBOOL = Disproved (\ x -> case x of {})+      (%~) SSTRING SSTRING = Proved Refl+      (%~) SSTRING SNAT = Disproved (\ x -> case x of {})+      (%~) SSTRING (SVEC _ _) = Disproved (\ x -> case x of {})+      (%~) SNAT SBOOL = Disproved (\ x -> case x of {})+      (%~) SNAT SSTRING = Disproved (\ x -> case x of {})+      (%~) SNAT SNAT = Proved Refl+      (%~) SNAT (SVEC _ _) = Disproved (\ x -> case x of {})+      (%~) (SVEC _ _) SBOOL = Disproved (\ x -> case x of {})+      (%~) (SVEC _ _) SSTRING = Disproved (\ x -> case x of {})+      (%~) (SVEC _ _) SNAT = Disproved (\ x -> case x of {})+      (%~) (SVEC a a) (SVEC b b)+        = case ((,) (((%~) a) b)) (((%~) a) b) of+            (,) (Proved Refl) (Proved Refl) -> Proved Refl+            (,) (Disproved contra) _+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)+            (,) _ (Disproved contra)+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)+    instance (SDecide U, SDecide Nat) =>+             Data.Type.Equality.TestEquality (SU :: U -> Type) where+      Data.Type.Equality.testEquality+        = Data.Singletons.Decide.decideEquality+    instance (SDecide U, SDecide Nat) =>+             Data.Type.Coercion.TestCoercion (SU :: U -> Type) where+      Data.Type.Coercion.testCoercion+        = Data.Singletons.Decide.decideCoercion+    instance SDecide AChar where+      (%~) SCA SCA = Proved Refl+      (%~) SCA SCB = Disproved (\ x -> case x of {})+      (%~) SCA SCC = Disproved (\ x -> case x of {})+      (%~) SCA SCD = Disproved (\ x -> case x of {})+      (%~) SCA SCE = Disproved (\ x -> case x of {})+      (%~) SCA SCF = Disproved (\ x -> case x of {})+      (%~) SCA SCG = Disproved (\ x -> case x of {})+      (%~) SCA SCH = Disproved (\ x -> case x of {})+      (%~) SCA SCI = Disproved (\ x -> case x of {})+      (%~) SCA SCJ = Disproved (\ x -> case x of {})+      (%~) SCA SCK = Disproved (\ x -> case x of {})+      (%~) SCA SCL = Disproved (\ x -> case x of {})+      (%~) SCA SCM = Disproved (\ x -> case x of {})+      (%~) SCA SCN = Disproved (\ x -> case x of {})+      (%~) SCA SCO = Disproved (\ x -> case x of {})+      (%~) SCA SCP = Disproved (\ x -> case x of {})+      (%~) SCA SCQ = Disproved (\ x -> case x of {})+      (%~) SCA SCR = Disproved (\ x -> case x of {})+      (%~) SCA SCS = Disproved (\ x -> case x of {})+      (%~) SCA SCT = Disproved (\ x -> case x of {})+      (%~) SCA SCU = Disproved (\ x -> case x of {})+      (%~) SCA SCV = Disproved (\ x -> case x of {})+      (%~) SCA SCW = Disproved (\ x -> case x of {})+      (%~) SCA SCX = Disproved (\ x -> case x of {})+      (%~) SCA SCY = Disproved (\ x -> case x of {})+      (%~) SCA SCZ = Disproved (\ x -> case x of {})+      (%~) SCB SCA = Disproved (\ x -> case x of {})+      (%~) SCB SCB = Proved Refl+      (%~) SCB SCC = Disproved (\ x -> case x of {})+      (%~) SCB SCD = Disproved (\ x -> case x of {})+      (%~) SCB SCE = Disproved (\ x -> case x of {})+      (%~) SCB SCF = Disproved (\ x -> case x of {})+      (%~) SCB SCG = Disproved (\ x -> case x of {})+      (%~) SCB SCH = Disproved (\ x -> case x of {})+      (%~) SCB SCI = Disproved (\ x -> case x of {})+      (%~) SCB SCJ = Disproved (\ x -> case x of {})+      (%~) SCB SCK = Disproved (\ x -> case x of {})+      (%~) SCB SCL = Disproved (\ x -> case x of {})+      (%~) SCB SCM = Disproved (\ x -> case x of {})+      (%~) SCB SCN = Disproved (\ x -> case x of {})+      (%~) SCB SCO = Disproved (\ x -> case x of {})+      (%~) SCB SCP = Disproved (\ x -> case x of {})+      (%~) SCB SCQ = Disproved (\ x -> case x of {})+      (%~) SCB SCR = Disproved (\ x -> case x of {})+      (%~) SCB SCS = Disproved (\ x -> case x of {})+      (%~) SCB SCT = Disproved (\ x -> case x of {})+      (%~) SCB SCU = Disproved (\ x -> case x of {})+      (%~) SCB SCV = Disproved (\ x -> case x of {})+      (%~) SCB SCW = Disproved (\ x -> case x of {})+      (%~) SCB SCX = Disproved (\ x -> case x of {})+      (%~) SCB SCY = Disproved (\ x -> case x of {})+      (%~) SCB SCZ = Disproved (\ x -> case x of {})+      (%~) SCC SCA = Disproved (\ x -> case x of {})+      (%~) SCC SCB = Disproved (\ x -> case x of {})+      (%~) SCC SCC = Proved Refl+      (%~) SCC SCD = Disproved (\ x -> case x of {})+      (%~) SCC SCE = Disproved (\ x -> case x of {})+      (%~) SCC SCF = Disproved (\ x -> case x of {})+      (%~) SCC SCG = Disproved (\ x -> case x of {})+      (%~) SCC SCH = Disproved (\ x -> case x of {})+      (%~) SCC SCI = Disproved (\ x -> case x of {})+      (%~) SCC SCJ = Disproved (\ x -> case x of {})+      (%~) SCC SCK = Disproved (\ x -> case x of {})+      (%~) SCC SCL = Disproved (\ x -> case x of {})+      (%~) SCC SCM = Disproved (\ x -> case x of {})+      (%~) SCC SCN = Disproved (\ x -> case x of {})+      (%~) SCC SCO = Disproved (\ x -> case x of {})+      (%~) SCC SCP = Disproved (\ x -> case x of {})+      (%~) SCC SCQ = Disproved (\ x -> case x of {})+      (%~) SCC SCR = Disproved (\ x -> case x of {})+      (%~) SCC SCS = Disproved (\ x -> case x of {})+      (%~) SCC SCT = Disproved (\ x -> case x of {})+      (%~) SCC SCU = Disproved (\ x -> case x of {})+      (%~) SCC SCV = Disproved (\ x -> case x of {})+      (%~) SCC SCW = Disproved (\ x -> case x of {})+      (%~) SCC SCX = Disproved (\ x -> case x of {})+      (%~) SCC SCY = Disproved (\ x -> case x of {})+      (%~) SCC SCZ = Disproved (\ x -> case x of {})+      (%~) SCD SCA = Disproved (\ x -> case x of {})+      (%~) SCD SCB = Disproved (\ x -> case x of {})+      (%~) SCD SCC = Disproved (\ x -> case x of {})+      (%~) SCD SCD = Proved Refl+      (%~) SCD SCE = Disproved (\ x -> case x of {})+      (%~) SCD SCF = Disproved (\ x -> case x of {})+      (%~) SCD SCG = Disproved (\ x -> case x of {})+      (%~) SCD SCH = Disproved (\ x -> case x of {})+      (%~) SCD SCI = Disproved (\ x -> case x of {})+      (%~) SCD SCJ = Disproved (\ x -> case x of {})+      (%~) SCD SCK = Disproved (\ x -> case x of {})+      (%~) SCD SCL = Disproved (\ x -> case x of {})+      (%~) SCD SCM = Disproved (\ x -> case x of {})+      (%~) SCD SCN = Disproved (\ x -> case x of {})+      (%~) SCD SCO = Disproved (\ x -> case x of {})+      (%~) SCD SCP = Disproved (\ x -> case x of {})+      (%~) SCD SCQ = Disproved (\ x -> case x of {})+      (%~) SCD SCR = Disproved (\ x -> case x of {})+      (%~) SCD SCS = Disproved (\ x -> case x of {})+      (%~) SCD SCT = Disproved (\ x -> case x of {})+      (%~) SCD SCU = Disproved (\ x -> case x of {})+      (%~) SCD SCV = Disproved (\ x -> case x of {})+      (%~) SCD SCW = Disproved (\ x -> case x of {})+      (%~) SCD SCX = Disproved (\ x -> case x of {})+      (%~) SCD SCY = Disproved (\ x -> case x of {})+      (%~) SCD SCZ = Disproved (\ x -> case x of {})+      (%~) SCE SCA = Disproved (\ x -> case x of {})+      (%~) SCE SCB = Disproved (\ x -> case x of {})+      (%~) SCE SCC = Disproved (\ x -> case x of {})+      (%~) SCE SCD = Disproved (\ x -> case x of {})+      (%~) SCE SCE = Proved Refl+      (%~) SCE SCF = Disproved (\ x -> case x of {})+      (%~) SCE SCG = Disproved (\ x -> case x of {})+      (%~) SCE SCH = Disproved (\ x -> case x of {})+      (%~) SCE SCI = Disproved (\ x -> case x of {})+      (%~) SCE SCJ = Disproved (\ x -> case x of {})+      (%~) SCE SCK = Disproved (\ x -> case x of {})+      (%~) SCE SCL = Disproved (\ x -> case x of {})+      (%~) SCE SCM = Disproved (\ x -> case x of {})+      (%~) SCE SCN = Disproved (\ x -> case x of {})+      (%~) SCE SCO = Disproved (\ x -> case x of {})+      (%~) SCE SCP = Disproved (\ x -> case x of {})+      (%~) SCE SCQ = Disproved (\ x -> case x of {})+      (%~) SCE SCR = Disproved (\ x -> case x of {})+      (%~) SCE SCS = Disproved (\ x -> case x of {})+      (%~) SCE SCT = Disproved (\ x -> case x of {})+      (%~) SCE SCU = Disproved (\ x -> case x of {})+      (%~) SCE SCV = Disproved (\ x -> case x of {})+      (%~) SCE SCW = Disproved (\ x -> case x of {})+      (%~) SCE SCX = Disproved (\ x -> case x of {})+      (%~) SCE SCY = Disproved (\ x -> case x of {})+      (%~) SCE SCZ = Disproved (\ x -> case x of {})+      (%~) SCF SCA = Disproved (\ x -> case x of {})+      (%~) SCF SCB = Disproved (\ x -> case x of {})+      (%~) SCF SCC = Disproved (\ x -> case x of {})+      (%~) SCF SCD = Disproved (\ x -> case x of {})+      (%~) SCF SCE = Disproved (\ x -> case x of {})+      (%~) SCF SCF = Proved Refl+      (%~) SCF SCG = Disproved (\ x -> case x of {})+      (%~) SCF SCH = Disproved (\ x -> case x of {})+      (%~) SCF SCI = Disproved (\ x -> case x of {})+      (%~) SCF SCJ = Disproved (\ x -> case x of {})+      (%~) SCF SCK = Disproved (\ x -> case x of {})+      (%~) SCF SCL = Disproved (\ x -> case x of {})+      (%~) SCF SCM = Disproved (\ x -> case x of {})+      (%~) SCF SCN = Disproved (\ x -> case x of {})+      (%~) SCF SCO = Disproved (\ x -> case x of {})+      (%~) SCF SCP = Disproved (\ x -> case x of {})+      (%~) SCF SCQ = Disproved (\ x -> case x of {})+      (%~) SCF SCR = Disproved (\ x -> case x of {})+      (%~) SCF SCS = Disproved (\ x -> case x of {})+      (%~) SCF SCT = Disproved (\ x -> case x of {})+      (%~) SCF SCU = Disproved (\ x -> case x of {})+      (%~) SCF SCV = Disproved (\ x -> case x of {})+      (%~) SCF SCW = Disproved (\ x -> case x of {})+      (%~) SCF SCX = Disproved (\ x -> case x of {})+      (%~) SCF SCY = Disproved (\ x -> case x of {})+      (%~) SCF SCZ = Disproved (\ x -> case x of {})+      (%~) SCG SCA = Disproved (\ x -> case x of {})+      (%~) SCG SCB = Disproved (\ x -> case x of {})+      (%~) SCG SCC = Disproved (\ x -> case x of {})+      (%~) SCG SCD = Disproved (\ x -> case x of {})+      (%~) SCG SCE = Disproved (\ x -> case x of {})+      (%~) SCG SCF = Disproved (\ x -> case x of {})+      (%~) SCG SCG = Proved Refl+      (%~) SCG SCH = Disproved (\ x -> case x of {})+      (%~) SCG SCI = Disproved (\ x -> case x of {})+      (%~) SCG SCJ = Disproved (\ x -> case x of {})+      (%~) SCG SCK = Disproved (\ x -> case x of {})+      (%~) SCG SCL = Disproved (\ x -> case x of {})+      (%~) SCG SCM = Disproved (\ x -> case x of {})+      (%~) SCG SCN = Disproved (\ x -> case x of {})+      (%~) SCG SCO = Disproved (\ x -> case x of {})+      (%~) SCG SCP = Disproved (\ x -> case x of {})+      (%~) SCG SCQ = Disproved (\ x -> case x of {})+      (%~) SCG SCR = Disproved (\ x -> case x of {})+      (%~) SCG SCS = Disproved (\ x -> case x of {})+      (%~) SCG SCT = Disproved (\ x -> case x of {})+      (%~) SCG SCU = Disproved (\ x -> case x of {})+      (%~) SCG SCV = Disproved (\ x -> case x of {})+      (%~) SCG SCW = Disproved (\ x -> case x of {})+      (%~) SCG SCX = Disproved (\ x -> case x of {})+      (%~) SCG SCY = Disproved (\ x -> case x of {})+      (%~) SCG SCZ = Disproved (\ x -> case x of {})+      (%~) SCH SCA = Disproved (\ x -> case x of {})+      (%~) SCH SCB = Disproved (\ x -> case x of {})+      (%~) SCH SCC = Disproved (\ x -> case x of {})+      (%~) SCH SCD = Disproved (\ x -> case x of {})+      (%~) SCH SCE = Disproved (\ x -> case x of {})+      (%~) SCH SCF = Disproved (\ x -> case x of {})+      (%~) SCH SCG = Disproved (\ x -> case x of {})+      (%~) SCH SCH = Proved Refl+      (%~) SCH SCI = Disproved (\ x -> case x of {})+      (%~) SCH SCJ = Disproved (\ x -> case x of {})+      (%~) SCH SCK = Disproved (\ x -> case x of {})+      (%~) SCH SCL = Disproved (\ x -> case x of {})+      (%~) SCH SCM = Disproved (\ x -> case x of {})+      (%~) SCH SCN = Disproved (\ x -> case x of {})+      (%~) SCH SCO = Disproved (\ x -> case x of {})+      (%~) SCH SCP = Disproved (\ x -> case x of {})+      (%~) SCH SCQ = Disproved (\ x -> case x of {})+      (%~) SCH SCR = Disproved (\ x -> case x of {})+      (%~) SCH SCS = Disproved (\ x -> case x of {})+      (%~) SCH SCT = Disproved (\ x -> case x of {})+      (%~) SCH SCU = Disproved (\ x -> case x of {})+      (%~) SCH SCV = Disproved (\ x -> case x of {})+      (%~) SCH SCW = Disproved (\ x -> case x of {})+      (%~) SCH SCX = Disproved (\ x -> case x of {})+      (%~) SCH SCY = Disproved (\ x -> case x of {})+      (%~) SCH SCZ = Disproved (\ x -> case x of {})+      (%~) SCI SCA = Disproved (\ x -> case x of {})+      (%~) SCI SCB = Disproved (\ x -> case x of {})+      (%~) SCI SCC = Disproved (\ x -> case x of {})+      (%~) SCI SCD = Disproved (\ x -> case x of {})+      (%~) SCI SCE = Disproved (\ x -> case x of {})+      (%~) SCI SCF = Disproved (\ x -> case x of {})+      (%~) SCI SCG = Disproved (\ x -> case x of {})+      (%~) SCI SCH = Disproved (\ x -> case x of {})+      (%~) SCI SCI = Proved Refl+      (%~) SCI SCJ = Disproved (\ x -> case x of {})+      (%~) SCI SCK = Disproved (\ x -> case x of {})+      (%~) SCI SCL = Disproved (\ x -> case x of {})+      (%~) SCI SCM = Disproved (\ x -> case x of {})+      (%~) SCI SCN = Disproved (\ x -> case x of {})+      (%~) SCI SCO = Disproved (\ x -> case x of {})+      (%~) SCI SCP = Disproved (\ x -> case x of {})+      (%~) SCI SCQ = Disproved (\ x -> case x of {})+      (%~) SCI SCR = Disproved (\ x -> case x of {})+      (%~) SCI SCS = Disproved (\ x -> case x of {})+      (%~) SCI SCT = Disproved (\ x -> case x of {})+      (%~) SCI SCU = Disproved (\ x -> case x of {})+      (%~) SCI SCV = Disproved (\ x -> case x of {})+      (%~) SCI SCW = Disproved (\ x -> case x of {})+      (%~) SCI SCX = Disproved (\ x -> case x of {})+      (%~) SCI SCY = Disproved (\ x -> case x of {})+      (%~) SCI SCZ = Disproved (\ x -> case x of {})+      (%~) SCJ SCA = Disproved (\ x -> case x of {})+      (%~) SCJ SCB = Disproved (\ x -> case x of {})+      (%~) SCJ SCC = Disproved (\ x -> case x of {})+      (%~) SCJ SCD = Disproved (\ x -> case x of {})+      (%~) SCJ SCE = Disproved (\ x -> case x of {})+      (%~) SCJ SCF = Disproved (\ x -> case x of {})+      (%~) SCJ SCG = Disproved (\ x -> case x of {})+      (%~) SCJ SCH = Disproved (\ x -> case x of {})+      (%~) SCJ SCI = Disproved (\ x -> case x of {})+      (%~) SCJ SCJ = Proved Refl+      (%~) SCJ SCK = Disproved (\ x -> case x of {})+      (%~) SCJ SCL = Disproved (\ x -> case x of {})+      (%~) SCJ SCM = Disproved (\ x -> case x of {})+      (%~) SCJ SCN = Disproved (\ x -> case x of {})+      (%~) SCJ SCO = Disproved (\ x -> case x of {})+      (%~) SCJ SCP = Disproved (\ x -> case x of {})+      (%~) SCJ SCQ = Disproved (\ x -> case x of {})+      (%~) SCJ SCR = Disproved (\ x -> case x of {})+      (%~) SCJ SCS = Disproved (\ x -> case x of {})+      (%~) SCJ SCT = Disproved (\ x -> case x of {})+      (%~) SCJ SCU = Disproved (\ x -> case x of {})+      (%~) SCJ SCV = Disproved (\ x -> case x of {})+      (%~) SCJ SCW = Disproved (\ x -> case x of {})+      (%~) SCJ SCX = Disproved (\ x -> case x of {})+      (%~) SCJ SCY = Disproved (\ x -> case x of {})+      (%~) SCJ SCZ = Disproved (\ x -> case x of {})+      (%~) SCK SCA = Disproved (\ x -> case x of {})+      (%~) SCK SCB = Disproved (\ x -> case x of {})+      (%~) SCK SCC = Disproved (\ x -> case x of {})+      (%~) SCK SCD = Disproved (\ x -> case x of {})+      (%~) SCK SCE = Disproved (\ x -> case x of {})+      (%~) SCK SCF = Disproved (\ x -> case x of {})+      (%~) SCK SCG = Disproved (\ x -> case x of {})+      (%~) SCK SCH = Disproved (\ x -> case x of {})+      (%~) SCK SCI = Disproved (\ x -> case x of {})+      (%~) SCK SCJ = Disproved (\ x -> case x of {})+      (%~) SCK SCK = Proved Refl+      (%~) SCK SCL = Disproved (\ x -> case x of {})+      (%~) SCK SCM = Disproved (\ x -> case x of {})+      (%~) SCK SCN = Disproved (\ x -> case x of {})+      (%~) SCK SCO = Disproved (\ x -> case x of {})+      (%~) SCK SCP = Disproved (\ x -> case x of {})+      (%~) SCK SCQ = Disproved (\ x -> case x of {})+      (%~) SCK SCR = Disproved (\ x -> case x of {})+      (%~) SCK SCS = Disproved (\ x -> case x of {})+      (%~) SCK SCT = Disproved (\ x -> case x of {})+      (%~) SCK SCU = Disproved (\ x -> case x of {})+      (%~) SCK SCV = Disproved (\ x -> case x of {})+      (%~) SCK SCW = Disproved (\ x -> case x of {})+      (%~) SCK SCX = Disproved (\ x -> case x of {})+      (%~) SCK SCY = Disproved (\ x -> case x of {})+      (%~) SCK SCZ = Disproved (\ x -> case x of {})+      (%~) SCL SCA = Disproved (\ x -> case x of {})+      (%~) SCL SCB = Disproved (\ x -> case x of {})+      (%~) SCL SCC = Disproved (\ x -> case x of {})+      (%~) SCL SCD = Disproved (\ x -> case x of {})+      (%~) SCL SCE = Disproved (\ x -> case x of {})+      (%~) SCL SCF = Disproved (\ x -> case x of {})+      (%~) SCL SCG = Disproved (\ x -> case x of {})+      (%~) SCL SCH = Disproved (\ x -> case x of {})+      (%~) SCL SCI = Disproved (\ x -> case x of {})+      (%~) SCL SCJ = Disproved (\ x -> case x of {})+      (%~) SCL SCK = Disproved (\ x -> case x of {})+      (%~) SCL SCL = Proved Refl+      (%~) SCL SCM = Disproved (\ x -> case x of {})+      (%~) SCL SCN = Disproved (\ x -> case x of {})+      (%~) SCL SCO = Disproved (\ x -> case x of {})+      (%~) SCL SCP = Disproved (\ x -> case x of {})+      (%~) SCL SCQ = Disproved (\ x -> case x of {})+      (%~) SCL SCR = Disproved (\ x -> case x of {})+      (%~) SCL SCS = Disproved (\ x -> case x of {})+      (%~) SCL SCT = Disproved (\ x -> case x of {})+      (%~) SCL SCU = Disproved (\ x -> case x of {})+      (%~) SCL SCV = Disproved (\ x -> case x of {})+      (%~) SCL SCW = Disproved (\ x -> case x of {})+      (%~) SCL SCX = Disproved (\ x -> case x of {})+      (%~) SCL SCY = Disproved (\ x -> case x of {})+      (%~) SCL SCZ = Disproved (\ x -> case x of {})+      (%~) SCM SCA = Disproved (\ x -> case x of {})+      (%~) SCM SCB = Disproved (\ x -> case x of {})+      (%~) SCM SCC = Disproved (\ x -> case x of {})+      (%~) SCM SCD = Disproved (\ x -> case x of {})+      (%~) SCM SCE = Disproved (\ x -> case x of {})+      (%~) SCM SCF = Disproved (\ x -> case x of {})+      (%~) SCM SCG = Disproved (\ x -> case x of {})+      (%~) SCM SCH = Disproved (\ x -> case x of {})+      (%~) SCM SCI = Disproved (\ x -> case x of {})+      (%~) SCM SCJ = Disproved (\ x -> case x of {})+      (%~) SCM SCK = Disproved (\ x -> case x of {})+      (%~) SCM SCL = Disproved (\ x -> case x of {})+      (%~) SCM SCM = Proved Refl+      (%~) SCM SCN = Disproved (\ x -> case x of {})+      (%~) SCM SCO = Disproved (\ x -> case x of {})+      (%~) SCM SCP = Disproved (\ x -> case x of {})+      (%~) SCM SCQ = Disproved (\ x -> case x of {})+      (%~) SCM SCR = Disproved (\ x -> case x of {})+      (%~) SCM SCS = Disproved (\ x -> case x of {})+      (%~) SCM SCT = Disproved (\ x -> case x of {})+      (%~) SCM SCU = Disproved (\ x -> case x of {})+      (%~) SCM SCV = Disproved (\ x -> case x of {})+      (%~) SCM SCW = Disproved (\ x -> case x of {})+      (%~) SCM SCX = Disproved (\ x -> case x of {})+      (%~) SCM SCY = Disproved (\ x -> case x of {})+      (%~) SCM SCZ = Disproved (\ x -> case x of {})+      (%~) SCN SCA = Disproved (\ x -> case x of {})+      (%~) SCN SCB = Disproved (\ x -> case x of {})+      (%~) SCN SCC = Disproved (\ x -> case x of {})+      (%~) SCN SCD = Disproved (\ x -> case x of {})+      (%~) SCN SCE = Disproved (\ x -> case x of {})+      (%~) SCN SCF = Disproved (\ x -> case x of {})+      (%~) SCN SCG = Disproved (\ x -> case x of {})+      (%~) SCN SCH = Disproved (\ x -> case x of {})+      (%~) SCN SCI = Disproved (\ x -> case x of {})+      (%~) SCN SCJ = Disproved (\ x -> case x of {})+      (%~) SCN SCK = Disproved (\ x -> case x of {})+      (%~) SCN SCL = Disproved (\ x -> case x of {})+      (%~) SCN SCM = Disproved (\ x -> case x of {})+      (%~) SCN SCN = Proved Refl+      (%~) SCN SCO = Disproved (\ x -> case x of {})+      (%~) SCN SCP = Disproved (\ x -> case x of {})+      (%~) SCN SCQ = Disproved (\ x -> case x of {})+      (%~) SCN SCR = Disproved (\ x -> case x of {})+      (%~) SCN SCS = Disproved (\ x -> case x of {})+      (%~) SCN SCT = Disproved (\ x -> case x of {})+      (%~) SCN SCU = Disproved (\ x -> case x of {})+      (%~) SCN SCV = Disproved (\ x -> case x of {})+      (%~) SCN SCW = Disproved (\ x -> case x of {})+      (%~) SCN SCX = Disproved (\ x -> case x of {})+      (%~) SCN SCY = Disproved (\ x -> case x of {})+      (%~) SCN SCZ = Disproved (\ x -> case x of {})+      (%~) SCO SCA = Disproved (\ x -> case x of {})+      (%~) SCO SCB = Disproved (\ x -> case x of {})+      (%~) SCO SCC = Disproved (\ x -> case x of {})+      (%~) SCO SCD = Disproved (\ x -> case x of {})+      (%~) SCO SCE = Disproved (\ x -> case x of {})+      (%~) SCO SCF = Disproved (\ x -> case x of {})+      (%~) SCO SCG = Disproved (\ x -> case x of {})+      (%~) SCO SCH = Disproved (\ x -> case x of {})+      (%~) SCO SCI = Disproved (\ x -> case x of {})+      (%~) SCO SCJ = Disproved (\ x -> case x of {})+      (%~) SCO SCK = Disproved (\ x -> case x of {})+      (%~) SCO SCL = Disproved (\ x -> case x of {})+      (%~) SCO SCM = Disproved (\ x -> case x of {})+      (%~) SCO SCN = Disproved (\ x -> case x of {})+      (%~) SCO SCO = Proved Refl+      (%~) SCO SCP = Disproved (\ x -> case x of {})+      (%~) SCO SCQ = Disproved (\ x -> case x of {})+      (%~) SCO SCR = Disproved (\ x -> case x of {})+      (%~) SCO SCS = Disproved (\ x -> case x of {})+      (%~) SCO SCT = Disproved (\ x -> case x of {})+      (%~) SCO SCU = Disproved (\ x -> case x of {})+      (%~) SCO SCV = Disproved (\ x -> case x of {})+      (%~) SCO SCW = Disproved (\ x -> case x of {})+      (%~) SCO SCX = Disproved (\ x -> case x of {})+      (%~) SCO SCY = Disproved (\ x -> case x of {})+      (%~) SCO SCZ = Disproved (\ x -> case x of {})+      (%~) SCP SCA = Disproved (\ x -> case x of {})+      (%~) SCP SCB = Disproved (\ x -> case x of {})+      (%~) SCP SCC = Disproved (\ x -> case x of {})+      (%~) SCP SCD = Disproved (\ x -> case x of {})+      (%~) SCP SCE = Disproved (\ x -> case x of {})+      (%~) SCP SCF = Disproved (\ x -> case x of {})+      (%~) SCP SCG = Disproved (\ x -> case x of {})+      (%~) SCP SCH = Disproved (\ x -> case x of {})+      (%~) SCP SCI = Disproved (\ x -> case x of {})+      (%~) SCP SCJ = Disproved (\ x -> case x of {})+      (%~) SCP SCK = Disproved (\ x -> case x of {})+      (%~) SCP SCL = Disproved (\ x -> case x of {})+      (%~) SCP SCM = Disproved (\ x -> case x of {})+      (%~) SCP SCN = Disproved (\ x -> case x of {})+      (%~) SCP SCO = Disproved (\ x -> case x of {})+      (%~) SCP SCP = Proved Refl+      (%~) SCP SCQ = Disproved (\ x -> case x of {})+      (%~) SCP SCR = Disproved (\ x -> case x of {})+      (%~) SCP SCS = Disproved (\ x -> case x of {})+      (%~) SCP SCT = Disproved (\ x -> case x of {})+      (%~) SCP SCU = Disproved (\ x -> case x of {})+      (%~) SCP SCV = Disproved (\ x -> case x of {})+      (%~) SCP SCW = Disproved (\ x -> case x of {})+      (%~) SCP SCX = Disproved (\ x -> case x of {})+      (%~) SCP SCY = Disproved (\ x -> case x of {})+      (%~) SCP SCZ = Disproved (\ x -> case x of {})+      (%~) SCQ SCA = Disproved (\ x -> case x of {})+      (%~) SCQ SCB = Disproved (\ x -> case x of {})+      (%~) SCQ SCC = Disproved (\ x -> case x of {})+      (%~) SCQ SCD = Disproved (\ x -> case x of {})+      (%~) SCQ SCE = Disproved (\ x -> case x of {})+      (%~) SCQ SCF = Disproved (\ x -> case x of {})+      (%~) SCQ SCG = Disproved (\ x -> case x of {})+      (%~) SCQ SCH = Disproved (\ x -> case x of {})+      (%~) SCQ SCI = Disproved (\ x -> case x of {})+      (%~) SCQ SCJ = Disproved (\ x -> case x of {})+      (%~) SCQ SCK = Disproved (\ x -> case x of {})+      (%~) SCQ SCL = Disproved (\ x -> case x of {})+      (%~) SCQ SCM = Disproved (\ x -> case x of {})+      (%~) SCQ SCN = Disproved (\ x -> case x of {})+      (%~) SCQ SCO = Disproved (\ x -> case x of {})+      (%~) SCQ SCP = Disproved (\ x -> case x of {})+      (%~) SCQ SCQ = Proved Refl+      (%~) SCQ SCR = Disproved (\ x -> case x of {})+      (%~) SCQ SCS = Disproved (\ x -> case x of {})+      (%~) SCQ SCT = Disproved (\ x -> case x of {})+      (%~) SCQ SCU = Disproved (\ x -> case x of {})+      (%~) SCQ SCV = Disproved (\ x -> case x of {})+      (%~) SCQ SCW = Disproved (\ x -> case x of {})+      (%~) SCQ SCX = Disproved (\ x -> case x of {})+      (%~) SCQ SCY = Disproved (\ x -> case x of {})+      (%~) SCQ SCZ = Disproved (\ x -> case x of {})+      (%~) SCR SCA = Disproved (\ x -> case x of {})+      (%~) SCR SCB = Disproved (\ x -> case x of {})+      (%~) SCR SCC = Disproved (\ x -> case x of {})+      (%~) SCR SCD = Disproved (\ x -> case x of {})+      (%~) SCR SCE = Disproved (\ x -> case x of {})+      (%~) SCR SCF = Disproved (\ x -> case x of {})+      (%~) SCR SCG = Disproved (\ x -> case x of {})+      (%~) SCR SCH = Disproved (\ x -> case x of {})+      (%~) SCR SCI = Disproved (\ x -> case x of {})+      (%~) SCR SCJ = Disproved (\ x -> case x of {})+      (%~) SCR SCK = Disproved (\ x -> case x of {})+      (%~) SCR SCL = Disproved (\ x -> case x of {})+      (%~) SCR SCM = Disproved (\ x -> case x of {})+      (%~) SCR SCN = Disproved (\ x -> case x of {})+      (%~) SCR SCO = Disproved (\ x -> case x of {})+      (%~) SCR SCP = Disproved (\ x -> case x of {})+      (%~) SCR SCQ = Disproved (\ x -> case x of {})+      (%~) SCR SCR = Proved Refl+      (%~) SCR SCS = Disproved (\ x -> case x of {})+      (%~) SCR SCT = Disproved (\ x -> case x of {})+      (%~) SCR SCU = Disproved (\ x -> case x of {})+      (%~) SCR SCV = Disproved (\ x -> case x of {})+      (%~) SCR SCW = Disproved (\ x -> case x of {})+      (%~) SCR SCX = Disproved (\ x -> case x of {})+      (%~) SCR SCY = Disproved (\ x -> case x of {})+      (%~) SCR SCZ = Disproved (\ x -> case x of {})+      (%~) SCS SCA = Disproved (\ x -> case x of {})+      (%~) SCS SCB = Disproved (\ x -> case x of {})+      (%~) SCS SCC = Disproved (\ x -> case x of {})+      (%~) SCS SCD = Disproved (\ x -> case x of {})+      (%~) SCS SCE = Disproved (\ x -> case x of {})+      (%~) SCS SCF = Disproved (\ x -> case x of {})+      (%~) SCS SCG = Disproved (\ x -> case x of {})+      (%~) SCS SCH = Disproved (\ x -> case x of {})+      (%~) SCS SCI = Disproved (\ x -> case x of {})+      (%~) SCS SCJ = Disproved (\ x -> case x of {})+      (%~) SCS SCK = Disproved (\ x -> case x of {})+      (%~) SCS SCL = Disproved (\ x -> case x of {})+      (%~) SCS SCM = Disproved (\ x -> case x of {})+      (%~) SCS SCN = Disproved (\ x -> case x of {})+      (%~) SCS SCO = Disproved (\ x -> case x of {})+      (%~) SCS SCP = Disproved (\ x -> case x of {})+      (%~) SCS SCQ = Disproved (\ x -> case x of {})+      (%~) SCS SCR = Disproved (\ x -> case x of {})+      (%~) SCS SCS = Proved Refl+      (%~) SCS SCT = Disproved (\ x -> case x of {})+      (%~) SCS SCU = Disproved (\ x -> case x of {})+      (%~) SCS SCV = Disproved (\ x -> case x of {})+      (%~) SCS SCW = Disproved (\ x -> case x of {})+      (%~) SCS SCX = Disproved (\ x -> case x of {})+      (%~) SCS SCY = Disproved (\ x -> case x of {})+      (%~) SCS SCZ = Disproved (\ x -> case x of {})+      (%~) SCT SCA = Disproved (\ x -> case x of {})+      (%~) SCT SCB = Disproved (\ x -> case x of {})+      (%~) SCT SCC = Disproved (\ x -> case x of {})+      (%~) SCT SCD = Disproved (\ x -> case x of {})+      (%~) SCT SCE = Disproved (\ x -> case x of {})+      (%~) SCT SCF = Disproved (\ x -> case x of {})+      (%~) SCT SCG = Disproved (\ x -> case x of {})+      (%~) SCT SCH = Disproved (\ x -> case x of {})+      (%~) SCT SCI = Disproved (\ x -> case x of {})+      (%~) SCT SCJ = Disproved (\ x -> case x of {})+      (%~) SCT SCK = Disproved (\ x -> case x of {})+      (%~) SCT SCL = Disproved (\ x -> case x of {})+      (%~) SCT SCM = Disproved (\ x -> case x of {})+      (%~) SCT SCN = Disproved (\ x -> case x of {})+      (%~) SCT SCO = Disproved (\ x -> case x of {})+      (%~) SCT SCP = Disproved (\ x -> case x of {})+      (%~) SCT SCQ = Disproved (\ x -> case x of {})+      (%~) SCT SCR = Disproved (\ x -> case x of {})+      (%~) SCT SCS = Disproved (\ x -> case x of {})+      (%~) SCT SCT = Proved Refl+      (%~) SCT SCU = Disproved (\ x -> case x of {})+      (%~) SCT SCV = Disproved (\ x -> case x of {})+      (%~) SCT SCW = Disproved (\ x -> case x of {})+      (%~) SCT SCX = Disproved (\ x -> case x of {})+      (%~) SCT SCY = Disproved (\ x -> case x of {})+      (%~) SCT SCZ = Disproved (\ x -> case x of {})+      (%~) SCU SCA = Disproved (\ x -> case x of {})+      (%~) SCU SCB = Disproved (\ x -> case x of {})+      (%~) SCU SCC = Disproved (\ x -> case x of {})+      (%~) SCU SCD = Disproved (\ x -> case x of {})+      (%~) SCU SCE = Disproved (\ x -> case x of {})+      (%~) SCU SCF = Disproved (\ x -> case x of {})+      (%~) SCU SCG = Disproved (\ x -> case x of {})+      (%~) SCU SCH = Disproved (\ x -> case x of {})+      (%~) SCU SCI = Disproved (\ x -> case x of {})+      (%~) SCU SCJ = Disproved (\ x -> case x of {})+      (%~) SCU SCK = Disproved (\ x -> case x of {})+      (%~) SCU SCL = Disproved (\ x -> case x of {})+      (%~) SCU SCM = Disproved (\ x -> case x of {})+      (%~) SCU SCN = Disproved (\ x -> case x of {})+      (%~) SCU SCO = Disproved (\ x -> case x of {})+      (%~) SCU SCP = Disproved (\ x -> case x of {})+      (%~) SCU SCQ = Disproved (\ x -> case x of {})+      (%~) SCU SCR = Disproved (\ x -> case x of {})+      (%~) SCU SCS = Disproved (\ x -> case x of {})+      (%~) SCU SCT = Disproved (\ x -> case x of {})+      (%~) SCU SCU = Proved Refl+      (%~) SCU SCV = Disproved (\ x -> case x of {})+      (%~) SCU SCW = Disproved (\ x -> case x of {})+      (%~) SCU SCX = Disproved (\ x -> case x of {})+      (%~) SCU SCY = Disproved (\ x -> case x of {})+      (%~) SCU SCZ = Disproved (\ x -> case x of {})+      (%~) SCV SCA = Disproved (\ x -> case x of {})+      (%~) SCV SCB = Disproved (\ x -> case x of {})+      (%~) SCV SCC = Disproved (\ x -> case x of {})+      (%~) SCV SCD = Disproved (\ x -> case x of {})+      (%~) SCV SCE = Disproved (\ x -> case x of {})+      (%~) SCV SCF = Disproved (\ x -> case x of {})+      (%~) SCV SCG = Disproved (\ x -> case x of {})+      (%~) SCV SCH = Disproved (\ x -> case x of {})+      (%~) SCV SCI = Disproved (\ x -> case x of {})+      (%~) SCV SCJ = Disproved (\ x -> case x of {})+      (%~) SCV SCK = Disproved (\ x -> case x of {})+      (%~) SCV SCL = Disproved (\ x -> case x of {})+      (%~) SCV SCM = Disproved (\ x -> case x of {})+      (%~) SCV SCN = Disproved (\ x -> case x of {})+      (%~) SCV SCO = Disproved (\ x -> case x of {})+      (%~) SCV SCP = Disproved (\ x -> case x of {})+      (%~) SCV SCQ = Disproved (\ x -> case x of {})+      (%~) SCV SCR = Disproved (\ x -> case x of {})+      (%~) SCV SCS = Disproved (\ x -> case x of {})+      (%~) SCV SCT = Disproved (\ x -> case x of {})+      (%~) SCV SCU = Disproved (\ x -> case x of {})+      (%~) SCV SCV = Proved Refl+      (%~) SCV SCW = Disproved (\ x -> case x of {})+      (%~) SCV SCX = Disproved (\ x -> case x of {})+      (%~) SCV SCY = Disproved (\ x -> case x of {})+      (%~) SCV SCZ = Disproved (\ x -> case x of {})+      (%~) SCW SCA = Disproved (\ x -> case x of {})+      (%~) SCW SCB = Disproved (\ x -> case x of {})+      (%~) SCW SCC = Disproved (\ x -> case x of {})+      (%~) SCW SCD = Disproved (\ x -> case x of {})+      (%~) SCW SCE = Disproved (\ x -> case x of {})+      (%~) SCW SCF = Disproved (\ x -> case x of {})+      (%~) SCW SCG = Disproved (\ x -> case x of {})+      (%~) SCW SCH = Disproved (\ x -> case x of {})+      (%~) SCW SCI = Disproved (\ x -> case x of {})+      (%~) SCW SCJ = Disproved (\ x -> case x of {})+      (%~) SCW SCK = Disproved (\ x -> case x of {})+      (%~) SCW SCL = Disproved (\ x -> case x of {})+      (%~) SCW SCM = Disproved (\ x -> case x of {})+      (%~) SCW SCN = Disproved (\ x -> case x of {})+      (%~) SCW SCO = Disproved (\ x -> case x of {})+      (%~) SCW SCP = Disproved (\ x -> case x of {})+      (%~) SCW SCQ = Disproved (\ x -> case x of {})+      (%~) SCW SCR = Disproved (\ x -> case x of {})+      (%~) SCW SCS = Disproved (\ x -> case x of {})+      (%~) SCW SCT = Disproved (\ x -> case x of {})+      (%~) SCW SCU = Disproved (\ x -> case x of {})+      (%~) SCW SCV = Disproved (\ x -> case x of {})+      (%~) SCW SCW = Proved Refl+      (%~) SCW SCX = Disproved (\ x -> case x of {})+      (%~) SCW SCY = Disproved (\ x -> case x of {})+      (%~) SCW SCZ = Disproved (\ x -> case x of {})+      (%~) SCX SCA = Disproved (\ x -> case x of {})+      (%~) SCX SCB = Disproved (\ x -> case x of {})+      (%~) SCX SCC = Disproved (\ x -> case x of {})+      (%~) SCX SCD = Disproved (\ x -> case x of {})+      (%~) SCX SCE = Disproved (\ x -> case x of {})+      (%~) SCX SCF = Disproved (\ x -> case x of {})+      (%~) SCX SCG = Disproved (\ x -> case x of {})+      (%~) SCX SCH = Disproved (\ x -> case x of {})+      (%~) SCX SCI = Disproved (\ x -> case x of {})+      (%~) SCX SCJ = Disproved (\ x -> case x of {})+      (%~) SCX SCK = Disproved (\ x -> case x of {})+      (%~) SCX SCL = Disproved (\ x -> case x of {})+      (%~) SCX SCM = Disproved (\ x -> case x of {})+      (%~) SCX SCN = Disproved (\ x -> case x of {})+      (%~) SCX SCO = Disproved (\ x -> case x of {})+      (%~) SCX SCP = Disproved (\ x -> case x of {})+      (%~) SCX SCQ = Disproved (\ x -> case x of {})+      (%~) SCX SCR = Disproved (\ x -> case x of {})+      (%~) SCX SCS = Disproved (\ x -> case x of {})+      (%~) SCX SCT = Disproved (\ x -> case x of {})+      (%~) SCX SCU = Disproved (\ x -> case x of {})+      (%~) SCX SCV = Disproved (\ x -> case x of {})+      (%~) SCX SCW = Disproved (\ x -> case x of {})+      (%~) SCX SCX = Proved Refl+      (%~) SCX SCY = Disproved (\ x -> case x of {})+      (%~) SCX SCZ = Disproved (\ x -> case x of {})+      (%~) SCY SCA = Disproved (\ x -> case x of {})+      (%~) SCY SCB = Disproved (\ x -> case x of {})+      (%~) SCY SCC = Disproved (\ x -> case x of {})+      (%~) SCY SCD = Disproved (\ x -> case x of {})+      (%~) SCY SCE = Disproved (\ x -> case x of {})+      (%~) SCY SCF = Disproved (\ x -> case x of {})+      (%~) SCY SCG = Disproved (\ x -> case x of {})+      (%~) SCY SCH = Disproved (\ x -> case x of {})+      (%~) SCY SCI = Disproved (\ x -> case x of {})+      (%~) SCY SCJ = Disproved (\ x -> case x of {})+      (%~) SCY SCK = Disproved (\ x -> case x of {})+      (%~) SCY SCL = Disproved (\ x -> case x of {})+      (%~) SCY SCM = Disproved (\ x -> case x of {})+      (%~) SCY SCN = Disproved (\ x -> case x of {})+      (%~) SCY SCO = Disproved (\ x -> case x of {})+      (%~) SCY SCP = Disproved (\ x -> case x of {})+      (%~) SCY SCQ = Disproved (\ x -> case x of {})+      (%~) SCY SCR = Disproved (\ x -> case x of {})+      (%~) SCY SCS = Disproved (\ x -> case x of {})+      (%~) SCY SCT = Disproved (\ x -> case x of {})+      (%~) SCY SCU = Disproved (\ x -> case x of {})+      (%~) SCY SCV = Disproved (\ x -> case x of {})+      (%~) SCY SCW = Disproved (\ x -> case x of {})+      (%~) SCY SCX = Disproved (\ x -> case x of {})+      (%~) SCY SCY = Proved Refl+      (%~) SCY SCZ = Disproved (\ x -> case x of {})+      (%~) SCZ SCA = Disproved (\ x -> case x of {})+      (%~) SCZ SCB = Disproved (\ x -> case x of {})+      (%~) SCZ SCC = Disproved (\ x -> case x of {})+      (%~) SCZ SCD = Disproved (\ x -> case x of {})+      (%~) SCZ SCE = Disproved (\ x -> case x of {})+      (%~) SCZ SCF = Disproved (\ x -> case x of {})+      (%~) SCZ SCG = Disproved (\ x -> case x of {})+      (%~) SCZ SCH = Disproved (\ x -> case x of {})+      (%~) SCZ SCI = Disproved (\ x -> case x of {})+      (%~) SCZ SCJ = Disproved (\ x -> case x of {})+      (%~) SCZ SCK = Disproved (\ x -> case x of {})+      (%~) SCZ SCL = Disproved (\ x -> case x of {})+      (%~) SCZ SCM = Disproved (\ x -> case x of {})+      (%~) SCZ SCN = Disproved (\ x -> case x of {})+      (%~) SCZ SCO = Disproved (\ x -> case x of {})+      (%~) SCZ SCP = Disproved (\ x -> case x of {})+      (%~) SCZ SCQ = Disproved (\ x -> case x of {})+      (%~) SCZ SCR = Disproved (\ x -> case x of {})+      (%~) SCZ SCS = Disproved (\ x -> case x of {})+      (%~) SCZ SCT = Disproved (\ x -> case x of {})+      (%~) SCZ SCU = Disproved (\ x -> case x of {})+      (%~) SCZ SCV = Disproved (\ x -> case x of {})+      (%~) SCZ SCW = Disproved (\ x -> case x of {})+      (%~) SCZ SCX = Disproved (\ x -> case x of {})+      (%~) SCZ SCY = Disproved (\ x -> case x of {})+      (%~) SCZ SCZ = Proved Refl+    instance Data.Type.Equality.TestEquality (SAChar :: AChar+                                                        -> Type) where+      Data.Type.Equality.testEquality+        = Data.Singletons.Decide.decideEquality+    instance Data.Type.Coercion.TestCoercion (SAChar :: AChar+                                                        -> Type) where+      Data.Type.Coercion.testCoercion+        = Data.Singletons.Decide.decideCoercion+    deriving instance (Data.Singletons.ShowSing.ShowSing U,+                       Data.Singletons.ShowSing.ShowSing Nat) =>+                      Show (SU (z :: U))+    deriving instance Show (SAChar (z :: AChar))+    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+    instance SingI n => SingI1 (VEC (n :: U)) where+      liftSing = SVEC sing+    instance SingI2 VEC where+      liftSing2 = SVEC+    instance SingI (VECSym0 :: (~>) U ((~>) Nat U)) where+      sing = (singFun2 @VECSym0) SVEC+    instance SingI d => SingI (VECSym1 (d :: U) :: (~>) Nat U) where+      sing = (singFun1 @(VECSym1 (d :: U))) (SVEC (sing @d))+    instance SingI1 (VECSym1 :: U -> (~>) Nat U) where+      liftSing (s :: Sing (d :: U))+        = (singFun1 @(VECSym1 (d :: U))) (SVEC s)+    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+    instance (SingI n, SingI n) =>+             SingI (Attr (n :: [AChar]) (n :: U)) where+      sing = (SAttr sing) sing+    instance SingI n => SingI1 (Attr (n :: [AChar])) where+      liftSing = SAttr sing+    instance SingI2 Attr where+      liftSing2 = SAttr+    instance SingI (AttrSym0 :: (~>) [AChar] ((~>) U Attribute)) where+      sing = (singFun2 @AttrSym0) SAttr+    instance SingI d =>+             SingI (AttrSym1 (d :: [AChar]) :: (~>) U Attribute) where+      sing = (singFun1 @(AttrSym1 (d :: [AChar]))) (SAttr (sing @d))+    instance SingI1 (AttrSym1 :: [AChar] -> (~>) U Attribute) where+      liftSing (s :: Sing (d :: [AChar]))+        = (singFun1 @(AttrSym1 (d :: [AChar]))) (SAttr s)+    instance SingI n => SingI (Sch (n :: [Attribute])) where+      sing = SSch sing+    instance SingI1 Sch where+      liftSing = SSch     instance SingI (SchSym0 :: (~>) [Attribute] Schema) where       sing = (singFun1 @SchSym0) SSch GradingClient/Database.hs:0:0:: Splicing declarations
tests/compile-and-dump/GradingClient/Database.hs view
@@ -25,7 +25,7 @@ import Control.Monad import Control.Monad.Except  ( throwError ) import Data.Kind (Type)-import Data.List hiding ( tail )+import qualified Data.List as List import Data.Singletons.Base.TH import Prelude hiding ( tail, id ) import Prelude.Singletons hiding ( Lookup, sLookup, LookupSym0, LookupSym1, LookupSym2 )@@ -434,11 +434,11 @@ query (Union ra rb) = do   rowsa <- query ra   rowsb <- query rb-  return $ unionBy eqRow rowsa rowsb+  return $ List.unionBy eqRow rowsa rowsb query (Diff ra rb) = do   rowsa <- query ra   rowsb <- query rb-  return $ deleteFirstsBy eqRow rowsa rowsb+  return $ List.deleteFirstsBy eqRow rowsa rowsb query (Product ra rb) = do   rowsa <- query ra   rowsb <- query rb
tests/compile-and-dump/InsertionSort/InsertionSortImp.golden view
@@ -27,12 +27,13 @@       fromSing (SSucc b) = Succ (fromSing b)       toSing Zero = SomeSing SZero       toSing (Succ (b :: Demote Nat))-        = case toSing b :: SomeSing Nat of {-            SomeSing c -> SomeSing (SSucc c) }+        = case toSing b :: SomeSing Nat of SomeSing c -> SomeSing (SSucc c)     instance SingI Zero where       sing = SZero     instance SingI n => SingI (Succ (n :: Nat)) where       sing = SSucc sing+    instance SingI1 Succ where+      liftSing = SSucc     instance SingI (SuccSym0 :: (~>) Nat Nat) where       sing = (singFun1 @SuccSym0) SSucc InsertionSort/InsertionSortImp.hs:(0,0)-(0,0): Splicing declarations@@ -164,14 +165,14 @@       Leq ('Succ _) 'Zero = FalseSym0       Leq ('Succ a) ('Succ b) = Apply (Apply LeqSym0 a) b     sInsertionSort ::-      forall (t :: [Nat]).-      Sing t -> Sing (Apply InsertionSortSym0 t :: [Nat])+      forall (t :: [Nat]). Sing t+                           -> Sing (Apply InsertionSortSym0 t :: [Nat])     sInsert ::-      forall (t :: Nat) (t :: [Nat]).-      Sing t -> Sing t -> Sing (Apply (Apply InsertSym0 t) t :: [Nat])+      forall (t :: Nat) (t :: [Nat]). Sing t+                                      -> Sing t -> Sing (Apply (Apply InsertSym0 t) t :: [Nat])     sLeq ::-      forall (t :: Nat) (t :: Nat).-      Sing t -> Sing t -> Sing (Apply (Apply LeqSym0 t) t :: Bool)+      forall (t :: Nat) (t :: Nat). Sing t+                                    -> Sing t -> Sing (Apply (Apply LeqSym0 t) t :: Bool)     sInsertionSort SNil = SNil     sInsertionSort (SCons (sH :: Sing h) (sT :: Sing t))       = (applySing ((applySing ((singFun2 @InsertSym0) sInsert)) sH))@@ -205,8 +206,14 @@     instance SingI d =>              SingI (InsertSym1 (d :: Nat) :: (~>) [Nat] [Nat]) where       sing = (singFun1 @(InsertSym1 (d :: Nat))) (sInsert (sing @d))+    instance SingI1 (InsertSym1 :: Nat -> (~>) [Nat] [Nat]) where+      liftSing (s :: Sing (d :: Nat))+        = (singFun1 @(InsertSym1 (d :: Nat))) (sInsert s)     instance SingI (LeqSym0 :: (~>) Nat ((~>) Nat Bool)) where       sing = (singFun2 @LeqSym0) sLeq     instance SingI d =>              SingI (LeqSym1 (d :: Nat) :: (~>) Nat Bool) where       sing = (singFun1 @(LeqSym1 (d :: Nat))) (sLeq (sing @d))+    instance SingI1 (LeqSym1 :: Nat -> (~>) Nat Bool) where+      liftSing (s :: Sing (d :: Nat))+        = (singFun1 @(LeqSym1 (d :: Nat))) (sLeq s)
tests/compile-and-dump/Promote/GenDefunSymbols.golden view
@@ -1,8 +1,8 @@ Promote/GenDefunSymbols.hs:0:0:: Splicing declarations     genDefunSymbols [''LiftMaybe, ''NatT, ''(:+)]   ======>-    type LiftMaybeSym0 :: forall (a :: Type) (b :: Type).-                          (~>) ((~>) a b) ((~>) (Maybe a) (Maybe b))+    type LiftMaybeSym0 :: forall (a :: Type)+                                 (b :: Type). (~>) ((~>) a b) ((~>) (Maybe a) (Maybe b))     data LiftMaybeSym0 :: (~>) ((~>) a b) ((~>) (Maybe a) (Maybe b))       where         LiftMaybeSym0KindInference :: Data.Singletons.SameKind (Apply LiftMaybeSym0 arg) (LiftMaybeSym1 arg) =>@@ -11,8 +11,8 @@     instance Data.Singletons.TH.SuppressUnusedWarnings.SuppressUnusedWarnings LiftMaybeSym0 where       Data.Singletons.TH.SuppressUnusedWarnings.suppressUnusedWarnings         = snd (((,) LiftMaybeSym0KindInference) ())-    type LiftMaybeSym1 :: forall (a :: Type) (b :: Type).-                          (~>) a b -> (~>) (Maybe a) (Maybe b)+    type LiftMaybeSym1 :: forall (a :: Type) (b :: Type). (~>) a b+                                                          -> (~>) (Maybe a) (Maybe b)     data LiftMaybeSym1 (a0123456789876543210 :: (~>) a b) :: (~>) (Maybe a) (Maybe b)       where         LiftMaybeSym1KindInference :: Data.Singletons.SameKind (Apply (LiftMaybeSym1 a0123456789876543210) arg) (LiftMaybeSym2 a0123456789876543210 arg) =>@@ -21,8 +21,8 @@     instance Data.Singletons.TH.SuppressUnusedWarnings.SuppressUnusedWarnings (LiftMaybeSym1 a0123456789876543210) where       Data.Singletons.TH.SuppressUnusedWarnings.suppressUnusedWarnings         = snd (((,) LiftMaybeSym1KindInference) ())-    type LiftMaybeSym2 :: forall (a :: Type) (b :: Type).-                          (~>) a b -> Maybe a -> Maybe b+    type LiftMaybeSym2 :: forall (a :: Type) (b :: Type). (~>) a b+                                                          -> Maybe a -> Maybe b     type family LiftMaybeSym2 (a0123456789876543210 :: (~>) a b) (a0123456789876543210 :: Maybe a) :: Maybe b where       LiftMaybeSym2 a0123456789876543210 a0123456789876543210 = LiftMaybe a0123456789876543210 a0123456789876543210     type ZeroSym0 :: NatT@@ -40,8 +40,8 @@     type SuccSym1 :: NatT -> NatT     type family SuccSym1 (a0123456789876543210 :: NatT) :: NatT where       SuccSym1 a0123456789876543210 = 'Succ a0123456789876543210-    type (:+@#@$) :: (~>) Nat ((~>) Nat Nat)-    data (:+@#@$) :: (~>) Nat ((~>) Nat Nat)+    type (:+@#@$) :: (~>) Natural ((~>) Natural Natural)+    data (:+@#@$) :: (~>) Natural ((~>) Natural Natural)       where         (::+@#@$###) :: Data.Singletons.SameKind (Apply (:+@#@$) arg) ((:+@#@$$) arg) =>                         (:+@#@$) a0123456789876543210@@ -49,8 +49,8 @@     instance Data.Singletons.TH.SuppressUnusedWarnings.SuppressUnusedWarnings (:+@#@$) where       Data.Singletons.TH.SuppressUnusedWarnings.suppressUnusedWarnings         = snd (((,) (::+@#@$###)) ())-    type (:+@#@$$) :: Nat -> (~>) Nat Nat-    data (:+@#@$$) (a0123456789876543210 :: Nat) :: (~>) Nat Nat+    type (:+@#@$$) :: Natural -> (~>) Natural Natural+    data (:+@#@$$) (a0123456789876543210 :: Natural) :: (~>) Natural Natural       where         (::+@#@$$###) :: Data.Singletons.SameKind (Apply ((:+@#@$$) a0123456789876543210) arg) ((:+@#@$$$) a0123456789876543210 arg) =>                          (:+@#@$$) a0123456789876543210 a0123456789876543210@@ -58,6 +58,6 @@     instance Data.Singletons.TH.SuppressUnusedWarnings.SuppressUnusedWarnings ((:+@#@$$) a0123456789876543210) where       Data.Singletons.TH.SuppressUnusedWarnings.suppressUnusedWarnings         = snd (((,) (::+@#@$$###)) ())-    type (:+@#@$$$) :: Nat -> Nat -> Nat-    type family (:+@#@$$$) (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) :: Nat where+    type (:+@#@$$$) :: Natural -> Natural -> Natural+    type family (:+@#@$$$) (a0123456789876543210 :: Natural) (a0123456789876543210 :: Natural) :: Natural where       (:+@#@$$$) a0123456789876543210 a0123456789876543210 = (:+) a0123456789876543210 a0123456789876543210
tests/compile-and-dump/Promote/Newtypes.golden view
@@ -2,7 +2,7 @@     promote       [d| newtype Foo             = Foo Nat-            deriving Eq+            deriving (Eq)           newtype Bar = Bar {unBar :: Nat} |]   ======>     newtype Foo
tests/compile-and-dump/Promote/Prelude.golden view
@@ -1,21 +1,21 @@ Promote/Prelude.hs:(0,0)-(0,0): Splicing declarations     promoteOnly-      [d| odd :: Nat -> Bool+      [d| odd :: Natural -> Bool           odd 0 = False           odd n = not . odd $ n - 1 |]   ======>-    type OddSym0 :: (~>) Nat Bool-    data OddSym0 :: (~>) Nat Bool+    type OddSym0 :: (~>) Natural Bool+    data OddSym0 :: (~>) Natural Bool       where         OddSym0KindInference :: SameKind (Apply OddSym0 arg) (OddSym1 arg) =>                                 OddSym0 a0123456789876543210     type instance Apply OddSym0 a0123456789876543210 = Odd a0123456789876543210     instance SuppressUnusedWarnings OddSym0 where       suppressUnusedWarnings = snd (((,) OddSym0KindInference) ())-    type OddSym1 :: Nat -> Bool-    type family OddSym1 (a0123456789876543210 :: Nat) :: Bool where+    type OddSym1 :: Natural -> Bool+    type family OddSym1 (a0123456789876543210 :: Natural) :: Bool where       OddSym1 a0123456789876543210 = Odd a0123456789876543210-    type Odd :: Nat -> Bool-    type family Odd (a :: Nat) :: Bool where+    type Odd :: Natural -> Bool+    type family Odd (a :: Natural) :: Bool where       Odd 0 = FalseSym0       Odd n = Apply (Apply ($@#@$) (Apply (Apply (.@#@$) NotSym0) OddSym0)) (Apply (Apply (-@#@$) n) (FromInteger 1))
tests/compile-and-dump/Promote/Prelude.hs view
@@ -102,7 +102,7 @@ replicateTest2b = Proxy  $(promoteOnly [d|-  odd :: Nat -> Bool+  odd :: Natural -> Bool   odd 0 = False   odd n = not . odd $ n - 1  |])
tests/compile-and-dump/Singletons/AsPattern.golden view
@@ -253,17 +253,17 @@     sFoo ::       forall (t :: [Nat]). Sing t -> Sing (Apply FooSym0 t :: [Nat])     sTup ::-      forall (t :: (Nat, Nat)).-      Sing t -> Sing (Apply TupSym0 t :: (Nat, Nat))+      forall (t :: (Nat, Nat)). Sing t+                                -> Sing (Apply TupSym0 t :: (Nat, Nat))     sBaz_ ::-      forall (t :: Maybe Baz).-      Sing t -> Sing (Apply Baz_Sym0 t :: Maybe Baz)+      forall (t :: Maybe Baz). Sing t+                               -> Sing (Apply Baz_Sym0 t :: Maybe Baz)     sBar ::-      forall (t :: Maybe Nat).-      Sing t -> Sing (Apply BarSym0 t :: Maybe Nat)+      forall (t :: Maybe Nat). Sing t+                               -> Sing (Apply BarSym0 t :: Maybe Nat)     sMaybePlus ::-      forall (t :: Maybe Nat).-      Sing t -> Sing (Apply MaybePlusSym0 t :: Maybe Nat)+      forall (t :: Maybe Nat). Sing t+                               -> Sing (Apply MaybePlusSym0 t :: Maybe Nat)     sFoo SNil       = let           sP :: Sing @_ Let0123456789876543210PSym0@@ -373,19 +373,34 @@         = case               (((,,) (toSing b :: SomeSing Nat)) (toSing b :: SomeSing Nat))                 (toSing b :: SomeSing Nat)-          of {+          of             (,,) (SomeSing c) (SomeSing c) (SomeSing c)-              -> SomeSing (((SBaz c) c) c) }+              -> SomeSing (((SBaz c) c) c)     instance (SingI n, SingI n, SingI n) =>              SingI (Baz (n :: Nat) (n :: Nat) (n :: Nat)) where       sing = ((SBaz sing) sing) sing+    instance (SingI n, SingI n) =>+             SingI1 (Baz (n :: Nat) (n :: Nat)) where+      liftSing = (SBaz sing) sing+    instance SingI n => SingI2 (Baz (n :: Nat)) where+      liftSing2 = SBaz sing     instance SingI (BazSym0 :: (~>) Nat ((~>) Nat ((~>) Nat Baz))) where       sing = (singFun3 @BazSym0) SBaz     instance SingI d =>              SingI (BazSym1 (d :: Nat) :: (~>) Nat ((~>) Nat Baz)) where       sing = (singFun2 @(BazSym1 (d :: Nat))) (SBaz (sing @d))+    instance SingI1 (BazSym1 :: Nat -> (~>) Nat ((~>) Nat Baz)) where+      liftSing (s :: Sing (d :: Nat))+        = (singFun2 @(BazSym1 (d :: Nat))) (SBaz s)     instance (SingI d, SingI d) =>              SingI (BazSym2 (d :: Nat) (d :: Nat) :: (~>) Nat Baz) where       sing         = (singFun1 @(BazSym2 (d :: Nat) (d :: Nat)))             ((SBaz (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (BazSym2 (d :: Nat) :: Nat -> (~>) Nat Baz) where+      liftSing (s :: Sing (d :: Nat))+        = (singFun1 @(BazSym2 (d :: Nat) (d :: Nat))) ((SBaz (sing @d)) s)+    instance SingI2 (BazSym2 :: Nat -> Nat -> (~>) Nat Baz) where+      liftSing2 (s :: Sing (d :: Nat)) (s :: Sing (d :: Nat))+        = (singFun1 @(BazSym2 (d :: Nat) (d :: Nat))) ((SBaz s) s)
tests/compile-and-dump/Singletons/BoundedDeriving.golden view
@@ -2,13 +2,13 @@     singletons       [d| data Foo1             = Foo1-            deriving Bounded+            deriving (Bounded)           data Foo2             = A | B | C | D | E-            deriving Bounded+            deriving (Bounded)           data Foo3 a             = Foo3 a-            deriving Bounded+            deriving (Bounded)           data Foo4 (a :: Type) (b :: Type)             = Foo41 | Foo42             deriving Bounded@@ -60,12 +60,12 @@     type Foo3Sym1 :: forall a. a -> Foo3 a     type family Foo3Sym1 (a0123456789876543210 :: a) :: Foo3 a where       Foo3Sym1 a0123456789876543210 = Foo3 a0123456789876543210-    type Foo41Sym0 :: forall (a :: Type) (b :: Type).-                      Foo4 (a :: Type) (b :: Type)+    type Foo41Sym0 :: forall (a :: Type)+                             (b :: Type). Foo4 (a :: Type) (b :: Type)     type family Foo41Sym0 :: Foo4 (a :: Type) (b :: Type) where       Foo41Sym0 = Foo41-    type Foo42Sym0 :: forall (a :: Type) (b :: Type).-                      Foo4 (a :: Type) (b :: Type)+    type Foo42Sym0 :: forall (a :: Type)+                             (b :: Type). Foo4 (a :: Type) (b :: Type)     type family Foo42Sym0 :: Foo4 (a :: Type) (b :: Type) where       Foo42Sym0 = Foo42     type PairSym0 :: (~>) Bool ((~>) Bool Pair)@@ -196,8 +196,7 @@       type Demote (Foo3 a) = Foo3 (Demote a)       fromSing (SFoo3 b) = Foo3 (fromSing b)       toSing (Foo3 (b :: Demote a))-        = case toSing b :: SomeSing a of {-            SomeSing c -> SomeSing (SFoo3 c) }+        = case toSing b :: SomeSing a of SomeSing c -> SomeSing (SFoo3 c)     data SFoo4 :: forall (a :: Type) (b :: Type). Foo4 a b -> Type       where         SFoo41 :: forall (a :: Type) (b :: Type).@@ -222,8 +221,8 @@       toSing (Pair (b :: Demote Bool) (b :: Demote Bool))         = case               ((,) (toSing b :: SomeSing Bool)) (toSing b :: SomeSing Bool)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c) }+          of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c)     instance SBounded Foo1 where       sMinBound :: Sing (MinBoundSym0 :: Foo1)       sMaxBound :: Sing (MaxBoundSym0 :: Foo1)@@ -267,6 +266,8 @@       sing = SE     instance SingI n => SingI (Foo3 (n :: a)) where       sing = SFoo3 sing+    instance SingI1 Foo3 where+      liftSing = SFoo3     instance SingI (Foo3Sym0 :: (~>) a (Foo3 a)) where       sing = (singFun1 @Foo3Sym0) SFoo3     instance SingI Foo41 where@@ -276,8 +277,15 @@     instance (SingI n, SingI n) =>              SingI (Pair (n :: Bool) (n :: Bool)) where       sing = (SPair sing) sing+    instance SingI n => SingI1 (Pair (n :: Bool)) where+      liftSing = SPair sing+    instance SingI2 Pair where+      liftSing2 = SPair     instance SingI (PairSym0 :: (~>) Bool ((~>) Bool Pair)) where       sing = (singFun2 @PairSym0) SPair     instance SingI d =>              SingI (PairSym1 (d :: Bool) :: (~>) Bool Pair) where       sing = (singFun1 @(PairSym1 (d :: Bool))) (SPair (sing @d))+    instance SingI1 (PairSym1 :: Bool -> (~>) Bool Pair) where+      liftSing (s :: Sing (d :: Bool))+        = (singFun1 @(PairSym1 (d :: Bool))) (SPair s)
tests/compile-and-dump/Singletons/BoxUnBox.golden view
@@ -46,9 +46,10 @@       type Demote (Box a) = Box (Demote a)       fromSing (SFBox b) = FBox (fromSing b)       toSing (FBox (b :: Demote a))-        = case toSing b :: SomeSing a of {-            SomeSing c -> SomeSing (SFBox c) }+        = case toSing b :: SomeSing a of SomeSing c -> SomeSing (SFBox c)     instance SingI n => SingI (FBox (n :: a)) where       sing = SFBox sing+    instance SingI1 FBox where+      liftSing = SFBox     instance SingI (FBoxSym0 :: (~>) a (Box a)) where       sing = (singFun1 @FBoxSym0) SFBox
tests/compile-and-dump/Singletons/CaseExpressions.golden view
@@ -6,18 +6,18 @@                 Just y -> y                 Nothing -> d           foo2 :: a -> Maybe a -> a-          foo2 d _ = case (Just d) of { Just y -> y }+          foo2 d _ = case (Just d) of Just y -> y           foo3 :: a -> b -> a-          foo3 a b = case (a, b) of { (p, _) -> p }+          foo3 a b = case (a, b) of (p, _) -> p           foo4 :: forall a. a -> a           foo4 x-            = case x of {+            = case x of                 y -> let                        z :: a                        z = y-                     in z }+                     in z           foo5 :: a -> a-          foo5 x = case x of { y -> (\ _ -> x) y } |]+          foo5 x = case x of y -> (\ _ -> x) y |]   ======>     foo1 :: a -> Maybe a -> a     foo1 d x@@ -25,18 +25,18 @@           Just y -> y           Nothing -> d     foo2 :: a -> Maybe a -> a-    foo2 d _ = case Just d of { Just y -> y }+    foo2 d _ = case Just d of Just y -> y     foo3 :: a -> b -> a-    foo3 a b = case (a, b) of { (p, _) -> p }+    foo3 a b = case (a, b) of (p, _) -> p     foo4 :: forall a. a -> a     foo4 x-      = case x of {+      = case x of           y -> let                  z :: a                  z = y-               in z }+               in z     foo5 :: a -> a-    foo5 x = case x of { y -> (\ _ -> x) y }+    foo5 x = case x of y -> (\ _ -> x) y     type family Case_0123456789876543210 arg_0123456789876543210 y x t where       Case_0123456789876543210 arg_0123456789876543210 y x _ = x     type family Lambda_0123456789876543210 y x arg_0123456789876543210 where@@ -236,35 +236,35 @@     sFoo5 :: forall a (t :: a). Sing t -> Sing (Apply Foo5Sym0 t :: a)     sFoo4 :: forall a (t :: a). Sing t -> Sing (Apply Foo4Sym0 t :: a)     sFoo3 ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply Foo3Sym0 t) t :: a)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Foo3Sym0 t) t :: a)     sFoo2 ::-      forall a (t :: a) (t :: Maybe a).-      Sing t -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)+      forall a (t :: a) (t :: Maybe a). Sing t+                                        -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)     sFoo1 ::-      forall a (t :: a) (t :: Maybe a).-      Sing t -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)+      forall a (t :: a) (t :: Maybe a). Sing t+                                        -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)     sFoo5 (sX :: Sing x)       = (id @(Sing (Case_0123456789876543210 x x :: a)))-          (case sX of {+          (case sX of              (sY :: Sing y)                -> (applySing                      ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 y) x))                         (\ sArg_0123456789876543210-                           -> case sArg_0123456789876543210 of {+                           -> case sArg_0123456789876543210 of                                 (_ :: Sing arg_0123456789876543210)                                   -> (id                                         @(Sing (Case_0123456789876543210 arg_0123456789876543210 y x arg_0123456789876543210)))-                                       (case sArg_0123456789876543210 of { _ -> sX }) })))-                    sY })+                                       (case sArg_0123456789876543210 of _ -> sX))))+                    sY)     sFoo4 (sX :: Sing x)       = (id @(Sing (Case_0123456789876543210 x x :: a)))-          (case sX of {+          (case sX of              (sY :: Sing y)                -> let                     sZ :: Sing (Let0123456789876543210ZSym2 y x :: a)                     sZ = sY-                  in sZ })+                  in sZ)     sFoo3 (sA :: Sing a) (sB :: Sing b)       = let           sScrutinee_0123456789876543210 ::@@ -274,8 +274,8 @@         in           (id              @(Sing (Case_0123456789876543210 a b (Let0123456789876543210Scrutinee_0123456789876543210Sym2 a b) :: a)))-            (case sScrutinee_0123456789876543210 of {-               STuple2 (sP :: Sing p) _ -> sP })+            (case sScrutinee_0123456789876543210 of+               STuple2 (sP :: Sing p) _ -> sP)     sFoo2 (sD :: Sing d) _       = let           sScrutinee_0123456789876543210 ::@@ -285,8 +285,7 @@         in           (id              @(Sing (Case_0123456789876543210 d (Let0123456789876543210Scrutinee_0123456789876543210Sym1 d) :: a)))-            (case sScrutinee_0123456789876543210 of {-               SJust (sY :: Sing y) -> sY })+            (case sScrutinee_0123456789876543210 of SJust (sY :: Sing y) -> sY)     sFoo1 (sD :: Sing d) (sX :: Sing x)       = (id @(Sing (Case_0123456789876543210 d x x :: a)))           (case sX of@@ -300,13 +299,22 @@       sing = (singFun2 @Foo3Sym0) sFoo3     instance SingI d => SingI (Foo3Sym1 (d :: a) :: (~>) b a) where       sing = (singFun1 @(Foo3Sym1 (d :: a))) (sFoo3 (sing @d))+    instance SingI1 (Foo3Sym1 :: a -> (~>) b a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo3Sym1 (d :: a))) (sFoo3 s)     instance SingI (Foo2Sym0 :: (~>) a ((~>) (Maybe a) a)) where       sing = (singFun2 @Foo2Sym0) sFoo2     instance SingI d =>              SingI (Foo2Sym1 (d :: a) :: (~>) (Maybe a) a) where       sing = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 (sing @d))+    instance SingI1 (Foo2Sym1 :: a -> (~>) (Maybe a) a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 s)     instance SingI (Foo1Sym0 :: (~>) a ((~>) (Maybe a) a)) where       sing = (singFun2 @Foo1Sym0) sFoo1     instance SingI d =>              SingI (Foo1Sym1 (d :: a) :: (~>) (Maybe a) a) where       sing = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 (sing @d))+    instance SingI1 (Foo1Sym1 :: a -> (~>) (Maybe a) a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 s)
tests/compile-and-dump/Singletons/Classes.golden view
@@ -184,8 +184,8 @@     type family TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: a) (a0123456789876543210 :: a) :: Ordering where       TFHelper_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210     class PMyOrd a where-      type Mycompare (arg :: a) (arg :: a) :: Ordering-      type (<=>) (arg :: a) (arg :: a) :: Ordering+      type family Mycompare (arg :: a) (arg :: a) :: Ordering+      type family (<=>) (arg :: a) (arg :: a) :: Ordering       type (<=>) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a     type Mycompare_0123456789876543210 :: Nat -> Nat -> Ordering     type family Mycompare_0123456789876543210 (a :: Nat) (a :: Nat) :: Ordering where@@ -298,12 +298,11 @@     instance PEq Foo2 where       type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a     sFooCompare ::-      forall (t :: Foo) (t :: Foo).-      Sing t-      -> Sing t -> Sing (Apply (Apply FooCompareSym0 t) t :: Ordering)+      forall (t :: Foo) (t :: Foo). Sing t+                                    -> Sing t -> Sing (Apply (Apply FooCompareSym0 t) t :: Ordering)     sConst ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply ConstSym0 t) t :: a)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply ConstSym0 t) t :: a)     sFooCompare SA SA = SEQ     sFooCompare SA SB = SLT     sFooCompare SB SB = SGT@@ -315,10 +314,16 @@              SingI (FooCompareSym1 (d :: Foo) :: (~>) Foo Ordering) where       sing         = (singFun1 @(FooCompareSym1 (d :: Foo))) (sFooCompare (sing @d))+    instance SingI1 (FooCompareSym1 :: Foo -> (~>) Foo Ordering) where+      liftSing (s :: Sing (d :: Foo))+        = (singFun1 @(FooCompareSym1 (d :: Foo))) (sFooCompare s)     instance SingI (ConstSym0 :: (~>) a ((~>) b a)) where       sing = (singFun2 @ConstSym0) sConst     instance SingI d => SingI (ConstSym1 (d :: a) :: (~>) b a) where       sing = (singFun1 @(ConstSym1 (d :: a))) (sConst (sing @d))+    instance SingI1 (ConstSym1 :: a -> (~>) b a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(ConstSym1 (d :: a))) (sConst s)     data SFoo :: Foo -> GHC.Types.Type       where         SA :: SFoo (A :: Foo)@@ -343,18 +348,17 @@       toSing G = SomeSing SG     class SMyOrd a where       sMycompare ::-        forall (t :: a) (t :: a).-        Sing t-        -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)+        forall (t :: a) (t :: a). Sing t+                                  -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)       (%<=>) ::-        forall (t :: a) (t :: a).-        Sing t -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)+        forall (t :: a) (t :: a). Sing t+                                  -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)       infix 4 %<=>       default (%<=>) ::-                forall (t :: a) (t :: a).-                ((Apply (Apply (<=>@#@$) t) t :: Ordering)-                 ~ Apply (Apply TFHelper_0123456789876543210Sym0 t) t) =>-                Sing t -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)+                forall (t :: a)+                       (t :: a). ((Apply (Apply (<=>@#@$) t) t :: Ordering)+                                  ~ Apply (Apply TFHelper_0123456789876543210Sym0 t) t) =>+                                 Sing t -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)       (%<=>)         (sA_0123456789876543210 :: Sing a_0123456789876543210)         (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -364,9 +368,9 @@             sA_0123456789876543210     instance SMyOrd Nat where       sMycompare ::-        forall (t :: Nat) (t :: Nat).-        Sing t-        -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)+        forall (t :: Nat) (t :: Nat). Sing t+                                      -> Sing t+                                         -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)       sMycompare SZero SZero = SEQ       sMycompare SZero (SSucc _) = SLT       sMycompare (SSucc _) SZero = SGT@@ -376,17 +380,16 @@             sN     instance SMyOrd () where       sMycompare ::-        forall (t :: ()) (t :: ()).-        Sing t-        -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)+        forall (t :: ()) (t :: ()). Sing t+                                    -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)       sMycompare _ (sA_0123456789876543210 :: Sing a_0123456789876543210)         = (applySing ((applySing ((singFun2 @ConstSym0) sConst)) SEQ))             sA_0123456789876543210     instance SMyOrd Foo where       sMycompare ::-        forall (t :: Foo) (t :: Foo).-        Sing t-        -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)+        forall (t :: Foo) (t :: Foo). Sing t+                                      -> Sing t+                                         -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)       sMycompare         (sA_0123456789876543210 :: Sing a_0123456789876543210)         (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -396,11 +399,10 @@             sA_0123456789876543210     instance SEq Foo2 where       (%==) ::-        forall (t1 :: Foo2) (t2 :: Foo2).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun Foo2 ((~>) Foo2 Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: Foo2) (t2 :: Foo2). Sing t1+                                          -> Sing t2+                                             -> Sing (Apply (Apply ((==@#@$) :: TyFun Foo2 ((~>) Foo2 Bool)+                                                                                -> GHC.Types.Type) t1) t2)       (%==) SF SF = STrue       (%==) SG SG = STrue       (%==) SF SG = SFalse@@ -420,11 +422,19 @@              SingI (MycompareSym1 (d :: a) :: (~>) a Ordering) where       sing = (singFun1 @(MycompareSym1 (d :: a))) (sMycompare (sing @d))     instance SMyOrd a =>+             SingI1 (MycompareSym1 :: a -> (~>) a Ordering) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(MycompareSym1 (d :: a))) (sMycompare s)+    instance SMyOrd a =>              SingI ((<=>@#@$) :: (~>) a ((~>) a Ordering)) where       sing = (singFun2 @(<=>@#@$)) (%<=>)     instance (SMyOrd a, SingI d) =>              SingI ((<=>@#@$$) (d :: a) :: (~>) a Ordering) where       sing = (singFun1 @((<=>@#@$$) (d :: a))) ((%<=>) (sing @d))+    instance SMyOrd a =>+             SingI1 ((<=>@#@$$) :: a -> (~>) a Ordering) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((<=>@#@$$) (d :: a))) ((%<=>) s) Singletons/Classes.hs:(0,0)-(0,0): Splicing declarations     promote       [d| instance Ord Foo2 where@@ -572,15 +582,14 @@       fromSing (SSucc' b) = Succ' (fromSing b)       toSing Zero' = SomeSing SZero'       toSing (Succ' (b :: Demote Nat'))-        = case toSing b :: SomeSing Nat' of {-            SomeSing c -> SomeSing (SSucc' c) }+        = case toSing b :: SomeSing Nat' of+            SomeSing c -> SomeSing (SSucc' c)     instance SMyOrd Nat' where       sMycompare ::-        forall (t :: Nat') (t :: Nat').-        Sing t-        -> Sing t-           -> Sing (Apply (Apply (MycompareSym0 :: TyFun Nat' ((~>) Nat' Ordering)-                                                   -> GHC.Types.Type) t) t)+        forall (t :: Nat') (t :: Nat'). Sing t+                                        -> Sing t+                                           -> Sing (Apply (Apply (MycompareSym0 :: TyFun Nat' ((~>) Nat' Ordering)+                                                                                   -> GHC.Types.Type) t) t)       sMycompare SZero' SZero' = SEQ       sMycompare SZero' (SSucc' _) = SLT       sMycompare (SSucc' _) SZero' = SGT@@ -592,5 +601,7 @@       sing = SZero'     instance SingI n => SingI (Succ' (n :: Nat')) where       sing = SSucc' sing+    instance SingI1 Succ' where+      liftSing = SSucc'     instance SingI (Succ'Sym0 :: (~>) Nat' Nat') where       sing = (singFun1 @Succ'Sym0) SSucc'
tests/compile-and-dump/Singletons/Classes2.golden view
@@ -71,15 +71,14 @@       fromSing (SSuccFoo b) = SuccFoo (fromSing b)       toSing ZeroFoo = SomeSing SZeroFoo       toSing (SuccFoo (b :: Demote NatFoo))-        = case toSing b :: SomeSing NatFoo of {-            SomeSing c -> SomeSing (SSuccFoo c) }+        = case toSing b :: SomeSing NatFoo of+            SomeSing c -> SomeSing (SSuccFoo c)     instance SMyOrd NatFoo where       sMycompare ::-        forall (t1 :: NatFoo) (t2 :: NatFoo).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (MycompareSym0 :: TyFun NatFoo ((~>) NatFoo Ordering)-                                                   -> GHC.Types.Type) t1) t2)+        forall (t1 :: NatFoo) (t2 :: NatFoo). Sing t1+                                              -> Sing t2+                                                 -> Sing (Apply (Apply (MycompareSym0 :: TyFun NatFoo ((~>) NatFoo Ordering)+                                                                                         -> GHC.Types.Type) t1) t2)       sMycompare SZeroFoo SZeroFoo = SEQ       sMycompare SZeroFoo (SSuccFoo _) = SLT       sMycompare (SSuccFoo _) SZeroFoo = SGT@@ -91,5 +90,7 @@       sing = SZeroFoo     instance SingI n => SingI (SuccFoo (n :: NatFoo)) where       sing = SSuccFoo sing+    instance SingI1 SuccFoo where+      liftSing = SSuccFoo     instance SingI (SuccFooSym0 :: (~>) NatFoo NatFoo) where       sing = (singFun1 @SuccFooSym0) SSuccFoo
tests/compile-and-dump/Singletons/Contains.golden view
@@ -31,9 +31,9 @@       Contains _ '[] = FalseSym0       Contains elt ('(:) h t) = Apply (Apply (||@#@$) (Apply (Apply (==@#@$) elt) h)) (Apply (Apply ContainsSym0 elt) t)     sContains ::-      forall a (t :: a) (t :: [a]).-      SEq a =>-      Sing t -> Sing t -> Sing (Apply (Apply ContainsSym0 t) t :: Bool)+      forall a (t :: a) (t :: [a]). SEq a =>+                                    Sing t+                                    -> Sing t -> Sing (Apply (Apply ContainsSym0 t) t :: Bool)     sContains _ SNil = SFalse     sContains (sElt :: Sing elt) (SCons (sH :: Sing h) (sT :: Sing t))       = (applySing@@ -48,3 +48,6 @@     instance (SEq a, SingI d) =>              SingI (ContainsSym1 (d :: a) :: (~>) [a] Bool) where       sing = (singFun1 @(ContainsSym1 (d :: a))) (sContains (sing @d))+    instance SEq a => SingI1 (ContainsSym1 :: a -> (~>) [a] Bool) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(ContainsSym1 (d :: a))) (sContains s)
tests/compile-and-dump/Singletons/DataValues.golden view
@@ -51,12 +51,12 @@       Complex = Apply (Apply PairSym0 (Apply (Apply PairSym0 (Apply JustSym0 ZeroSym0)) ZeroSym0)) FalseSym0     type family Pr where       Pr = Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) ZeroSym0) NilSym0)-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> Pair a b -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Pair a b) (a :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: Pair a b) (a :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210 p_0123456789876543210 (Pair arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Pair ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (Pair a b) ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (Pair a b) ((~>) Symbol Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (Pair a b) ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (Pair a b) ((~>) Symbol Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -64,9 +64,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) (Pair a b) ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) (Pair a b) ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) (Pair a b) ((~>) Symbol Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -74,9 +74,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> Pair a b -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a b) :: (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Pair a b) :: (~>) Symbol Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -84,9 +84,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> Pair a b -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a b) (a0123456789876543210 :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Pair a b) (a0123456789876543210 :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow (Pair a b) where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -131,16 +131,17 @@       type Demote (Pair a b) = Pair (Demote a) (Demote b)       fromSing (SPair b b) = (Pair (fromSing b)) (fromSing b)       toSing (Pair (b :: Demote a) (b :: Demote b))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c)     instance (SShow a, SShow b) => SShow (Pair a b) where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: Pair a b) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Pair a b) ((~>) Symbol Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: Pair a b)+               (t3 :: Symbol). Sing t1+                               -> Sing t2+                                  -> Sing t3+                                     -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) (Pair a b) ((~>) Symbol Symbol))+                                                                                    -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         (sP_0123456789876543210 :: Sing p_0123456789876543210)         (SPair (sArg_0123456789876543210 :: Sing arg_0123456789876543210)@@ -175,8 +176,15 @@                       Show (SPair (z :: Pair a b))     instance (SingI n, SingI n) => SingI (Pair (n :: a) (n :: b)) where       sing = (SPair sing) sing+    instance SingI n => SingI1 (Pair (n :: a)) where+      liftSing = SPair sing+    instance SingI2 Pair where+      liftSing2 = SPair     instance SingI (PairSym0 :: (~>) a ((~>) b (Pair a b))) where       sing = (singFun2 @PairSym0) SPair     instance SingI d =>              SingI (PairSym1 (d :: a) :: (~>) b (Pair a b)) where       sing = (singFun1 @(PairSym1 (d :: a))) (SPair (sing @d))+    instance SingI1 (PairSym1 :: a -> (~>) b (Pair a b)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(PairSym1 (d :: a))) (SPair s)
tests/compile-and-dump/Singletons/Empty.golden view
@@ -6,5 +6,5 @@     type instance Sing @Empty = SEmpty     instance SingKind Empty where       type Demote Empty = Empty-      fromSing x = case x of-      toSing x = SomeSing (case x of)+      fromSing x = case x of {}+      toSing x = SomeSing (case x of {})
tests/compile-and-dump/Singletons/EmptyShowDeriving.golden view
@@ -7,12 +7,12 @@     data Foo     deriving instance Show Foo     type family Case_0123456789876543210 v_0123456789876543210 a_0123456789876543210 t where-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> Foo -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: Foo) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210 _ v_0123456789876543210 a_0123456789876543210 = Apply (Case_0123456789876543210 v_0123456789876543210 a_0123456789876543210 v_0123456789876543210) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -20,9 +20,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -30,9 +30,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> Foo -> (~>) GHC.Types.Symbol GHC.Types.Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Foo) :: (~>) GHC.Types.Symbol GHC.Types.Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -40,9 +40,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> Foo -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Foo) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow Foo where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -50,16 +50,17 @@     type instance Sing @Foo = SFoo     instance SingKind Foo where       type Demote Foo = Foo-      fromSing x = case x of-      toSing x = SomeSing (case x of)+      fromSing x = case x of {}+      toSing x = SomeSing (case x of {})     instance SShow Foo where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: Foo) (t3 :: GHC.Types.Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: Foo)+               (t3 :: GHC.Types.Symbol). Sing t1+                                         -> Sing t2+                                            -> Sing t3+                                               -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol))+                                                                                              -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         _         (sV_0123456789876543210 :: Sing v_0123456789876543210)@@ -67,6 +68,6 @@         = (applySing              ((id                  @(Sing (Case_0123456789876543210 v_0123456789876543210 a_0123456789876543210 v_0123456789876543210)))-                (case sV_0123456789876543210 of)))+                (case sV_0123456789876543210 of {})))             sA_0123456789876543210     deriving instance Show (SFoo (z :: Foo))
tests/compile-and-dump/Singletons/EnumDeriving.golden view
@@ -33,11 +33,11 @@     type family Case_0123456789876543210 n t where       Case_0123456789876543210 n 'True = BarSym0       Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 1))-    type ToEnum_0123456789876543210 :: GHC.Types.Nat -> Foo-    type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: Foo where+    type ToEnum_0123456789876543210 :: GHC.Num.Natural.Natural -> Foo+    type family ToEnum_0123456789876543210 (a :: GHC.Num.Natural.Natural) :: Foo where       ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0))-    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat Foo-    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat Foo+    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural Foo+    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural Foo       where         ToEnum_0123456789876543210Sym0KindInference :: SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>                                                        ToEnum_0123456789876543210Sym0 a0123456789876543210@@ -45,16 +45,17 @@     instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())-    type ToEnum_0123456789876543210Sym1 :: GHC.Types.Nat -> Foo-    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: Foo where+    type ToEnum_0123456789876543210Sym1 :: GHC.Num.Natural.Natural+                                           -> Foo+    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: Foo where       ToEnum_0123456789876543210Sym1 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210-    type FromEnum_0123456789876543210 :: Foo -> GHC.Types.Nat-    type family FromEnum_0123456789876543210 (a :: Foo) :: GHC.Types.Nat where+    type FromEnum_0123456789876543210 :: Foo -> GHC.Num.Natural.Natural+    type family FromEnum_0123456789876543210 (a :: Foo) :: GHC.Num.Natural.Natural where       FromEnum_0123456789876543210 Bar = FromInteger 0       FromEnum_0123456789876543210 Baz = FromInteger 1       FromEnum_0123456789876543210 Bum = FromInteger 2-    type FromEnum_0123456789876543210Sym0 :: (~>) Foo GHC.Types.Nat-    data FromEnum_0123456789876543210Sym0 :: (~>) Foo GHC.Types.Nat+    type FromEnum_0123456789876543210Sym0 :: (~>) Foo GHC.Num.Natural.Natural+    data FromEnum_0123456789876543210Sym0 :: (~>) Foo GHC.Num.Natural.Natural       where         FromEnum_0123456789876543210Sym0KindInference :: SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>                                                          FromEnum_0123456789876543210Sym0 a0123456789876543210@@ -62,8 +63,9 @@     instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())-    type FromEnum_0123456789876543210Sym1 :: Foo -> GHC.Types.Nat-    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Foo) :: GHC.Types.Nat where+    type FromEnum_0123456789876543210Sym1 :: Foo+                                             -> GHC.Num.Natural.Natural+    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Foo) :: GHC.Num.Natural.Natural where       FromEnum_0123456789876543210Sym1 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210     instance PEnum Foo where       type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a@@ -95,15 +97,13 @@       toSing Q2 = SomeSing SQ2     instance SEnum Foo where       sToEnum ::-        forall (t :: GHC.Types.Nat).-        Sing t-        -> Sing (Apply (Data.Singletons.Base.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat Foo-                                                                -> GHC.Types.Type) t)+        forall (t :: GHC.Num.Natural.Natural). Sing t+                                               -> Sing (Apply (Data.Singletons.Base.Enum.ToEnumSym0 :: TyFun GHC.Num.Natural.Natural Foo+                                                                                                       -> GHC.Types.Type) t)       sFromEnum ::-        forall (t :: Foo).-        Sing t-        -> Sing (Apply (Data.Singletons.Base.Enum.FromEnumSym0 :: TyFun Foo GHC.Types.Nat-                                                                  -> GHC.Types.Type) t)+        forall (t :: Foo). Sing t+                           -> Sing (Apply (Data.Singletons.Base.Enum.FromEnumSym0 :: TyFun Foo GHC.Num.Natural.Natural+                                                                                     -> GHC.Types.Type) t)       sToEnum (sN :: Sing n)         = (id              @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0)))))@@ -151,11 +151,11 @@     type family Case_0123456789876543210 n t where       Case_0123456789876543210 n 'True = Q1Sym0       Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 1))-    type ToEnum_0123456789876543210 :: GHC.Types.Nat -> Quux-    type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: Quux where+    type ToEnum_0123456789876543210 :: GHC.Num.Natural.Natural -> Quux+    type family ToEnum_0123456789876543210 (a :: GHC.Num.Natural.Natural) :: Quux where       ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0))-    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat Quux-    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat Quux+    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural Quux+    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural Quux       where         ToEnum_0123456789876543210Sym0KindInference :: SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>                                                        ToEnum_0123456789876543210Sym0 a0123456789876543210@@ -163,15 +163,17 @@     instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())-    type ToEnum_0123456789876543210Sym1 :: GHC.Types.Nat -> Quux-    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: Quux where+    type ToEnum_0123456789876543210Sym1 :: GHC.Num.Natural.Natural+                                           -> Quux+    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: Quux where       ToEnum_0123456789876543210Sym1 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210-    type FromEnum_0123456789876543210 :: Quux -> GHC.Types.Nat-    type family FromEnum_0123456789876543210 (a :: Quux) :: GHC.Types.Nat where+    type FromEnum_0123456789876543210 :: Quux+                                         -> GHC.Num.Natural.Natural+    type family FromEnum_0123456789876543210 (a :: Quux) :: GHC.Num.Natural.Natural where       FromEnum_0123456789876543210 'Q1 = FromInteger 0       FromEnum_0123456789876543210 'Q2 = FromInteger 1-    type FromEnum_0123456789876543210Sym0 :: (~>) Quux GHC.Types.Nat-    data FromEnum_0123456789876543210Sym0 :: (~>) Quux GHC.Types.Nat+    type FromEnum_0123456789876543210Sym0 :: (~>) Quux GHC.Num.Natural.Natural+    data FromEnum_0123456789876543210Sym0 :: (~>) Quux GHC.Num.Natural.Natural       where         FromEnum_0123456789876543210Sym0KindInference :: SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>                                                          FromEnum_0123456789876543210Sym0 a0123456789876543210@@ -179,23 +181,22 @@     instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())-    type FromEnum_0123456789876543210Sym1 :: Quux -> GHC.Types.Nat-    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Quux) :: GHC.Types.Nat where+    type FromEnum_0123456789876543210Sym1 :: Quux+                                             -> GHC.Num.Natural.Natural+    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Quux) :: GHC.Num.Natural.Natural where       FromEnum_0123456789876543210Sym1 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210     instance PEnum Quux where       type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a       type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a     instance SEnum Quux where       sToEnum ::-        forall (t :: GHC.Types.Nat).-        Sing t-        -> Sing (Apply (Data.Singletons.Base.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat Quux-                                                                -> GHC.Types.Type) t)+        forall (t :: GHC.Num.Natural.Natural). Sing t+                                               -> Sing (Apply (Data.Singletons.Base.Enum.ToEnumSym0 :: TyFun GHC.Num.Natural.Natural Quux+                                                                                                       -> GHC.Types.Type) t)       sFromEnum ::-        forall (t :: Quux).-        Sing t-        -> Sing (Apply (Data.Singletons.Base.Enum.FromEnumSym0 :: TyFun Quux GHC.Types.Nat-                                                                  -> GHC.Types.Type) t)+        forall (t :: Quux). Sing t+                            -> Sing (Apply (Data.Singletons.Base.Enum.FromEnumSym0 :: TyFun Quux GHC.Num.Natural.Natural+                                                                                      -> GHC.Types.Type) t)       sToEnum (sN :: Sing n)         = (id              @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0)))))
tests/compile-and-dump/Singletons/EqInstances.golden view
@@ -32,11 +32,10 @@       type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a     instance SEq Foo => SEq Foo where       (%==) ::-        forall (t1 :: Foo) (t2 :: Foo).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun Foo ((~>) Foo Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: Foo) (t2 :: Foo). Sing t1+                                        -> Sing t2+                                           -> Sing (Apply (Apply ((==@#@$) :: TyFun Foo ((~>) Foo Bool)+                                                                              -> GHC.Types.Type) t1) t2)       (%==) SFLeaf SFLeaf = STrue       (%==) SFLeaf ((:%+:) _ _) = SFalse       (%==) ((:%+:) _ _) SFLeaf = SFalse@@ -81,9 +80,8 @@       type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a     instance SEq Empty where       (%==) ::-        forall (t1 :: Empty) (t2 :: Empty).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun Empty ((~>) Empty Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: Empty) (t2 :: Empty). Sing t1+                                            -> Sing t2+                                               -> Sing (Apply (Apply ((==@#@$) :: TyFun Empty ((~>) Empty Bool)+                                                                                  -> GHC.Types.Type) t1) t2)       (%==) _ _ = STrue
tests/compile-and-dump/Singletons/Fixity.golden view
@@ -63,20 +63,23 @@       (<=>@#@$$$) a0123456789876543210 a0123456789876543210 = (<=>) a0123456789876543210 a0123456789876543210     infix 4 <=>@#@$$$     class PMyOrd a where-      type (<=>) (arg :: a) (arg :: a) :: Ordering+      type family (<=>) (arg :: a) (arg :: a) :: Ordering     infix 4 %====     (%====) ::-      forall a (t :: a) (t :: a).-      Sing t -> Sing t -> Sing (Apply (Apply (====@#@$) t) t :: a)+      forall a (t :: a) (t :: a). Sing t+                                  -> Sing t -> Sing (Apply (Apply (====@#@$) t) t :: a)     (%====) (sA :: Sing a) _ = sA     instance SingI ((====@#@$) :: (~>) a ((~>) a a)) where       sing = (singFun2 @(====@#@$)) (%====)     instance SingI d => SingI ((====@#@$$) (d :: a) :: (~>) a a) where       sing = (singFun1 @((====@#@$$) (d :: a))) ((%====) (sing @d))+    instance SingI1 ((====@#@$$) :: a -> (~>) a a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((====@#@$$) (d :: a))) ((%====) s)     class SMyOrd a where       (%<=>) ::-        forall (t :: a) (t :: a).-        Sing t -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)+        forall (t :: a) (t :: a). Sing t+                                  -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)       infix 4 %<=>     instance SMyOrd a =>              SingI ((<=>@#@$) :: (~>) a ((~>) a Ordering)) where@@ -84,3 +87,7 @@     instance (SMyOrd a, SingI d) =>              SingI ((<=>@#@$$) (d :: a) :: (~>) a Ordering) where       sing = (singFun1 @((<=>@#@$$) (d :: a))) ((%<=>) (sing @d))+    instance SMyOrd a =>+             SingI1 ((<=>@#@$$) :: a -> (~>) a Ordering) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((<=>@#@$$) (d :: a))) ((%<=>) s)
tests/compile-and-dump/Singletons/FunDeps.golden view
@@ -6,7 +6,7 @@             meth :: a -> a             l2r :: a -> b           -          instance FD Bool Nat where+          instance FD Bool Natural where             meth = not             l2r False = 0             l2r True = 1 |]@@ -14,7 +14,7 @@     class FD a b | a -> b where       meth :: a -> a       l2r :: a -> b-    instance FD Bool Nat where+    instance FD Bool Natural where       meth = not       l2r False = 0       l2r True = 1@@ -46,8 +46,8 @@     type family L2rSym1 (a0123456789876543210 :: a) :: b where       L2rSym1 a0123456789876543210 = L2r a0123456789876543210     class PFD a b | a -> b where-      type Meth (arg :: a) :: a-      type L2r (arg :: a) :: b+      type family Meth (arg :: a) :: a+      type family L2r (arg :: a) :: b     type Meth_0123456789876543210 :: Bool -> Bool     type family Meth_0123456789876543210 (a :: Bool) :: Bool where       Meth_0123456789876543210 a_0123456789876543210 = Apply NotSym0 a_0123456789876543210@@ -63,12 +63,12 @@     type Meth_0123456789876543210Sym1 :: Bool -> Bool     type family Meth_0123456789876543210Sym1 (a0123456789876543210 :: Bool) :: Bool where       Meth_0123456789876543210Sym1 a0123456789876543210 = Meth_0123456789876543210 a0123456789876543210-    type L2r_0123456789876543210 :: Bool -> Nat-    type family L2r_0123456789876543210 (a :: Bool) :: Nat where+    type L2r_0123456789876543210 :: Bool -> Natural+    type family L2r_0123456789876543210 (a :: Bool) :: Natural where       L2r_0123456789876543210 'False = FromInteger 0       L2r_0123456789876543210 'True = FromInteger 1-    type L2r_0123456789876543210Sym0 :: (~>) Bool Nat-    data L2r_0123456789876543210Sym0 :: (~>) Bool Nat+    type L2r_0123456789876543210Sym0 :: (~>) Bool Natural+    data L2r_0123456789876543210Sym0 :: (~>) Bool Natural       where         L2r_0123456789876543210Sym0KindInference :: SameKind (Apply L2r_0123456789876543210Sym0 arg) (L2r_0123456789876543210Sym1 arg) =>                                                     L2r_0123456789876543210Sym0 a0123456789876543210@@ -76,10 +76,10 @@     instance SuppressUnusedWarnings L2r_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) L2r_0123456789876543210Sym0KindInference) ())-    type L2r_0123456789876543210Sym1 :: Bool -> Nat-    type family L2r_0123456789876543210Sym1 (a0123456789876543210 :: Bool) :: Nat where+    type L2r_0123456789876543210Sym1 :: Bool -> Natural+    type family L2r_0123456789876543210Sym1 (a0123456789876543210 :: Bool) :: Natural where       L2r_0123456789876543210Sym1 a0123456789876543210 = L2r_0123456789876543210 a0123456789876543210-    instance PFD Bool Nat where+    instance PFD Bool Natural where       type Meth a = Apply Meth_0123456789876543210Sym0 a       type L2r a = Apply L2r_0123456789876543210Sym0 a     sT1 :: Sing @_ T1Sym0@@ -87,10 +87,11 @@     class SFD a b | a -> b where       sMeth :: forall (t :: a). Sing t -> Sing (Apply MethSym0 t :: a)       sL2r :: forall (t :: a). Sing t -> Sing (Apply L2rSym0 t :: b)-    instance SFD Bool Nat where+    instance SFD Bool Natural where       sMeth ::         forall (t :: Bool). Sing t -> Sing (Apply MethSym0 t :: Bool)-      sL2r :: forall (t :: Bool). Sing t -> Sing (Apply L2rSym0 t :: Nat)+      sL2r ::+        forall (t :: Bool). Sing t -> Sing (Apply L2rSym0 t :: Natural)       sMeth (sA_0123456789876543210 :: Sing a_0123456789876543210)         = (applySing ((singFun1 @NotSym0) sNot)) sA_0123456789876543210       sL2r SFalse = sFromInteger (sing :: Sing 0)
tests/compile-and-dump/Singletons/FunDeps.hs view
@@ -11,7 +11,7 @@     meth :: a -> a     l2r  :: a -> b -  instance FD Bool Nat where+  instance FD Bool Natural where     meth = not     l2r False = 0     l2r True  = 1
tests/compile-and-dump/Singletons/FunctorLikeDeriving.golden view
@@ -9,8 +9,8 @@       = MkT1 x a (Maybe a) (Maybe (Maybe a)) | MkT2 (Maybe x)       deriving (Functor, Foldable, Traversable)     data Empty (a :: Type) deriving (Functor, Foldable, Traversable)-    type MkT1Sym0 :: forall x a.-                     (~>) x ((~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))))+    type MkT1Sym0 :: forall x+                            a. (~>) x ((~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))))     data MkT1Sym0 :: (~>) x ((~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))))       where         MkT1Sym0KindInference :: SameKind (Apply MkT1Sym0 arg) (MkT1Sym1 arg) =>@@ -18,8 +18,8 @@     type instance Apply MkT1Sym0 a0123456789876543210 = MkT1Sym1 a0123456789876543210     instance SuppressUnusedWarnings MkT1Sym0 where       suppressUnusedWarnings = snd (((,) MkT1Sym0KindInference) ())-    type MkT1Sym1 :: forall x a.-                     x -> (~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a)))+    type MkT1Sym1 :: forall x a. x+                                 -> (~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a)))     data MkT1Sym1 (a0123456789876543210 :: x) :: (~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a)))       where         MkT1Sym1KindInference :: SameKind (Apply (MkT1Sym1 a0123456789876543210) arg) (MkT1Sym2 a0123456789876543210 arg) =>@@ -27,8 +27,8 @@     type instance Apply (MkT1Sym1 a0123456789876543210) a0123456789876543210 = MkT1Sym2 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (MkT1Sym1 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) MkT1Sym1KindInference) ())-    type MkT1Sym2 :: forall x a.-                     x -> a -> (~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))+    type MkT1Sym2 :: forall x a. x+                                 -> a -> (~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))     data MkT1Sym2 (a0123456789876543210 :: x) (a0123456789876543210 :: a) :: (~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))       where         MkT1Sym2KindInference :: SameKind (Apply (MkT1Sym2 a0123456789876543210 a0123456789876543210) arg) (MkT1Sym3 a0123456789876543210 a0123456789876543210 arg) =>@@ -36,8 +36,8 @@     type instance Apply (MkT1Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = MkT1Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (MkT1Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) MkT1Sym2KindInference) ())-    type MkT1Sym3 :: forall x a.-                     x -> a -> Maybe a -> (~>) (Maybe (Maybe a)) (T x a)+    type MkT1Sym3 :: forall x a. x+                                 -> a -> Maybe a -> (~>) (Maybe (Maybe a)) (T x a)     data MkT1Sym3 (a0123456789876543210 :: x) (a0123456789876543210 :: a) (a0123456789876543210 :: Maybe a) :: (~>) (Maybe (Maybe a)) (T x a)       where         MkT1Sym3KindInference :: SameKind (Apply (MkT1Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) arg) (MkT1Sym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 arg) =>@@ -45,8 +45,8 @@     type instance Apply (MkT1Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) a0123456789876543210 = MkT1 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (MkT1Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) MkT1Sym3KindInference) ())-    type MkT1Sym4 :: forall x a.-                     x -> a -> Maybe a -> Maybe (Maybe a) -> T x a+    type MkT1Sym4 :: forall x a. x+                                 -> a -> Maybe a -> Maybe (Maybe a) -> T x a     type family MkT1Sym4 (a0123456789876543210 :: x) (a0123456789876543210 :: a) (a0123456789876543210 :: Maybe a) (a0123456789876543210 :: Maybe (Maybe a)) :: T x a where       MkT1Sym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = MkT1 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     type MkT2Sym0 :: forall x a. (~>) (Maybe x) (T x a)@@ -974,31 +974,32 @@               ((((,,,) (toSing b :: SomeSing x)) (toSing b :: SomeSing a))                  (toSing b :: SomeSing (Maybe a)))                 (toSing b :: SomeSing (Maybe (Maybe a)))-          of {+          of             (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)-              -> SomeSing ((((SMkT1 c) c) c) c) }+              -> SomeSing ((((SMkT1 c) c) c) c)       toSing (MkT2 (b :: Demote (Maybe x)))-        = case toSing b :: SomeSing (Maybe x) of {-            SomeSing c -> SomeSing (SMkT2 c) }+        = case toSing b :: SomeSing (Maybe x) of+            SomeSing c -> SomeSing (SMkT2 c)     data SEmpty :: forall (a :: Type). Empty a -> Type     type instance Sing @(Empty a) = SEmpty     instance SingKind a => SingKind (Empty a) where       type Demote (Empty a) = Empty (Demote a)-      fromSing x = case x of-      toSing x = SomeSing (case x of)+      fromSing x = case x of {}+      toSing x = SomeSing (case x of {})     instance SFunctor (T x) where       sFmap ::-        forall (a :: Type) (b :: Type) (t1 :: (~>) a b) (t2 :: T x a).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (FmapSym0 :: TyFun ((~>) a b) ((~>) (T x a) (T x b))-                                              -> Type) t1) t2)+        forall (a :: Type)+               (b :: Type)+               (t1 :: (~>) a b)+               (t2 :: T x a). Sing t1+                              -> Sing t2+                                 -> Sing (Apply (Apply (FmapSym0 :: TyFun ((~>) a b) ((~>) (T x a) (T x b))+                                                                    -> Type) t1) t2)       (%<$) ::-        forall (a :: Type) (b :: Type) (t1 :: a) (t2 :: T x b).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((<$@#@$) :: TyFun a ((~>) (T x b) (T x a))-                                              -> Type) t1) t2)+        forall (a :: Type) (b :: Type) (t1 :: a) (t2 :: T x b). Sing t1+                                                                -> Sing t2+                                                                   -> Sing (Apply (Apply ((<$@#@$) :: TyFun a ((~>) (T x b) (T x a))+                                                                                                      -> Type) t1) t2)       sFmap         (_sf_0123456789876543210 :: Sing _f_0123456789876543210)         (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -1013,9 +1014,9 @@                             ((singFun1                                 @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))                                (\ sN_0123456789876543210-                                  -> case sN_0123456789876543210 of {+                                  -> case sN_0123456789876543210 of                                        (_ :: Sing n_0123456789876543210)-                                         -> sN_0123456789876543210 })))+                                         -> sN_0123456789876543210)))                            sA_0123456789876543210)))                     ((applySing _sf_0123456789876543210) sA_0123456789876543210)))                 ((applySing@@ -1034,8 +1035,8 @@                 ((singFun1                     @(Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210))                    (\ sN_0123456789876543210-                      -> case sN_0123456789876543210 of {-                           (_ :: Sing n_0123456789876543210) -> sN_0123456789876543210 })))+                      -> case sN_0123456789876543210 of+                           (_ :: Sing n_0123456789876543210) -> sN_0123456789876543210)))                sA_0123456789876543210)       (%<$)         (_sz_0123456789876543210 :: Sing _z_0123456789876543210)@@ -1051,16 +1052,16 @@                             ((singFun1                                 @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))                                (\ sN_0123456789876543210-                                  -> case sN_0123456789876543210 of {+                                  -> case sN_0123456789876543210 of                                        (_ :: Sing n_0123456789876543210)-                                         -> sN_0123456789876543210 })))+                                         -> sN_0123456789876543210)))                            sA_0123456789876543210)))                     ((applySing                         ((singFun1                             @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))                            (\ sN_0123456789876543210-                              -> case sN_0123456789876543210 of {-                                   (_ :: Sing n_0123456789876543210) -> _sz_0123456789876543210 })))+                              -> case sN_0123456789876543210 of+                                   (_ :: Sing n_0123456789876543210) -> _sz_0123456789876543210)))                        sA_0123456789876543210)))                 ((applySing                     ((applySing ((singFun2 @(<$@#@$)) (%<$))) _sz_0123456789876543210))@@ -1078,28 +1079,29 @@                 ((singFun1                     @(Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210))                    (\ sN_0123456789876543210-                      -> case sN_0123456789876543210 of {-                           (_ :: Sing n_0123456789876543210) -> sN_0123456789876543210 })))+                      -> case sN_0123456789876543210 of+                           (_ :: Sing n_0123456789876543210) -> sN_0123456789876543210)))                sA_0123456789876543210)     instance SFoldable (T x) where       sFoldMap ::-        forall (a :: Type) (m :: Type) (t1 :: (~>) a m) (t2 :: T x a).-        SMonoid m =>-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (FoldMapSym0 :: TyFun ((~>) a m) ((~>) (T x a) m)-                                                 -> Type) t1) t2)+        forall (a :: Type)+               (m :: Type)+               (t1 :: (~>) a m)+               (t2 :: T x a). SMonoid m =>+                              Sing t1+                              -> Sing t2+                                 -> Sing (Apply (Apply (FoldMapSym0 :: TyFun ((~>) a m) ((~>) (T x a) m)+                                                                       -> Type) t1) t2)       sFoldr ::         forall (a :: Type)                (b :: Type)                (t1 :: (~>) a ((~>) b b))                (t2 :: b)-               (t3 :: T x a).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (FoldrSym0 :: TyFun ((~>) a ((~>) b b)) ((~>) b ((~>) (T x a) b))-                                                         -> Type) t1) t2) t3)+               (t3 :: T x a). Sing t1+                              -> Sing t2+                                 -> Sing t3+                                    -> Sing (Apply (Apply (Apply (FoldrSym0 :: TyFun ((~>) a ((~>) b b)) ((~>) b ((~>) (T x a) b))+                                                                               -> Type) t1) t2) t3)       sFoldMap         (_sf_0123456789876543210 :: Sing _f_0123456789876543210)         (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -1112,8 +1114,8 @@                     ((singFun1                         @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))                        (\ sN_0123456789876543210-                          -> case sN_0123456789876543210 of {-                               (_ :: Sing n_0123456789876543210) -> sMempty })))+                          -> case sN_0123456789876543210 of+                               (_ :: Sing n_0123456789876543210) -> sMempty)))                    sA_0123456789876543210)))             ((applySing                 ((applySing ((singFun2 @MappendSym0) sMappend))@@ -1136,8 +1138,8 @@              ((singFun1                  @(Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210))                 (\ sN_0123456789876543210-                   -> case sN_0123456789876543210 of {-                        (_ :: Sing n_0123456789876543210) -> sMempty })))+                   -> case sN_0123456789876543210 of+                        (_ :: Sing n_0123456789876543210) -> sMempty)))             sA_0123456789876543210       sFoldr         (_sf_0123456789876543210 :: Sing _f_0123456789876543210)@@ -1151,10 +1153,10 @@                  ((singFun2                      @(Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))                     (\ sN1_0123456789876543210 sN2_0123456789876543210-                       -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {+                       -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of                             (,) (_ :: Sing n1_0123456789876543210)                                 (_ :: Sing n2_0123456789876543210)-                              -> sN2_0123456789876543210 })))+                              -> sN2_0123456789876543210)))                 sA_0123456789876543210))             ((applySing                 ((applySing _sf_0123456789876543210) sA_0123456789876543210))@@ -1163,7 +1165,7 @@                        ((singFun2                            @(Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))                           (\ sN1_0123456789876543210 sN2_0123456789876543210-                             -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {+                             -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of                                   (,) (_ :: Sing n1_0123456789876543210)                                       (_ :: Sing n2_0123456789876543210)                                     -> (applySing@@ -1171,14 +1173,14 @@                                               ((applySing ((singFun3 @FoldrSym0) sFoldr))                                                  _sf_0123456789876543210))                                              sN2_0123456789876543210))-                                         sN1_0123456789876543210 })))+                                         sN1_0123456789876543210)))                       sA_0123456789876543210))                   ((applySing                       ((applySing                           ((singFun2                               @(Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))                              (\ sN1_0123456789876543210 sN2_0123456789876543210-                                -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {+                                -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of                                      (,) (_ :: Sing n1_0123456789876543210)                                          (_ :: Sing n2_0123456789876543210)                                        -> (applySing@@ -1191,7 +1193,7 @@                                                           -> case                                                                  ((,) sN1_0123456789876543210)                                                                    sN2_0123456789876543210-                                                             of {+                                                             of                                                                (,) (_ :: Sing n1_0123456789876543210)                                                                    (_ :: Sing n2_0123456789876543210)                                                                  -> (applySing@@ -1202,9 +1204,9 @@                                                                                   sFoldr))                                                                               _sf_0123456789876543210))                                                                           sN2_0123456789876543210))-                                                                      sN1_0123456789876543210 }))))+                                                                      sN1_0123456789876543210))))                                                 sN2_0123456789876543210))-                                            sN1_0123456789876543210 })))+                                            sN1_0123456789876543210)))                          sA_0123456789876543210))                      _sz_0123456789876543210)))       sFoldr@@ -1216,10 +1218,10 @@                  ((singFun2                      @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210))                     (\ sN1_0123456789876543210 sN2_0123456789876543210-                       -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {+                       -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of                             (,) (_ :: Sing n1_0123456789876543210)                                 (_ :: Sing n2_0123456789876543210)-                              -> sN2_0123456789876543210 })))+                              -> sN2_0123456789876543210)))                 sA_0123456789876543210))             _sz_0123456789876543210     instance STraversable (T x) where@@ -1228,12 +1230,11 @@                (f :: Type -> Type)                (b :: Type)                (t1 :: (~>) a (f b))-               (t2 :: T x a).-        SApplicative f =>-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (TraverseSym0 :: TyFun ((~>) a (f b)) ((~>) (T x a) (f (T x b)))-                                                  -> Type) t1) t2)+               (t2 :: T x a). SApplicative f =>+                              Sing t1+                              -> Sing t2+                                 -> Sing (Apply (Apply (TraverseSym0 :: TyFun ((~>) a (f b)) ((~>) (T x a) (f (T x b)))+                                                                        -> Type) t1) t2)       sTraverse         (_sf_0123456789876543210 :: Sing _f_0123456789876543210)         (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -1268,33 +1269,36 @@             ((applySing ((singFun1 @PureSym0) sPure)) sA_0123456789876543210)     instance SFunctor Empty where       sFmap ::-        forall (a :: Type) (b :: Type) (t1 :: (~>) a b) (t2 :: Empty a).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (FmapSym0 :: TyFun ((~>) a b) ((~>) (Empty a) (Empty b))-                                              -> Type) t1) t2)+        forall (a :: Type)+               (b :: Type)+               (t1 :: (~>) a b)+               (t2 :: Empty a). Sing t1+                                -> Sing t2+                                   -> Sing (Apply (Apply (FmapSym0 :: TyFun ((~>) a b) ((~>) (Empty a) (Empty b))+                                                                      -> Type) t1) t2)       (%<$) ::-        forall (a :: Type) (b :: Type) (t1 :: a) (t2 :: Empty b).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((<$@#@$) :: TyFun a ((~>) (Empty b) (Empty a))-                                              -> Type) t1) t2)+        forall (a :: Type) (b :: Type) (t1 :: a) (t2 :: Empty b). Sing t1+                                                                  -> Sing t2+                                                                     -> Sing (Apply (Apply ((<$@#@$) :: TyFun a ((~>) (Empty b) (Empty a))+                                                                                                        -> Type) t1) t2)       sFmap _ (sV_0123456789876543210 :: Sing v_0123456789876543210)         = (id              @(Sing (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210)))-            (case sV_0123456789876543210 of)+            (case sV_0123456789876543210 of {})       (%<$) _ (sV_0123456789876543210 :: Sing v_0123456789876543210)         = (id              @(Sing (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210)))-            (case sV_0123456789876543210 of)+            (case sV_0123456789876543210 of {})     instance SFoldable Empty where       sFoldMap ::-        forall (a :: Type) (m :: Type) (t1 :: (~>) a m) (t2 :: Empty a).-        SMonoid m =>-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (FoldMapSym0 :: TyFun ((~>) a m) ((~>) (Empty a) m)-                                                 -> Type) t1) t2)+        forall (a :: Type)+               (m :: Type)+               (t1 :: (~>) a m)+               (t2 :: Empty a). SMonoid m =>+                                Sing t1+                                -> Sing t2+                                   -> Sing (Apply (Apply (FoldMapSym0 :: TyFun ((~>) a m) ((~>) (Empty a) m)+                                                                         -> Type) t1) t2)       sFoldMap _ _ = sMempty     instance STraversable Empty where       sTraverse ::@@ -1302,36 +1306,68 @@                (f :: Type -> Type)                (b :: Type)                (t1 :: (~>) a (f b))-               (t2 :: Empty a).-        SApplicative f =>-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (TraverseSym0 :: TyFun ((~>) a (f b)) ((~>) (Empty a) (f (Empty b)))-                                                  -> Type) t1) t2)+               (t2 :: Empty a). SApplicative f =>+                                Sing t1+                                -> Sing t2+                                   -> Sing (Apply (Apply (TraverseSym0 :: TyFun ((~>) a (f b)) ((~>) (Empty a) (f (Empty b)))+                                                                          -> Type) t1) t2)       sTraverse _ (sV_0123456789876543210 :: Sing v_0123456789876543210)         = (applySing ((singFun1 @PureSym0) sPure))             ((id                 @(Sing (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210)))-               (case sV_0123456789876543210 of))+               (case sV_0123456789876543210 of {}))     instance (SingI n, SingI n, SingI n, SingI n) =>              SingI (MkT1 (n :: x) (n :: a) (n :: Maybe a) (n :: Maybe (Maybe a))) where       sing = (((SMkT1 sing) sing) sing) sing+    instance (SingI n, SingI n, SingI n) =>+             SingI1 (MkT1 (n :: x) (n :: a) (n :: Maybe a)) where+      liftSing = ((SMkT1 sing) sing) sing+    instance (SingI n, SingI n) =>+             SingI2 (MkT1 (n :: x) (n :: a)) where+      liftSing2 = (SMkT1 sing) sing     instance SingI (MkT1Sym0 :: (~>) x ((~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))))) where       sing = (singFun4 @MkT1Sym0) SMkT1     instance SingI d =>              SingI (MkT1Sym1 (d :: x) :: (~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a)))) where       sing = (singFun3 @(MkT1Sym1 (d :: x))) (SMkT1 (sing @d))+    instance SingI1 (MkT1Sym1 :: x+                                 -> (~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a)))) where+      liftSing (s :: Sing (d :: x))+        = (singFun3 @(MkT1Sym1 (d :: x))) (SMkT1 s)     instance (SingI d, SingI d) =>              SingI (MkT1Sym2 (d :: x) (d :: a) :: (~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))) where       sing         = (singFun2 @(MkT1Sym2 (d :: x) (d :: a)))             ((SMkT1 (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (MkT1Sym2 (d :: x) :: a+                                          -> (~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))) where+      liftSing (s :: Sing (d :: a))+        = (singFun2 @(MkT1Sym2 (d :: x) (d :: a))) ((SMkT1 (sing @d)) s)+    instance SingI2 (MkT1Sym2 :: x+                                 -> a -> (~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))) where+      liftSing2 (s :: Sing (d :: x)) (s :: Sing (d :: a))+        = (singFun2 @(MkT1Sym2 (d :: x) (d :: a))) ((SMkT1 s) s)     instance (SingI d, SingI d, SingI d) =>              SingI (MkT1Sym3 (d :: x) (d :: a) (d :: Maybe a) :: (~>) (Maybe (Maybe a)) (T x a)) where       sing         = (singFun1 @(MkT1Sym3 (d :: x) (d :: a) (d :: Maybe a)))             (((SMkT1 (sing @d)) (sing @d)) (sing @d))+    instance (SingI d, SingI d) =>+             SingI1 (MkT1Sym3 (d :: x) (d :: a) :: Maybe a+                                                   -> (~>) (Maybe (Maybe a)) (T x a)) where+      liftSing (s :: Sing (d :: Maybe a))+        = (singFun1 @(MkT1Sym3 (d :: x) (d :: a) (d :: Maybe a)))+            (((SMkT1 (sing @d)) (sing @d)) s)+    instance SingI d =>+             SingI2 (MkT1Sym3 (d :: x) :: a+                                          -> Maybe a -> (~>) (Maybe (Maybe a)) (T x a)) where+      liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: Maybe a))+        = (singFun1 @(MkT1Sym3 (d :: x) (d :: a) (d :: Maybe a)))+            (((SMkT1 (sing @d)) s) s)     instance SingI n => SingI (MkT2 (n :: Maybe x)) where       sing = SMkT2 sing+    instance SingI1 MkT2 where+      liftSing = SMkT2     instance SingI (MkT2Sym0 :: (~>) (Maybe x) (T x a)) where       sing = (singFun1 @MkT2Sym0) SMkT2
tests/compile-and-dump/Singletons/HigherOrder.golden view
@@ -295,32 +295,31 @@       Map _ '[] = NilSym0       Map f ('(:) h t) = Apply (Apply (:@#@$) (Apply f h)) (Apply (Apply MapSym0 f) t)     sEtad ::-      forall (t :: [Nat]) (t :: [Bool]).-      Sing t -> Sing t -> Sing (Apply (Apply EtadSym0 t) t :: [Nat])+      forall (t :: [Nat]) (t :: [Bool]). Sing t+                                         -> Sing t -> Sing (Apply (Apply EtadSym0 t) t :: [Nat])     sSplunge ::-      forall (t :: [Nat]) (t :: [Bool]).-      Sing t -> Sing t -> Sing (Apply (Apply SplungeSym0 t) t :: [Nat])+      forall (t :: [Nat]) (t :: [Bool]). Sing t+                                         -> Sing t -> Sing (Apply (Apply SplungeSym0 t) t :: [Nat])     sFoo ::       forall a              b              (t :: (~>) ((~>) a b) ((~>) a b))              (t :: (~>) a b)-             (t :: a).-      Sing t-      -> Sing t-         -> Sing t -> Sing (Apply (Apply (Apply FooSym0 t) t) t :: b)+             (t :: a). Sing t+                       -> Sing t+                          -> Sing t -> Sing (Apply (Apply (Apply FooSym0 t) t) t :: b)     sZipWith ::-      forall a b c (t :: (~>) a ((~>) b c)) (t :: [a]) (t :: [b]).-      Sing t-      -> Sing t-         -> Sing t -> Sing (Apply (Apply (Apply ZipWithSym0 t) t) t :: [c])+      forall a b c (t :: (~>) a ((~>) b c)) (t :: [a]) (t :: [b]). Sing t+                                                                   -> Sing t+                                                                      -> Sing t+                                                                         -> Sing (Apply (Apply (Apply ZipWithSym0 t) t) t :: [c])     sLiftMaybe ::-      forall a b (t :: (~>) a b) (t :: Maybe a).-      Sing t-      -> Sing t -> Sing (Apply (Apply LiftMaybeSym0 t) t :: Maybe b)+      forall a b (t :: (~>) a b) (t :: Maybe a). Sing t+                                                 -> Sing t+                                                    -> Sing (Apply (Apply LiftMaybeSym0 t) t :: Maybe b)     sMap ::-      forall a b (t :: (~>) a b) (t :: [a]).-      Sing t -> Sing t -> Sing (Apply (Apply MapSym0 t) t :: [b])+      forall a b (t :: (~>) a b) (t :: [a]). Sing t+                                             -> Sing t -> Sing (Apply (Apply MapSym0 t) t :: [b])     sEtad       (sA_0123456789876543210 :: Sing a_0123456789876543210)       (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -330,7 +329,7 @@                   ((singFun2                       @(Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210))                      (\ sN sB-                        -> case ((,) sN) sB of {+                        -> case ((,) sN) sB of                              (,) (_ :: Sing n) (_ :: Sing b)                                -> (id                                      @(Sing (Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 b)))@@ -338,7 +337,7 @@                                        STrue                                          -> (applySing ((singFun1 @SuccSym0) SSucc))                                               ((applySing ((singFun1 @SuccSym0) SSucc)) sN)-                                       SFalse -> sN) }))))+                                       SFalse -> sN)))))               sA_0123456789876543210))           sA_0123456789876543210     sSplunge (sNs :: Sing ns) (sBs :: Sing bs)@@ -347,14 +346,14 @@                ((applySing ((singFun3 @ZipWithSym0) sZipWith))                   ((singFun2 @(Apply (Apply Lambda_0123456789876543210Sym0 ns) bs))                      (\ sN sB-                        -> case ((,) sN) sB of {+                        -> case ((,) sN) sB of                              (,) (_ :: Sing n) (_ :: Sing b)                                -> (id @(Sing (Case_0123456789876543210 n b ns bs b)))                                     (case sB of                                        STrue                                          -> (applySing ((singFun1 @SuccSym0) SSucc))                                               ((applySing ((singFun1 @SuccSym0) SSucc)) sN)-                                       SFalse -> sN) }))))+                                       SFalse -> sN)))))               sNs))           sBs     sFoo (sF :: Sing f) (sG :: Sing g) (sA :: Sing a)@@ -386,11 +385,17 @@     instance SingI d =>              SingI (EtadSym1 (d :: [Nat]) :: (~>) [Bool] [Nat]) where       sing = (singFun1 @(EtadSym1 (d :: [Nat]))) (sEtad (sing @d))+    instance SingI1 (EtadSym1 :: [Nat] -> (~>) [Bool] [Nat]) where+      liftSing (s :: Sing (d :: [Nat]))+        = (singFun1 @(EtadSym1 (d :: [Nat]))) (sEtad s)     instance SingI (SplungeSym0 :: (~>) [Nat] ((~>) [Bool] [Nat])) where       sing = (singFun2 @SplungeSym0) sSplunge     instance SingI d =>              SingI (SplungeSym1 (d :: [Nat]) :: (~>) [Bool] [Nat]) where       sing = (singFun1 @(SplungeSym1 (d :: [Nat]))) (sSplunge (sing @d))+    instance SingI1 (SplungeSym1 :: [Nat] -> (~>) [Bool] [Nat]) where+      liftSing (s :: Sing (d :: [Nat]))+        = (singFun1 @(SplungeSym1 (d :: [Nat]))) (sSplunge s)     instance SingI (FooSym0 :: (~>) ((~>) ((~>) a b) ((~>) a b)) ((~>) ((~>) a b) ((~>) a b))) where       sing = (singFun3 @FooSym0) sFoo     instance SingI d =>@@ -398,12 +403,31 @@       sing         = (singFun2 @(FooSym1 (d :: (~>) ((~>) a b) ((~>) a b))))             (sFoo (sing @d))+    instance SingI1 (FooSym1 :: (~>) ((~>) a b) ((~>) a b)+                                -> (~>) ((~>) a b) ((~>) a b)) where+      liftSing (s :: Sing (d :: (~>) ((~>) a b) ((~>) a b)))+        = (singFun2 @(FooSym1 (d :: (~>) ((~>) a b) ((~>) a b)))) (sFoo s)     instance (SingI d, SingI d) =>              SingI (FooSym2 (d :: (~>) ((~>) a b) ((~>) a b)) (d :: (~>) a b) :: (~>) a b) where       sing         = (singFun1              @(FooSym2 (d :: (~>) ((~>) a b) ((~>) a b)) (d :: (~>) a b)))             ((sFoo (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (FooSym2 (d :: (~>) ((~>) a b) ((~>) a b)) :: (~>) a b+                                                                  -> (~>) a b) where+      liftSing (s :: Sing (d :: (~>) a b))+        = (singFun1+             @(FooSym2 (d :: (~>) ((~>) a b) ((~>) a b)) (d :: (~>) a b)))+            ((sFoo (sing @d)) s)+    instance SingI2 (FooSym2 :: (~>) ((~>) a b) ((~>) a b)+                                -> (~>) a b -> (~>) a b) where+      liftSing2+        (s :: Sing (d :: (~>) ((~>) a b) ((~>) a b)))+        (s :: Sing (d :: (~>) a b))+        = (singFun1+             @(FooSym2 (d :: (~>) ((~>) a b) ((~>) a b)) (d :: (~>) a b)))+            ((sFoo s) s)     instance SingI (ZipWithSym0 :: (~>) ((~>) a ((~>) b c)) ((~>) [a] ((~>) [b] [c]))) where       sing = (singFun3 @ZipWithSym0) sZipWith     instance SingI d =>@@ -411,11 +435,28 @@       sing         = (singFun2 @(ZipWithSym1 (d :: (~>) a ((~>) b c))))             (sZipWith (sing @d))+    instance SingI1 (ZipWithSym1 :: (~>) a ((~>) b c)+                                    -> (~>) [a] ((~>) [b] [c])) where+      liftSing (s :: Sing (d :: (~>) a ((~>) b c)))+        = (singFun2 @(ZipWithSym1 (d :: (~>) a ((~>) b c)))) (sZipWith s)     instance (SingI d, SingI d) =>              SingI (ZipWithSym2 (d :: (~>) a ((~>) b c)) (d :: [a]) :: (~>) [b] [c]) where       sing         = (singFun1 @(ZipWithSym2 (d :: (~>) a ((~>) b c)) (d :: [a])))             ((sZipWith (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (ZipWithSym2 (d :: (~>) a ((~>) b c)) :: [a]+                                                             -> (~>) [b] [c]) where+      liftSing (s :: Sing (d :: [a]))+        = (singFun1 @(ZipWithSym2 (d :: (~>) a ((~>) b c)) (d :: [a])))+            ((sZipWith (sing @d)) s)+    instance SingI2 (ZipWithSym2 :: (~>) a ((~>) b c)+                                    -> [a] -> (~>) [b] [c]) where+      liftSing2+        (s :: Sing (d :: (~>) a ((~>) b c)))+        (s :: Sing (d :: [a]))+        = (singFun1 @(ZipWithSym2 (d :: (~>) a ((~>) b c)) (d :: [a])))+            ((sZipWith s) s)     instance SingI (LiftMaybeSym0 :: (~>) ((~>) a b) ((~>) (Maybe a) (Maybe b))) where       sing = (singFun2 @LiftMaybeSym0) sLiftMaybe     instance SingI d =>@@ -423,11 +464,18 @@       sing         = (singFun1 @(LiftMaybeSym1 (d :: (~>) a b)))             (sLiftMaybe (sing @d))+    instance SingI1 (LiftMaybeSym1 :: (~>) a b+                                      -> (~>) (Maybe a) (Maybe b)) where+      liftSing (s :: Sing (d :: (~>) a b))+        = (singFun1 @(LiftMaybeSym1 (d :: (~>) a b))) (sLiftMaybe s)     instance SingI (MapSym0 :: (~>) ((~>) a b) ((~>) [a] [b])) where       sing = (singFun2 @MapSym0) sMap     instance SingI d =>              SingI (MapSym1 (d :: (~>) a b) :: (~>) [a] [b]) where       sing = (singFun1 @(MapSym1 (d :: (~>) a b))) (sMap (sing @d))+    instance SingI1 (MapSym1 :: (~>) a b -> (~>) [a] [b]) where+      liftSing (s :: Sing (d :: (~>) a b))+        = (singFun1 @(MapSym1 (d :: (~>) a b))) (sMap s)     data SEither :: forall a b. Either a b -> GHC.Types.Type       where         SLeft :: forall a b (n :: a).@@ -440,16 +488,18 @@       fromSing (SLeft b) = Left (fromSing b)       fromSing (SRight b) = Right (fromSing b)       toSing (Left (b :: Demote a))-        = case toSing b :: SomeSing a of {-            SomeSing c -> SomeSing (SLeft c) }+        = case toSing b :: SomeSing a of SomeSing c -> SomeSing (SLeft c)       toSing (Right (b :: Demote b))-        = case toSing b :: SomeSing b of {-            SomeSing c -> SomeSing (SRight c) }+        = case toSing b :: SomeSing b of SomeSing c -> SomeSing (SRight c)     instance SingI n => SingI (Left (n :: a)) where       sing = SLeft sing+    instance SingI1 Left where+      liftSing = SLeft     instance SingI (LeftSym0 :: (~>) a (Either a b)) where       sing = (singFun1 @LeftSym0) SLeft     instance SingI n => SingI (Right (n :: b)) where       sing = SRight sing+    instance SingI1 Right where+      liftSing = SRight     instance SingI (RightSym0 :: (~>) b (Either a b)) where       sing = (singFun1 @RightSym0) SRight
tests/compile-and-dump/Singletons/LambdaCase.golden view
@@ -180,60 +180,68 @@     type family Foo1 (a :: a) (a :: Maybe a) :: a where       Foo1 d x = Apply (Apply (Apply Lambda_0123456789876543210Sym0 d) x) x     sFoo3 ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply Foo3Sym0 t) t :: a)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Foo3Sym0 t) t :: a)     sFoo2 ::-      forall a (t :: a) (t :: Maybe a).-      Sing t -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)+      forall a (t :: a) (t :: Maybe a). Sing t+                                        -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)     sFoo1 ::-      forall a (t :: a) (t :: Maybe a).-      Sing t -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)+      forall a (t :: a) (t :: Maybe a). Sing t+                                        -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)     sFoo3 (sA :: Sing a) (sB :: Sing b)       = (applySing            ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 a) b))               (\ sX_0123456789876543210-                 -> case sX_0123456789876543210 of {+                 -> case sX_0123456789876543210 of                       (_ :: Sing x_0123456789876543210)                         -> (id                               @(Sing (Case_0123456789876543210 x_0123456789876543210 a b x_0123456789876543210)))-                             (case sX_0123456789876543210 of {-                                STuple2 (sP :: Sing p) _ -> sP }) })))+                             (case sX_0123456789876543210 of STuple2 (sP :: Sing p) _ -> sP))))           ((applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sA)) sB)     sFoo2 (sD :: Sing d) _       = (applySing            ((singFun1 @(Apply Lambda_0123456789876543210Sym0 d))               (\ sX_0123456789876543210-                 -> case sX_0123456789876543210 of {+                 -> case sX_0123456789876543210 of                       (_ :: Sing x_0123456789876543210)                         -> (id                               @(Sing (Case_0123456789876543210 x_0123456789876543210 d x_0123456789876543210)))                              (case sX_0123456789876543210 of                                 SJust (sY :: Sing y) -> sY-                                SNothing -> sD) })))+                                SNothing -> sD))))           ((applySing ((singFun1 @JustSym0) SJust)) sD)     sFoo1 (sD :: Sing d) (sX :: Sing x)       = (applySing            ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 d) x))               (\ sX_0123456789876543210-                 -> case sX_0123456789876543210 of {+                 -> case sX_0123456789876543210 of                       (_ :: Sing x_0123456789876543210)                         -> (id                               @(Sing (Case_0123456789876543210 x_0123456789876543210 d x x_0123456789876543210)))                              (case sX_0123456789876543210 of                                 SJust (sY :: Sing y) -> sY-                                SNothing -> sD) })))+                                SNothing -> sD))))           sX     instance SingI (Foo3Sym0 :: (~>) a ((~>) b a)) where       sing = (singFun2 @Foo3Sym0) sFoo3     instance SingI d => SingI (Foo3Sym1 (d :: a) :: (~>) b a) where       sing = (singFun1 @(Foo3Sym1 (d :: a))) (sFoo3 (sing @d))+    instance SingI1 (Foo3Sym1 :: a -> (~>) b a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo3Sym1 (d :: a))) (sFoo3 s)     instance SingI (Foo2Sym0 :: (~>) a ((~>) (Maybe a) a)) where       sing = (singFun2 @Foo2Sym0) sFoo2     instance SingI d =>              SingI (Foo2Sym1 (d :: a) :: (~>) (Maybe a) a) where       sing = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 (sing @d))+    instance SingI1 (Foo2Sym1 :: a -> (~>) (Maybe a) a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 s)     instance SingI (Foo1Sym0 :: (~>) a ((~>) (Maybe a) a)) where       sing = (singFun2 @Foo1Sym0) sFoo1     instance SingI d =>              SingI (Foo1Sym1 (d :: a) :: (~>) (Maybe a) a) where       sing = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 (sing @d))+    instance SingI1 (Foo1Sym1 :: a -> (~>) (Maybe a) a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 s)
tests/compile-and-dump/Singletons/Lambdas.golden view
@@ -561,73 +561,71 @@     sFoo8 ::       forall a b (t :: Foo a b). Sing t -> Sing (Apply Foo8Sym0 t :: a)     sFoo7 ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply Foo7Sym0 t) t :: b)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Foo7Sym0 t) t :: b)     sFoo6 ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply Foo6Sym0 t) t :: a)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Foo6Sym0 t) t :: a)     sFoo5 ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply Foo5Sym0 t) t :: b)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Foo5Sym0 t) t :: b)     sFoo4 ::-      forall a b c (t :: a) (t :: b) (t :: c).-      Sing t-      -> Sing t-         -> Sing t -> Sing (Apply (Apply (Apply Foo4Sym0 t) t) t :: a)+      forall a b c (t :: a) (t :: b) (t :: c). Sing t+                                               -> Sing t+                                                  -> Sing t+                                                     -> Sing (Apply (Apply (Apply Foo4Sym0 t) t) t :: a)     sFoo3 :: forall a (t :: a). Sing t -> Sing (Apply Foo3Sym0 t :: a)     sFoo2 ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)     sFoo1 ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)     sFoo0 ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply Foo0Sym0 t) t :: a)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Foo0Sym0 t) t :: a)     sFoo8 (sX :: Sing x)       = (applySing            ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))               (\ sArg_0123456789876543210-                 -> case sArg_0123456789876543210 of {+                 -> case sArg_0123456789876543210 of                       (_ :: Sing arg_0123456789876543210)                         -> (id                               @(Sing (Case_0123456789876543210 arg_0123456789876543210 x arg_0123456789876543210)))-                             (case sArg_0123456789876543210 of {-                                SFoo (sA :: Sing a) _ -> sA }) })))+                             (case sArg_0123456789876543210 of SFoo (sA :: Sing a) _ -> sA))))           sX     sFoo7 (sX :: Sing x) (sY :: Sing y)       = (applySing            ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))               (\ sArg_0123456789876543210-                 -> case sArg_0123456789876543210 of {+                 -> case sArg_0123456789876543210 of                       (_ :: Sing arg_0123456789876543210)                         -> (id                               @(Sing (Case_0123456789876543210 arg_0123456789876543210 x y arg_0123456789876543210)))-                             (case sArg_0123456789876543210 of {-                                STuple2 _ (sB :: Sing b) -> sB }) })))+                             (case sArg_0123456789876543210 of+                                STuple2 _ (sB :: Sing b) -> sB))))           ((applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX)) sY)     sFoo6 (sA :: Sing a) (sB :: Sing b)       = (applySing            ((applySing                ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 a) b))                   (\ sX-                     -> case sX of {+                     -> case sX of                           (_ :: Sing x)                             -> (singFun1                                   @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) a) b))                                  (\ sArg_0123456789876543210-                                    -> case sArg_0123456789876543210 of {+                                    -> case sArg_0123456789876543210 of                                          (_ :: Sing arg_0123456789876543210)                                            -> (id                                                  @(Sing (Case_0123456789876543210 arg_0123456789876543210 x a b arg_0123456789876543210)))-                                                (case sArg_0123456789876543210 of {-                                                   _ -> sX }) }) })))+                                                (case sArg_0123456789876543210 of _ -> sX)))))               sA))           sB     sFoo5 (sX :: Sing x) (sY :: Sing y)       = (applySing            ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))-              (\ sX -> case sX of { (_ :: Sing x) -> sX })))+              (\ sX -> case sX of (_ :: Sing x) -> sX)))           sY     sFoo4 (sX :: Sing x) (sY :: Sing y) (sZ :: Sing z)       = (applySing@@ -635,9 +633,7 @@                ((singFun2                    @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) z))                   (\ sArg_0123456789876543210 sArg_0123456789876543210-                     -> case-                            ((,) sArg_0123456789876543210) sArg_0123456789876543210-                        of {+                     -> case ((,) sArg_0123456789876543210) sArg_0123456789876543210 of                           (,) (_ :: Sing arg_0123456789876543210)                               (_ :: Sing arg_0123456789876543210)                             -> (id@@ -647,24 +643,24 @@                                          ((applySing ((singFun2 @Tuple2Sym0) STuple2))                                             sArg_0123456789876543210))                                         sArg_0123456789876543210-                                  of {-                                    STuple2 _ _ -> sX }) })))+                                  of+                                    STuple2 _ _ -> sX))))               sY))           sZ     sFoo3 (sX :: Sing x)       = (applySing            ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))-              (\ sY -> case sY of { (_ :: Sing y) -> sY })))+              (\ sY -> case sY of (_ :: Sing y) -> sY)))           sX     sFoo2 (sX :: Sing x) (sY :: Sing y)       = (applySing            ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))               (\ sArg_0123456789876543210-                 -> case sArg_0123456789876543210 of {+                 -> case sArg_0123456789876543210 of                       (_ :: Sing arg_0123456789876543210)                         -> (id                               @(Sing (Case_0123456789876543210 arg_0123456789876543210 x y arg_0123456789876543210)))-                             (case sArg_0123456789876543210 of { _ -> sX }) })))+                             (case sArg_0123456789876543210 of _ -> sX))))           sY     sFoo1       (sX :: Sing x)@@ -673,11 +669,11 @@            ((singFun1                @(Apply (Apply Lambda_0123456789876543210Sym0 x) a_0123456789876543210))               (\ sArg_0123456789876543210-                 -> case sArg_0123456789876543210 of {+                 -> case sArg_0123456789876543210 of                       (_ :: Sing arg_0123456789876543210)                         -> (id                               @(Sing (Case_0123456789876543210 arg_0123456789876543210 x a_0123456789876543210 arg_0123456789876543210)))-                             (case sArg_0123456789876543210 of { _ -> sX }) })))+                             (case sArg_0123456789876543210 of _ -> sX))))           sA_0123456789876543210     sFoo0       (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -687,7 +683,7 @@                ((singFun2                    @(Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210))                   (\ sX sY-                     -> case ((,) sX) sY of { (,) (_ :: Sing x) (_ :: Sing y) -> sX })))+                     -> case ((,) sX) sY of (,) (_ :: Sing x) (_ :: Sing y) -> sX)))               sA_0123456789876543210))           sA_0123456789876543210     instance SingI (Foo8Sym0 :: (~>) (Foo a b) a) where@@ -696,38 +692,66 @@       sing = (singFun2 @Foo7Sym0) sFoo7     instance SingI d => SingI (Foo7Sym1 (d :: a) :: (~>) b b) where       sing = (singFun1 @(Foo7Sym1 (d :: a))) (sFoo7 (sing @d))+    instance SingI1 (Foo7Sym1 :: a -> (~>) b b) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo7Sym1 (d :: a))) (sFoo7 s)     instance SingI (Foo6Sym0 :: (~>) a ((~>) b a)) where       sing = (singFun2 @Foo6Sym0) sFoo6     instance SingI d => SingI (Foo6Sym1 (d :: a) :: (~>) b a) where       sing = (singFun1 @(Foo6Sym1 (d :: a))) (sFoo6 (sing @d))+    instance SingI1 (Foo6Sym1 :: a -> (~>) b a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo6Sym1 (d :: a))) (sFoo6 s)     instance SingI (Foo5Sym0 :: (~>) a ((~>) b b)) where       sing = (singFun2 @Foo5Sym0) sFoo5     instance SingI d => SingI (Foo5Sym1 (d :: a) :: (~>) b b) where       sing = (singFun1 @(Foo5Sym1 (d :: a))) (sFoo5 (sing @d))+    instance SingI1 (Foo5Sym1 :: a -> (~>) b b) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo5Sym1 (d :: a))) (sFoo5 s)     instance SingI (Foo4Sym0 :: (~>) a ((~>) b ((~>) c a))) where       sing = (singFun3 @Foo4Sym0) sFoo4     instance SingI d =>              SingI (Foo4Sym1 (d :: a) :: (~>) b ((~>) c a)) where       sing = (singFun2 @(Foo4Sym1 (d :: a))) (sFoo4 (sing @d))+    instance SingI1 (Foo4Sym1 :: a -> (~>) b ((~>) c a)) where+      liftSing (s :: Sing (d :: a))+        = (singFun2 @(Foo4Sym1 (d :: a))) (sFoo4 s)     instance (SingI d, SingI d) =>              SingI (Foo4Sym2 (d :: a) (d :: b) :: (~>) c a) where       sing         = (singFun1 @(Foo4Sym2 (d :: a) (d :: b)))             ((sFoo4 (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (Foo4Sym2 (d :: a) :: b -> (~>) c a) where+      liftSing (s :: Sing (d :: b))+        = (singFun1 @(Foo4Sym2 (d :: a) (d :: b))) ((sFoo4 (sing @d)) s)+    instance SingI2 (Foo4Sym2 :: a -> b -> (~>) c a) where+      liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))+        = (singFun1 @(Foo4Sym2 (d :: a) (d :: b))) ((sFoo4 s) s)     instance SingI (Foo3Sym0 :: (~>) a a) where       sing = (singFun1 @Foo3Sym0) sFoo3     instance SingI (Foo2Sym0 :: (~>) a ((~>) b a)) where       sing = (singFun2 @Foo2Sym0) sFoo2     instance SingI d => SingI (Foo2Sym1 (d :: a) :: (~>) b a) where       sing = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 (sing @d))+    instance SingI1 (Foo2Sym1 :: a -> (~>) b a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 s)     instance SingI (Foo1Sym0 :: (~>) a ((~>) b a)) where       sing = (singFun2 @Foo1Sym0) sFoo1     instance SingI d => SingI (Foo1Sym1 (d :: a) :: (~>) b a) where       sing = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 (sing @d))+    instance SingI1 (Foo1Sym1 :: a -> (~>) b a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 s)     instance SingI (Foo0Sym0 :: (~>) a ((~>) b a)) where       sing = (singFun2 @Foo0Sym0) sFoo0     instance SingI d => SingI (Foo0Sym1 (d :: a) :: (~>) b a) where       sing = (singFun1 @(Foo0Sym1 (d :: a))) (sFoo0 (sing @d))+    instance SingI1 (Foo0Sym1 :: a -> (~>) b a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo0Sym1 (d :: a))) (sFoo0 s)     data SFoo :: forall a b. Foo a b -> GHC.Types.Type       where         SFoo :: forall a b (n :: a) (n :: b).@@ -737,12 +761,19 @@       type Demote (Foo a b) = Foo (Demote a) (Demote b)       fromSing (SFoo b b) = (Foo (fromSing b)) (fromSing b)       toSing (Foo (b :: Demote a) (b :: Demote b))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SFoo c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SFoo c) c)     instance (SingI n, SingI n) => SingI (Foo (n :: a) (n :: b)) where       sing = (SFoo sing) sing+    instance SingI n => SingI1 (Foo (n :: a)) where+      liftSing = SFoo sing+    instance SingI2 Foo where+      liftSing2 = SFoo     instance SingI (FooSym0 :: (~>) a ((~>) b (Foo a b))) where       sing = (singFun2 @FooSym0) SFoo     instance SingI d =>              SingI (FooSym1 (d :: a) :: (~>) b (Foo a b)) where       sing = (singFun1 @(FooSym1 (d :: a))) (SFoo (sing @d))+    instance SingI1 (FooSym1 :: a -> (~>) b (Foo a b)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(FooSym1 (d :: a))) (SFoo s)
tests/compile-and-dump/Singletons/LambdasComprehensive.golden view
@@ -58,14 +58,14 @@            ((applySing ((singFun2 @MapSym0) sMap))               ((singFun1 @Lambda_0123456789876543210Sym0)                  (\ sX-                    -> case sX of {+                    -> case sX of                          (_ :: Sing x)                            -> (applySing                                  ((applySing                                      ((applySing ((singFun3 @Either_Sym0) sEither_))                                         ((singFun1 @PredSym0) sPred)))                                     ((singFun1 @SuccSym0) SSucc)))-                                sX }))))+                                sX))))           ((applySing               ((applySing ((singFun2 @(:@#@$)) SCons))                  ((applySing ((singFun1 @LeftSym0) SLeft)) SZero)))
tests/compile-and-dump/Singletons/LetStatements.golden view
@@ -801,15 +801,15 @@           sZ             = (id                  @(Sing (Case_0123456789876543210 x (Let0123456789876543210X_0123456789876543210Sym1 x))))-                (case sX_0123456789876543210 of {+                (case sX_0123456789876543210 of                    STuple2 _ (sY_0123456789876543210 :: Sing y_0123456789876543210)-                     -> sY_0123456789876543210 })+                     -> sY_0123456789876543210)           sY             = (id                  @(Sing (Case_0123456789876543210 x (Let0123456789876543210X_0123456789876543210Sym1 x))))-                (case sX_0123456789876543210 of {+                (case sX_0123456789876543210 of                    STuple2 (sY_0123456789876543210 :: Sing y_0123456789876543210) _-                     -> sY_0123456789876543210 })+                     -> sY_0123456789876543210)           sX_0123456789876543210             = (applySing                  ((applySing ((singFun2 @Tuple2Sym0) STuple2))@@ -825,10 +825,9 @@     sFoo12 (sX :: Sing x)       = let           (%+) ::-            forall (t :: Nat) (t :: Nat).-            Sing t-            -> Sing t-               -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)+            forall (t :: Nat) (t :: Nat). Sing t+                                          -> Sing t+                                             -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)           (%+) SZero (sM :: Sing m) = sM           (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)             = (applySing ((singFun1 @SuccSym0) SSucc))@@ -846,10 +845,9 @@       = let           sZ :: Sing (Let0123456789876543210ZSym1 x :: Nat)           (%+) ::-            forall (t :: Nat) (t :: Nat).-            Sing t-            -> Sing t-               -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)+            forall (t :: Nat) (t :: Nat). Sing t+                                          -> Sing t+                                             -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)           sZ = sX           (%+) SZero (sM :: Sing m) = sM           (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)@@ -866,10 +864,9 @@     sFoo10 (sX :: Sing x)       = let           (%+) ::-            forall (t :: Nat) (t :: Nat).-            Sing t-            -> Sing t-               -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)+            forall (t :: Nat) (t :: Nat). Sing t+                                          -> Sing t+                                             -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)           (%+) SZero (sM :: Sing m) = sM           (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)             = (applySing ((singFun1 @SuccSym0) SSucc))@@ -885,13 +882,13 @@     sFoo9 (sX :: Sing x)       = let           sZ ::-            forall (t :: Nat).-            Sing t -> Sing (Apply (Let0123456789876543210ZSym1 x) t :: Nat)+            forall (t :: Nat). Sing t+                               -> Sing (Apply (Let0123456789876543210ZSym1 x) t :: Nat)           sZ (sA_0123456789876543210 :: Sing a_0123456789876543210)             = (applySing                  ((singFun1                      @(Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) x))-                    (\ sX -> case sX of { (_ :: Sing x) -> sX })))+                    (\ sX -> case sX of (_ :: Sing x) -> sX)))                 sA_0123456789876543210         in (applySing ((singFun1 @(Let0123456789876543210ZSym1 x)) sZ)) sX     sFoo8 (sX :: Sing x)@@ -900,7 +897,7 @@           sZ             = (applySing                  ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))-                    (\ sX -> case sX of { (_ :: Sing x) -> sX })))+                    (\ sX -> case sX of (_ :: Sing x) -> sX)))                 SZero         in sZ     sFoo7 (sX :: Sing x)@@ -911,8 +908,8 @@     sFoo6 (sX :: Sing x)       = let           sF ::-            forall (t :: Nat).-            Sing t -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)+            forall (t :: Nat). Sing t+                               -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)           sF (sY :: Sing y) = (applySing ((singFun1 @SuccSym0) SSucc)) sY in         let           sZ :: Sing (Let0123456789876543210ZSym1 x :: Nat)@@ -922,8 +919,8 @@     sFoo5 (sX :: Sing x)       = let           sF ::-            forall (t :: Nat).-            Sing t -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)+            forall (t :: Nat). Sing t+                               -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)           sF (sY :: Sing y)             = let                 sZ :: Sing (Let0123456789876543210ZSym2 y x :: Nat)@@ -933,8 +930,8 @@     sFoo4 (sX :: Sing x)       = let           sF ::-            forall (t :: Nat).-            Sing t -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)+            forall (t :: Nat). Sing t+                               -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)           sF (sY :: Sing y) = (applySing ((singFun1 @SuccSym0) SSucc)) sY         in (applySing ((singFun1 @(Let0123456789876543210FSym1 x)) sF)) sX     sFoo3 (sX :: Sing x)
tests/compile-and-dump/Singletons/Maybe.golden view
@@ -51,13 +51,13 @@       TFHelper_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210     instance PEq (Maybe a) where       type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> Maybe a -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Maybe a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: Maybe a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210 _ Nothing a_0123456789876543210 = Apply (Apply ShowStringSym0 "Nothing") a_0123456789876543210       ShowsPrec_0123456789876543210 p_0123456789876543210 (Just arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Just ")) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -65,9 +65,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -75,9 +75,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> Maybe a -> (~>) GHC.Types.Symbol GHC.Types.Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Maybe a) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Maybe a) :: (~>) GHC.Types.Symbol GHC.Types.Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -85,9 +85,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> Maybe a -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Maybe a) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Maybe a) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow (Maybe a) where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -102,15 +102,13 @@       fromSing (SJust b) = Just (fromSing b)       toSing Nothing = SomeSing SNothing       toSing (Just (b :: Demote a))-        = case toSing b :: SomeSing a of {-            SomeSing c -> SomeSing (SJust c) }+        = case toSing b :: SomeSing a of SomeSing c -> SomeSing (SJust c)     instance SEq a => SEq (Maybe a) where       (%==) ::-        forall (t1 :: Maybe a) (t2 :: Maybe a).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun (Maybe a) ((~>) (Maybe a) Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: Maybe a) (t2 :: Maybe a). Sing t1+                                                -> Sing t2+                                                   -> Sing (Apply (Apply ((==@#@$) :: TyFun (Maybe a) ((~>) (Maybe a) Bool)+                                                                                      -> GHC.Types.Type) t1) t2)       (%==) SNothing SNothing = STrue       (%==) SNothing (SJust _) = SFalse       (%==) (SJust _) SNothing = SFalse@@ -122,14 +120,13 @@             sB_0123456789876543210     instance SShow a => SShow (Maybe a) where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat)+        forall (t1 :: GHC.Num.Natural.Natural)                (t2 :: Maybe a)-               (t3 :: GHC.Types.Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+               (t3 :: GHC.Types.Symbol). Sing t1+                                         -> Sing t2+                                            -> Sing t3+                                               -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+                                                                                              -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         _         SNothing@@ -159,13 +156,13 @@             sA_0123456789876543210     instance SDecide a => SDecide (Maybe a) where       (%~) SNothing SNothing = Proved Refl-      (%~) SNothing (SJust _) = Disproved (\ x -> case x of)-      (%~) (SJust _) SNothing = Disproved (\ x -> case x of)+      (%~) SNothing (SJust _) = Disproved (\ x -> case x of {})+      (%~) (SJust _) SNothing = Disproved (\ x -> case x of {})       (%~) (SJust a) (SJust b)         = case ((%~) a) b of             Proved Refl -> Proved Refl             Disproved contra-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)     instance SDecide a =>              Data.Type.Equality.TestEquality (SMaybe :: Maybe a                                                         -> GHC.Types.Type) where@@ -182,5 +179,7 @@       sing = SNothing     instance SingI n => SingI (Just (n :: a)) where       sing = SJust sing+    instance SingI1 Just where+      liftSing = SJust     instance SingI (JustSym0 :: (~>) a (Maybe a)) where       sing = (singFun1 @JustSym0) SJust
tests/compile-and-dump/Singletons/Nat.golden view
@@ -105,13 +105,13 @@       TFHelper_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210     instance PEq Nat where       type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> Nat -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Nat) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: Nat) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210 _ Zero a_0123456789876543210 = Apply (Apply ShowStringSym0 "Zero") a_0123456789876543210       ShowsPrec_0123456789876543210 p_0123456789876543210 (Succ arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Succ ")) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -119,9 +119,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -129,9 +129,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> Nat -> (~>) GHC.Types.Symbol GHC.Types.Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Nat) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Nat) :: (~>) GHC.Types.Symbol GHC.Types.Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -139,9 +139,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> Nat -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Nat) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Nat) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow Nat where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -177,8 +177,8 @@     sPred ::       forall (t :: Nat). Sing t -> Sing (Apply PredSym0 t :: Nat)     sPlus ::-      forall (t :: Nat) (t :: Nat).-      Sing t -> Sing t -> Sing (Apply (Apply PlusSym0 t) t :: Nat)+      forall (t :: Nat) (t :: Nat). Sing t+                                    -> Sing t -> Sing (Apply (Apply PlusSym0 t) t :: Nat)     sPred SZero = SZero     sPred (SSucc (sN :: Sing n)) = sN     sPlus SZero (sM :: Sing m) = sM@@ -192,6 +192,9 @@     instance SingI d =>              SingI (PlusSym1 (d :: Nat) :: (~>) Nat Nat) where       sing = (singFun1 @(PlusSym1 (d :: Nat))) (sPlus (sing @d))+    instance SingI1 (PlusSym1 :: Nat -> (~>) Nat Nat) where+      liftSing (s :: Sing (d :: Nat))+        = (singFun1 @(PlusSym1 (d :: Nat))) (sPlus s)     data SNat :: Nat -> GHC.Types.Type       where         SZero :: SNat (Zero :: Nat)@@ -203,15 +206,13 @@       fromSing (SSucc b) = Succ (fromSing b)       toSing Zero = SomeSing SZero       toSing (Succ (b :: Demote Nat))-        = case toSing b :: SomeSing Nat of {-            SomeSing c -> SomeSing (SSucc c) }+        = case toSing b :: SomeSing Nat of SomeSing c -> SomeSing (SSucc c)     instance SEq Nat => SEq Nat where       (%==) ::-        forall (t1 :: Nat) (t2 :: Nat).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun Nat ((~>) Nat Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: Nat) (t2 :: Nat). Sing t1+                                        -> Sing t2+                                           -> Sing (Apply (Apply ((==@#@$) :: TyFun Nat ((~>) Nat Bool)+                                                                              -> GHC.Types.Type) t1) t2)       (%==) SZero SZero = STrue       (%==) SZero (SSucc _) = SFalse       (%==) (SSucc _) SZero = SFalse@@ -223,12 +224,13 @@             sB_0123456789876543210     instance SShow Nat => SShow Nat where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: Nat) (t3 :: GHC.Types.Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: Nat)+               (t3 :: GHC.Types.Symbol). Sing t1+                                         -> Sing t2+                                            -> Sing t3+                                               -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol))+                                                                                              -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         _         SZero@@ -258,11 +260,10 @@             sA_0123456789876543210     instance SOrd Nat => SOrd Nat where       sCompare ::-        forall (t1 :: Nat) (t2 :: Nat).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)-                                                 -> GHC.Types.Type) t1) t2)+        forall (t1 :: Nat) (t2 :: Nat). Sing t1+                                        -> Sing t2+                                           -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)+                                                                                 -> GHC.Types.Type) t1) t2)       sCompare SZero SZero         = (applySing              ((applySing@@ -289,13 +290,13 @@       sCompare (SSucc _) SZero = SGT     instance SDecide Nat => SDecide Nat where       (%~) SZero SZero = Proved Refl-      (%~) SZero (SSucc _) = Disproved (\ x -> case x of)-      (%~) (SSucc _) SZero = Disproved (\ x -> case x of)+      (%~) SZero (SSucc _) = Disproved (\ x -> case x of {})+      (%~) (SSucc _) SZero = Disproved (\ x -> case x of {})       (%~) (SSucc a) (SSucc b)         = case ((%~) a) b of             Proved Refl -> Proved Refl             Disproved contra-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)     instance SDecide Nat =>              Data.Type.Equality.TestEquality (SNat :: Nat                                                       -> GHC.Types.Type) where@@ -312,5 +313,7 @@       sing = SZero     instance SingI n => SingI (Succ (n :: Nat)) where       sing = SSucc sing+    instance SingI1 Succ where+      liftSing = SSucc     instance SingI (SuccSym0 :: (~>) Nat Nat) where       sing = (singFun1 @SuccSym0) SSucc
tests/compile-and-dump/Singletons/NatSymbolReflexive.hs view
@@ -4,7 +4,7 @@ import GHC.TypeLits import Prelude.Singletons -test1 :: forall (a :: Nat). Sing a -> (a == a) :~: True+test1 :: forall (a :: Natural). Sing a -> (a == a) :~: True test1 _ = Refl  test2 :: forall (a :: Symbol). Sing a -> (a == a) :~: True
+ tests/compile-and-dump/Singletons/Natural.golden view
@@ -0,0 +1,78 @@+Singletons/Natural.hs:(0,0)-(0,0): Splicing declarations+    singletons+      [d| addAge :: Age -> Age -> Age+          addAge (MkAge (x :: Natural)) (MkAge (y :: Natural))+            = MkAge (x + y :: Natural)+          +          newtype Age = MkAge Natural |]+  ======>+    newtype Age = MkAge Natural+    addAge :: Age -> Age -> Age+    addAge (MkAge (x :: Natural)) (MkAge (y :: Natural))+      = MkAge ((x + y) :: Natural)+    type MkAgeSym0 :: (~>) Natural Age+    data MkAgeSym0 :: (~>) Natural Age+      where+        MkAgeSym0KindInference :: SameKind (Apply MkAgeSym0 arg) (MkAgeSym1 arg) =>+                                  MkAgeSym0 a0123456789876543210+    type instance Apply MkAgeSym0 a0123456789876543210 = MkAge a0123456789876543210+    instance SuppressUnusedWarnings MkAgeSym0 where+      suppressUnusedWarnings = snd (((,) MkAgeSym0KindInference) ())+    type MkAgeSym1 :: Natural -> Age+    type family MkAgeSym1 (a0123456789876543210 :: Natural) :: Age where+      MkAgeSym1 a0123456789876543210 = MkAge a0123456789876543210+    type AddAgeSym0 :: (~>) Age ((~>) Age Age)+    data AddAgeSym0 :: (~>) Age ((~>) Age Age)+      where+        AddAgeSym0KindInference :: SameKind (Apply AddAgeSym0 arg) (AddAgeSym1 arg) =>+                                   AddAgeSym0 a0123456789876543210+    type instance Apply AddAgeSym0 a0123456789876543210 = AddAgeSym1 a0123456789876543210+    instance SuppressUnusedWarnings AddAgeSym0 where+      suppressUnusedWarnings = snd (((,) AddAgeSym0KindInference) ())+    type AddAgeSym1 :: Age -> (~>) Age Age+    data AddAgeSym1 (a0123456789876543210 :: Age) :: (~>) Age Age+      where+        AddAgeSym1KindInference :: SameKind (Apply (AddAgeSym1 a0123456789876543210) arg) (AddAgeSym2 a0123456789876543210 arg) =>+                                   AddAgeSym1 a0123456789876543210 a0123456789876543210+    type instance Apply (AddAgeSym1 a0123456789876543210) a0123456789876543210 = AddAge a0123456789876543210 a0123456789876543210+    instance SuppressUnusedWarnings (AddAgeSym1 a0123456789876543210) where+      suppressUnusedWarnings = snd (((,) AddAgeSym1KindInference) ())+    type AddAgeSym2 :: Age -> Age -> Age+    type family AddAgeSym2 (a0123456789876543210 :: Age) (a0123456789876543210 :: Age) :: Age where+      AddAgeSym2 a0123456789876543210 a0123456789876543210 = AddAge a0123456789876543210 a0123456789876543210+    type AddAge :: Age -> Age -> Age+    type family AddAge (a :: Age) (a :: Age) :: Age where+      AddAge (MkAge (x :: Natural)) (MkAge (y :: Natural)) = Apply MkAgeSym0 (Apply (Apply (+@#@$) x) y :: Natural)+    sAddAge ::+      forall (t :: Age) (t :: Age). Sing t+                                    -> Sing t -> Sing (Apply (Apply AddAgeSym0 t) t :: Age)+    sAddAge (SMkAge (sX :: Sing x)) (SMkAge (sY :: Sing y))+      = case ((,) (sX :: Sing x)) (sY :: Sing y) of+          (,) (_ :: Sing (x :: Natural)) (_ :: Sing (y :: Natural))+            -> (applySing ((singFun1 @MkAgeSym0) SMkAge))+                 ((applySing ((applySing ((singFun2 @(+@#@$)) (%+))) sX)) sY ::+                    Sing (Apply (Apply (+@#@$) x) y :: Natural))+    instance SingI (AddAgeSym0 :: (~>) Age ((~>) Age Age)) where+      sing = (singFun2 @AddAgeSym0) sAddAge+    instance SingI d =>+             SingI (AddAgeSym1 (d :: Age) :: (~>) Age Age) where+      sing = (singFun1 @(AddAgeSym1 (d :: Age))) (sAddAge (sing @d))+    instance SingI1 (AddAgeSym1 :: Age -> (~>) Age Age) where+      liftSing (s :: Sing (d :: Age))+        = (singFun1 @(AddAgeSym1 (d :: Age))) (sAddAge s)+    data SAge :: Age -> GHC.Types.Type+      where+        SMkAge :: forall (n :: Natural). (Sing n) -> SAge (MkAge n :: Age)+    type instance Sing @Age = SAge+    instance SingKind Age where+      type Demote Age = Age+      fromSing (SMkAge b) = MkAge (fromSing b)+      toSing (MkAge (b :: Demote Natural))+        = case toSing b :: SomeSing Natural of+            SomeSing c -> SomeSing (SMkAge c)+    instance SingI n => SingI (MkAge (n :: Natural)) where+      sing = SMkAge sing+    instance SingI1 MkAge where+      liftSing = SMkAge+    instance SingI (MkAgeSym0 :: (~>) Natural Age) where+      sing = (singFun1 @MkAgeSym0) SMkAge
+ tests/compile-and-dump/Singletons/Natural.hs view
@@ -0,0 +1,13 @@+module Singletons.Natural where++import Data.Singletons.TH+import Numeric.Natural (Natural)+import Prelude.Singletons++$(singletons [d|+  newtype Age = MkAge Natural++  addAge :: Age -> Age -> Age+  addAge (MkAge (x :: Natural)) (MkAge (y :: Natural)) =+    MkAge (x + y :: Natural)+  |])
tests/compile-and-dump/Singletons/NegativeLiterals.golden view
@@ -1,15 +1,21 @@ Singletons/NegativeLiterals.hs:(0,0)-(0,0): Splicing declarations     singletons-      [d| f :: Nat+      [d| f :: Natural           f = -1 |]   ======>-    f :: Nat+    f :: Natural     f = (-1)-    type FSym0 :: Nat-    type family FSym0 :: Nat where+    type FSym0 :: Natural+    type family FSym0 :: Natural where       FSym0 = F-    type F :: Nat-    type family F :: Nat where+    type F :: Natural+    type family F :: Natural where       F = Negate (FromInteger 1)-    sF :: Sing (FSym0 :: Nat)+    sF :: Sing (FSym0 :: Natural)     sF = sNegate (sFromInteger (sing :: Sing 1))++Singletons/NegativeLiterals.hs:0:0: warning: [-Woverflowed-literals]+    Literal -1 is negative but Natural only supports positive numbers+  |+7 | $(singletons [d|+  |  ^^^^^^^^^^^^^^^...
tests/compile-and-dump/Singletons/NegativeLiterals.hs view
@@ -2,9 +2,9 @@ module Singletons.NegativeLiterals where  import Data.Singletons.Base.TH-import GHC.TypeNats (Nat)+import Numeric.Natural (Natural)  $(singletons [d|-  f :: Nat+  f :: Natural   f = -1   |])
tests/compile-and-dump/Singletons/Operators.golden view
@@ -83,8 +83,8 @@       Child FLeaf = FLeafSym0       Child ((:+:) a _) = a     (%+) ::-      forall (t :: Nat) (t :: Nat).-      Sing t -> Sing t -> Sing (Apply (Apply (+@#@$) t) t :: Nat)+      forall (t :: Nat) (t :: Nat). Sing t+                                    -> Sing t -> Sing (Apply (Apply (+@#@$) t) t :: Nat)     sChild ::       forall (t :: Foo). Sing t -> Sing (Apply ChildSym0 t :: Foo)     (%+) SZero (sM :: Sing m) = sM@@ -98,6 +98,9 @@     instance SingI d =>              SingI ((+@#@$$) (d :: Nat) :: (~>) Nat Nat) where       sing = (singFun1 @((+@#@$$) (d :: Nat))) ((%+) (sing @d))+    instance SingI1 ((+@#@$$) :: Nat -> (~>) Nat Nat) where+      liftSing (s :: Sing (d :: Nat))+        = (singFun1 @((+@#@$$) (d :: Nat))) ((%+) s)     instance SingI (ChildSym0 :: (~>) Foo Foo) where       sing = (singFun1 @ChildSym0) sChild     data SFoo :: Foo -> GHC.Types.Type@@ -114,15 +117,22 @@       toSing ((:+:) (b :: Demote Foo) (b :: Demote Foo))         = case               ((,) (toSing b :: SomeSing Foo)) (toSing b :: SomeSing Foo)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%+:) c) c) }+          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+    instance SingI n => SingI1 ((:+:) (n :: Foo)) where+      liftSing = (:%+:) sing+    instance SingI2 (:+:) where+      liftSing2 = (:%+:)     instance SingI ((:+:@#@$) :: (~>) Foo ((~>) Foo Foo)) where       sing = (singFun2 @(:+:@#@$)) (:%+:)     instance SingI d =>              SingI ((:+:@#@$$) (d :: Foo) :: (~>) Foo Foo) where       sing = (singFun1 @((:+:@#@$$) (d :: Foo))) ((:%+:) (sing @d))+    instance SingI1 ((:+:@#@$$) :: Foo -> (~>) Foo Foo) where+      liftSing (s :: Sing (d :: Foo))+        = (singFun1 @((:+:@#@$$) (d :: Foo))) ((:%+:) s)
tests/compile-and-dump/Singletons/OrdDeriving.golden view
@@ -37,8 +37,10 @@     type SuccSym1 :: Nat -> Nat     type family SuccSym1 (a0123456789876543210 :: Nat) :: Nat where       SuccSym1 a0123456789876543210 = Succ a0123456789876543210-    type ASym0 :: forall a b c d.-                  (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))+    type ASym0 :: forall a+                         b+                         c+                         d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))     data ASym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))       where         ASym0KindInference :: SameKind (Apply ASym0 arg) (ASym1 arg) =>@@ -46,8 +48,8 @@     type instance Apply ASym0 a0123456789876543210 = ASym1 a0123456789876543210     instance SuppressUnusedWarnings ASym0 where       suppressUnusedWarnings = snd (((,) ASym0KindInference) ())-    type ASym1 :: forall a b c d.-                  a -> (~>) b ((~>) c ((~>) d (Foo a b c d)))+    type ASym1 :: forall a b c d. a+                                  -> (~>) b ((~>) c ((~>) d (Foo a b c d)))     data ASym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))       where         ASym1KindInference :: SameKind (Apply (ASym1 a0123456789876543210) arg) (ASym2 a0123456789876543210 arg) =>@@ -55,8 +57,8 @@     type instance Apply (ASym1 a0123456789876543210) a0123456789876543210 = ASym2 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (ASym1 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) ASym1KindInference) ())-    type ASym2 :: forall a b c d.-                  a -> b -> (~>) c ((~>) d (Foo a b c d))+    type ASym2 :: forall a b c d. a+                                  -> b -> (~>) c ((~>) d (Foo a b c d))     data ASym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))       where         ASym2KindInference :: SameKind (Apply (ASym2 a0123456789876543210 a0123456789876543210) arg) (ASym3 a0123456789876543210 a0123456789876543210 arg) =>@@ -75,8 +77,10 @@     type ASym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d     type family ASym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where       ASym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = A a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210-    type BSym0 :: forall a b c d.-                  (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))+    type BSym0 :: forall a+                         b+                         c+                         d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))     data BSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))       where         BSym0KindInference :: SameKind (Apply BSym0 arg) (BSym1 arg) =>@@ -84,8 +88,8 @@     type instance Apply BSym0 a0123456789876543210 = BSym1 a0123456789876543210     instance SuppressUnusedWarnings BSym0 where       suppressUnusedWarnings = snd (((,) BSym0KindInference) ())-    type BSym1 :: forall a b c d.-                  a -> (~>) b ((~>) c ((~>) d (Foo a b c d)))+    type BSym1 :: forall a b c d. a+                                  -> (~>) b ((~>) c ((~>) d (Foo a b c d)))     data BSym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))       where         BSym1KindInference :: SameKind (Apply (BSym1 a0123456789876543210) arg) (BSym2 a0123456789876543210 arg) =>@@ -93,8 +97,8 @@     type instance Apply (BSym1 a0123456789876543210) a0123456789876543210 = BSym2 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (BSym1 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) BSym1KindInference) ())-    type BSym2 :: forall a b c d.-                  a -> b -> (~>) c ((~>) d (Foo a b c d))+    type BSym2 :: forall a b c d. a+                                  -> b -> (~>) c ((~>) d (Foo a b c d))     data BSym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))       where         BSym2KindInference :: SameKind (Apply (BSym2 a0123456789876543210 a0123456789876543210) arg) (BSym3 a0123456789876543210 a0123456789876543210 arg) =>@@ -113,8 +117,10 @@     type BSym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d     type family BSym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where       BSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = B a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210-    type CSym0 :: forall a b c d.-                  (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))+    type CSym0 :: forall a+                         b+                         c+                         d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))     data CSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))       where         CSym0KindInference :: SameKind (Apply CSym0 arg) (CSym1 arg) =>@@ -122,8 +128,8 @@     type instance Apply CSym0 a0123456789876543210 = CSym1 a0123456789876543210     instance SuppressUnusedWarnings CSym0 where       suppressUnusedWarnings = snd (((,) CSym0KindInference) ())-    type CSym1 :: forall a b c d.-                  a -> (~>) b ((~>) c ((~>) d (Foo a b c d)))+    type CSym1 :: forall a b c d. a+                                  -> (~>) b ((~>) c ((~>) d (Foo a b c d)))     data CSym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))       where         CSym1KindInference :: SameKind (Apply (CSym1 a0123456789876543210) arg) (CSym2 a0123456789876543210 arg) =>@@ -131,8 +137,8 @@     type instance Apply (CSym1 a0123456789876543210) a0123456789876543210 = CSym2 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (CSym1 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) CSym1KindInference) ())-    type CSym2 :: forall a b c d.-                  a -> b -> (~>) c ((~>) d (Foo a b c d))+    type CSym2 :: forall a b c d. a+                                  -> b -> (~>) c ((~>) d (Foo a b c d))     data CSym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))       where         CSym2KindInference :: SameKind (Apply (CSym2 a0123456789876543210 a0123456789876543210) arg) (CSym3 a0123456789876543210 a0123456789876543210 arg) =>@@ -151,8 +157,10 @@     type CSym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d     type family CSym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where       CSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = C a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210-    type DSym0 :: forall a b c d.-                  (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))+    type DSym0 :: forall a+                         b+                         c+                         d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))     data DSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))       where         DSym0KindInference :: SameKind (Apply DSym0 arg) (DSym1 arg) =>@@ -160,8 +168,8 @@     type instance Apply DSym0 a0123456789876543210 = DSym1 a0123456789876543210     instance SuppressUnusedWarnings DSym0 where       suppressUnusedWarnings = snd (((,) DSym0KindInference) ())-    type DSym1 :: forall a b c d.-                  a -> (~>) b ((~>) c ((~>) d (Foo a b c d)))+    type DSym1 :: forall a b c d. a+                                  -> (~>) b ((~>) c ((~>) d (Foo a b c d)))     data DSym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))       where         DSym1KindInference :: SameKind (Apply (DSym1 a0123456789876543210) arg) (DSym2 a0123456789876543210 arg) =>@@ -169,8 +177,8 @@     type instance Apply (DSym1 a0123456789876543210) a0123456789876543210 = DSym2 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (DSym1 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) DSym1KindInference) ())-    type DSym2 :: forall a b c d.-                  a -> b -> (~>) c ((~>) d (Foo a b c d))+    type DSym2 :: forall a b c d. a+                                  -> b -> (~>) c ((~>) d (Foo a b c d))     data DSym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))       where         DSym2KindInference :: SameKind (Apply (DSym2 a0123456789876543210 a0123456789876543210) arg) (DSym3 a0123456789876543210 a0123456789876543210 arg) =>@@ -189,8 +197,10 @@     type DSym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d     type family DSym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where       DSym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = D a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210-    type ESym0 :: forall a b c d.-                  (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))+    type ESym0 :: forall a+                         b+                         c+                         d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))     data ESym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))       where         ESym0KindInference :: SameKind (Apply ESym0 arg) (ESym1 arg) =>@@ -198,8 +208,8 @@     type instance Apply ESym0 a0123456789876543210 = ESym1 a0123456789876543210     instance SuppressUnusedWarnings ESym0 where       suppressUnusedWarnings = snd (((,) ESym0KindInference) ())-    type ESym1 :: forall a b c d.-                  a -> (~>) b ((~>) c ((~>) d (Foo a b c d)))+    type ESym1 :: forall a b c d. a+                                  -> (~>) b ((~>) c ((~>) d (Foo a b c d)))     data ESym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))       where         ESym1KindInference :: SameKind (Apply (ESym1 a0123456789876543210) arg) (ESym2 a0123456789876543210 arg) =>@@ -207,8 +217,8 @@     type instance Apply (ESym1 a0123456789876543210) a0123456789876543210 = ESym2 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (ESym1 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) ESym1KindInference) ())-    type ESym2 :: forall a b c d.-                  a -> b -> (~>) c ((~>) d (Foo a b c d))+    type ESym2 :: forall a b c d. a+                                  -> b -> (~>) c ((~>) d (Foo a b c d))     data ESym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))       where         ESym2KindInference :: SameKind (Apply (ESym2 a0123456789876543210 a0123456789876543210) arg) (ESym3 a0123456789876543210 a0123456789876543210 arg) =>@@ -227,8 +237,10 @@     type ESym4 :: forall a b c d. a -> b -> c -> d -> Foo a b c d     type family ESym4 (a0123456789876543210 :: a) (a0123456789876543210 :: b) (a0123456789876543210 :: c) (a0123456789876543210 :: d) :: Foo a b c d where       ESym4 a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210 = E a0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210-    type FSym0 :: forall a b c d.-                  (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))+    type FSym0 :: forall a+                         b+                         c+                         d. (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))     data FSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))       where         FSym0KindInference :: SameKind (Apply FSym0 arg) (FSym1 arg) =>@@ -236,8 +248,8 @@     type instance Apply FSym0 a0123456789876543210 = FSym1 a0123456789876543210     instance SuppressUnusedWarnings FSym0 where       suppressUnusedWarnings = snd (((,) FSym0KindInference) ())-    type FSym1 :: forall a b c d.-                  a -> (~>) b ((~>) c ((~>) d (Foo a b c d)))+    type FSym1 :: forall a b c d. a+                                  -> (~>) b ((~>) c ((~>) d (Foo a b c d)))     data FSym1 (a0123456789876543210 :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))       where         FSym1KindInference :: SameKind (Apply (FSym1 a0123456789876543210) arg) (FSym2 a0123456789876543210 arg) =>@@ -245,8 +257,8 @@     type instance Apply (FSym1 a0123456789876543210) a0123456789876543210 = FSym2 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (FSym1 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) FSym1KindInference) ())-    type FSym2 :: forall a b c d.-                  a -> b -> (~>) c ((~>) d (Foo a b c d))+    type FSym2 :: forall a b c d. a+                                  -> b -> (~>) c ((~>) d (Foo a b c d))     data FSym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: (~>) c ((~>) d (Foo a b c d))       where         FSym2KindInference :: SameKind (Apply (FSym2 a0123456789876543210 a0123456789876543210) arg) (FSym3 a0123456789876543210 a0123456789876543210 arg) =>@@ -462,8 +474,7 @@       fromSing (SSucc b) = Succ (fromSing b)       toSing Zero = SomeSing SZero       toSing (Succ (b :: Demote Nat))-        = case toSing b :: SomeSing Nat of {-            SomeSing c -> SomeSing (SSucc c) }+        = case toSing b :: SomeSing Nat of SomeSing c -> SomeSing (SSucc c)     data SFoo :: forall a b c d. Foo a b c d -> GHC.Types.Type       where         SA :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).@@ -524,61 +535,60 @@               ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))                  (toSing b :: SomeSing c))                 (toSing b :: SomeSing d)-          of {+          of             (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)-              -> SomeSing ((((SA c) c) c) c) }+              -> SomeSing ((((SA c) c) c) c)       toSing         (B (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))         = case               ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))                  (toSing b :: SomeSing c))                 (toSing b :: SomeSing d)-          of {+          of             (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)-              -> SomeSing ((((SB c) c) c) c) }+              -> SomeSing ((((SB c) c) c) c)       toSing         (C (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))         = case               ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))                  (toSing b :: SomeSing c))                 (toSing b :: SomeSing d)-          of {+          of             (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)-              -> SomeSing ((((SC c) c) c) c) }+              -> SomeSing ((((SC c) c) c) c)       toSing         (D (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))         = case               ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))                  (toSing b :: SomeSing c))                 (toSing b :: SomeSing d)-          of {+          of             (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)-              -> SomeSing ((((SD c) c) c) c) }+              -> SomeSing ((((SD c) c) c) c)       toSing         (E (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))         = case               ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))                  (toSing b :: SomeSing c))                 (toSing b :: SomeSing d)-          of {+          of             (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)-              -> SomeSing ((((SE c) c) c) c) }+              -> SomeSing ((((SE c) c) c) c)       toSing         (F (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))         = case               ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))                  (toSing b :: SomeSing c))                 (toSing b :: SomeSing d)-          of {+          of             (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)-              -> SomeSing ((((SF c) c) c) c) }+              -> SomeSing ((((SF c) c) c) c)     instance SEq Nat => SEq Nat where       (%==) ::-        forall (t1 :: Nat) (t2 :: Nat).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun Nat ((~>) Nat Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: Nat) (t2 :: Nat). Sing t1+                                        -> Sing t2+                                           -> Sing (Apply (Apply ((==@#@$) :: TyFun Nat ((~>) Nat Bool)+                                                                              -> GHC.Types.Type) t1) t2)       (%==) SZero SZero = STrue       (%==) SZero (SSucc _) = SFalse       (%==) (SSucc _) SZero = SFalse@@ -590,11 +600,10 @@             sB_0123456789876543210     instance SOrd Nat => SOrd Nat where       sCompare ::-        forall (t1 :: Nat) (t2 :: Nat).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)-                                                 -> GHC.Types.Type) t1) t2)+        forall (t1 :: Nat) (t2 :: Nat). Sing t1+                                        -> Sing t2+                                           -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)+                                                                                 -> GHC.Types.Type) t1) t2)       sCompare SZero SZero         = (applySing              ((applySing@@ -621,11 +630,10 @@       sCompare (SSucc _) SZero = SGT     instance (SEq a, SEq b, SEq c, SEq d) => SEq (Foo a b c d) where       (%==) ::-        forall (t1 :: Foo a b c d) (t2 :: Foo a b c d).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun (Foo a b c d) ((~>) (Foo a b c d) Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: Foo a b c d) (t2 :: Foo a b c d). Sing t1+                                                        -> Sing t2+                                                           -> Sing (Apply (Apply ((==@#@$) :: TyFun (Foo a b c d) ((~>) (Foo a b c d) Bool)+                                                                                              -> GHC.Types.Type) t1) t2)       (%==)         (SA (sA_0123456789876543210 :: Sing a_0123456789876543210)             (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -821,11 +829,10 @@     instance (SOrd a, SOrd b, SOrd c, SOrd d) =>              SOrd (Foo a b c d) where       sCompare ::-        forall (t1 :: Foo a b c d) (t2 :: Foo a b c d).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun (Foo a b c d) ((~>) (Foo a b c d) Ordering)-                                                 -> GHC.Types.Type) t1) t2)+        forall (t1 :: Foo a b c d) (t2 :: Foo a b c d). Sing t1+                                                        -> Sing t2+                                                           -> Sing (Apply (Apply (CompareSym0 :: TyFun (Foo a b c d) ((~>) (Foo a b c d) Ordering)+                                                                                                 -> GHC.Types.Type) t1) t2)       sCompare         (SA (sA_0123456789876543210 :: Sing a_0123456789876543210)             (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -1092,13 +1099,13 @@       sCompare (SF _ _ _ _) (SE _ _ _ _) = SGT     instance SDecide Nat => SDecide Nat where       (%~) SZero SZero = Proved Refl-      (%~) SZero (SSucc _) = Disproved (\ x -> case x of)-      (%~) (SSucc _) SZero = Disproved (\ x -> case x of)+      (%~) SZero (SSucc _) = Disproved (\ x -> case x of {})+      (%~) (SSucc _) SZero = Disproved (\ x -> case x of {})       (%~) (SSucc a) (SSucc b)         = case ((%~) a) b of             Proved Refl -> Proved Refl             Disproved contra-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)     instance SDecide Nat =>              Data.Type.Equality.TestEquality (SNat :: Nat                                                       -> GHC.Types.Type) where@@ -1118,19 +1125,19 @@             (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)               -> Proved Refl             (,,,) (Disproved contra) _ _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ (Disproved contra) _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ (Disproved contra) _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ _ (Disproved contra)-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })-      (%~) (SA _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SA _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SA _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SA _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SA _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SB _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)+      (%~) (SA _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SA _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SA _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SA _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SA _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SB _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of {})       (%~) (SB a a a a) (SB b b b b)         = case               ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)@@ -1138,19 +1145,19 @@             (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)               -> Proved Refl             (,,,) (Disproved contra) _ _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ (Disproved contra) _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ (Disproved contra) _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ _ (Disproved contra)-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })-      (%~) (SB _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SB _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SB _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SB _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SC _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SC _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)+      (%~) (SB _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SB _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SB _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SB _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SC _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SC _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of {})       (%~) (SC a a a a) (SC b b b b)         = case               ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)@@ -1158,19 +1165,19 @@             (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)               -> Proved Refl             (,,,) (Disproved contra) _ _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ (Disproved contra) _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ (Disproved contra) _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ _ (Disproved contra)-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })-      (%~) (SC _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SC _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SC _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SD _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SD _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SD _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)+      (%~) (SC _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SC _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SC _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SD _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SD _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SD _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of {})       (%~) (SD a a a a) (SD b b b b)         = case               ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)@@ -1178,19 +1185,19 @@             (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)               -> Proved Refl             (,,,) (Disproved contra) _ _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ (Disproved contra) _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ (Disproved contra) _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ _ (Disproved contra)-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })-      (%~) (SD _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SD _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SE _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SE _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SE _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SE _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)+      (%~) (SD _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SD _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SE _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SE _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SE _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SE _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of {})       (%~) (SE a a a a) (SE b b b b)         = case               ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)@@ -1198,19 +1205,19 @@             (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)               -> Proved Refl             (,,,) (Disproved contra) _ _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ (Disproved contra) _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ (Disproved contra) _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ _ (Disproved contra)-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })-      (%~) (SE _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SF _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SF _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SF _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SF _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)-      (%~) (SF _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)+      (%~) (SE _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SF _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SF _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SF _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SF _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of {})+      (%~) (SF _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of {})       (%~) (SF a a a a) (SF b b b b)         = case               ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)@@ -1218,13 +1225,13 @@             (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)               -> Proved Refl             (,,,) (Disproved contra) _ _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ (Disproved contra) _ _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ (Disproved contra) _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,,,) _ _ _ (Disproved contra)-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)     instance (SDecide a, SDecide b, SDecide c, SDecide d) =>              Data.Type.Equality.TestEquality (SFoo :: Foo a b c d                                                       -> GHC.Types.Type) where@@ -1239,107 +1246,265 @@       sing = SZero     instance SingI n => SingI (Succ (n :: Nat)) where       sing = SSucc sing+    instance SingI1 Succ where+      liftSing = SSucc     instance SingI (SuccSym0 :: (~>) Nat Nat) where       sing = (singFun1 @SuccSym0) SSucc     instance (SingI n, SingI n, SingI n, SingI n) =>              SingI (A (n :: a) (n :: b) (n :: c) (n :: d)) where       sing = (((SA sing) sing) sing) sing+    instance (SingI n, SingI n, SingI n) =>+             SingI1 (A (n :: a) (n :: b) (n :: c)) where+      liftSing = ((SA sing) sing) sing+    instance (SingI n, SingI n) => SingI2 (A (n :: a) (n :: b)) where+      liftSing2 = (SA sing) sing     instance SingI (ASym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where       sing = (singFun4 @ASym0) SA     instance SingI d =>              SingI (ASym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where       sing = (singFun3 @(ASym1 (d :: a))) (SA (sing @d))+    instance SingI1 (ASym1 :: a+                              -> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+      liftSing (s :: Sing (d :: a)) = (singFun3 @(ASym1 (d :: a))) (SA s)     instance (SingI d, SingI d) =>              SingI (ASym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where       sing         = (singFun2 @(ASym2 (d :: a) (d :: b))) ((SA (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (ASym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing (s :: Sing (d :: b))+        = (singFun2 @(ASym2 (d :: a) (d :: b))) ((SA (sing @d)) s)+    instance SingI2 (ASym2 :: a+                              -> b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))+        = (singFun2 @(ASym2 (d :: a) (d :: b))) ((SA s) s)     instance (SingI d, SingI d, SingI d) =>              SingI (ASym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where       sing         = (singFun1 @(ASym3 (d :: a) (d :: b) (d :: c)))             (((SA (sing @d)) (sing @d)) (sing @d))+    instance (SingI d, SingI d) =>+             SingI1 (ASym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where+      liftSing (s :: Sing (d :: c))+        = (singFun1 @(ASym3 (d :: a) (d :: b) (d :: c)))+            (((SA (sing @d)) (sing @d)) s)+    instance SingI d =>+             SingI2 (ASym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where+      liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))+        = (singFun1 @(ASym3 (d :: a) (d :: b) (d :: c)))+            (((SA (sing @d)) s) s)     instance (SingI n, SingI n, SingI n, SingI n) =>              SingI (B (n :: a) (n :: b) (n :: c) (n :: d)) where       sing = (((SB sing) sing) sing) sing+    instance (SingI n, SingI n, SingI n) =>+             SingI1 (B (n :: a) (n :: b) (n :: c)) where+      liftSing = ((SB sing) sing) sing+    instance (SingI n, SingI n) => SingI2 (B (n :: a) (n :: b)) where+      liftSing2 = (SB sing) sing     instance SingI (BSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where       sing = (singFun4 @BSym0) SB     instance SingI d =>              SingI (BSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where       sing = (singFun3 @(BSym1 (d :: a))) (SB (sing @d))+    instance SingI1 (BSym1 :: a+                              -> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+      liftSing (s :: Sing (d :: a)) = (singFun3 @(BSym1 (d :: a))) (SB s)     instance (SingI d, SingI d) =>              SingI (BSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where       sing         = (singFun2 @(BSym2 (d :: a) (d :: b))) ((SB (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (BSym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing (s :: Sing (d :: b))+        = (singFun2 @(BSym2 (d :: a) (d :: b))) ((SB (sing @d)) s)+    instance SingI2 (BSym2 :: a+                              -> b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))+        = (singFun2 @(BSym2 (d :: a) (d :: b))) ((SB s) s)     instance (SingI d, SingI d, SingI d) =>              SingI (BSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where       sing         = (singFun1 @(BSym3 (d :: a) (d :: b) (d :: c)))             (((SB (sing @d)) (sing @d)) (sing @d))+    instance (SingI d, SingI d) =>+             SingI1 (BSym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where+      liftSing (s :: Sing (d :: c))+        = (singFun1 @(BSym3 (d :: a) (d :: b) (d :: c)))+            (((SB (sing @d)) (sing @d)) s)+    instance SingI d =>+             SingI2 (BSym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where+      liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))+        = (singFun1 @(BSym3 (d :: a) (d :: b) (d :: c)))+            (((SB (sing @d)) s) s)     instance (SingI n, SingI n, SingI n, SingI n) =>              SingI (C (n :: a) (n :: b) (n :: c) (n :: d)) where       sing = (((SC sing) sing) sing) sing+    instance (SingI n, SingI n, SingI n) =>+             SingI1 (C (n :: a) (n :: b) (n :: c)) where+      liftSing = ((SC sing) sing) sing+    instance (SingI n, SingI n) => SingI2 (C (n :: a) (n :: b)) where+      liftSing2 = (SC sing) sing     instance SingI (CSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where       sing = (singFun4 @CSym0) SC     instance SingI d =>              SingI (CSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where       sing = (singFun3 @(CSym1 (d :: a))) (SC (sing @d))+    instance SingI1 (CSym1 :: a+                              -> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+      liftSing (s :: Sing (d :: a)) = (singFun3 @(CSym1 (d :: a))) (SC s)     instance (SingI d, SingI d) =>              SingI (CSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where       sing         = (singFun2 @(CSym2 (d :: a) (d :: b))) ((SC (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (CSym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing (s :: Sing (d :: b))+        = (singFun2 @(CSym2 (d :: a) (d :: b))) ((SC (sing @d)) s)+    instance SingI2 (CSym2 :: a+                              -> b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))+        = (singFun2 @(CSym2 (d :: a) (d :: b))) ((SC s) s)     instance (SingI d, SingI d, SingI d) =>              SingI (CSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where       sing         = (singFun1 @(CSym3 (d :: a) (d :: b) (d :: c)))             (((SC (sing @d)) (sing @d)) (sing @d))+    instance (SingI d, SingI d) =>+             SingI1 (CSym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where+      liftSing (s :: Sing (d :: c))+        = (singFun1 @(CSym3 (d :: a) (d :: b) (d :: c)))+            (((SC (sing @d)) (sing @d)) s)+    instance SingI d =>+             SingI2 (CSym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where+      liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))+        = (singFun1 @(CSym3 (d :: a) (d :: b) (d :: c)))+            (((SC (sing @d)) s) s)     instance (SingI n, SingI n, SingI n, SingI n) =>              SingI (D (n :: a) (n :: b) (n :: c) (n :: d)) where       sing = (((SD sing) sing) sing) sing+    instance (SingI n, SingI n, SingI n) =>+             SingI1 (D (n :: a) (n :: b) (n :: c)) where+      liftSing = ((SD sing) sing) sing+    instance (SingI n, SingI n) => SingI2 (D (n :: a) (n :: b)) where+      liftSing2 = (SD sing) sing     instance SingI (DSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where       sing = (singFun4 @DSym0) SD     instance SingI d =>              SingI (DSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where       sing = (singFun3 @(DSym1 (d :: a))) (SD (sing @d))+    instance SingI1 (DSym1 :: a+                              -> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+      liftSing (s :: Sing (d :: a)) = (singFun3 @(DSym1 (d :: a))) (SD s)     instance (SingI d, SingI d) =>              SingI (DSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where       sing         = (singFun2 @(DSym2 (d :: a) (d :: b))) ((SD (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (DSym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing (s :: Sing (d :: b))+        = (singFun2 @(DSym2 (d :: a) (d :: b))) ((SD (sing @d)) s)+    instance SingI2 (DSym2 :: a+                              -> b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))+        = (singFun2 @(DSym2 (d :: a) (d :: b))) ((SD s) s)     instance (SingI d, SingI d, SingI d) =>              SingI (DSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where       sing         = (singFun1 @(DSym3 (d :: a) (d :: b) (d :: c)))             (((SD (sing @d)) (sing @d)) (sing @d))+    instance (SingI d, SingI d) =>+             SingI1 (DSym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where+      liftSing (s :: Sing (d :: c))+        = (singFun1 @(DSym3 (d :: a) (d :: b) (d :: c)))+            (((SD (sing @d)) (sing @d)) s)+    instance SingI d =>+             SingI2 (DSym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where+      liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))+        = (singFun1 @(DSym3 (d :: a) (d :: b) (d :: c)))+            (((SD (sing @d)) s) s)     instance (SingI n, SingI n, SingI n, SingI n) =>              SingI (E (n :: a) (n :: b) (n :: c) (n :: d)) where       sing = (((SE sing) sing) sing) sing+    instance (SingI n, SingI n, SingI n) =>+             SingI1 (E (n :: a) (n :: b) (n :: c)) where+      liftSing = ((SE sing) sing) sing+    instance (SingI n, SingI n) => SingI2 (E (n :: a) (n :: b)) where+      liftSing2 = (SE sing) sing     instance SingI (ESym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where       sing = (singFun4 @ESym0) SE     instance SingI d =>              SingI (ESym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where       sing = (singFun3 @(ESym1 (d :: a))) (SE (sing @d))+    instance SingI1 (ESym1 :: a+                              -> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+      liftSing (s :: Sing (d :: a)) = (singFun3 @(ESym1 (d :: a))) (SE s)     instance (SingI d, SingI d) =>              SingI (ESym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where       sing         = (singFun2 @(ESym2 (d :: a) (d :: b))) ((SE (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (ESym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing (s :: Sing (d :: b))+        = (singFun2 @(ESym2 (d :: a) (d :: b))) ((SE (sing @d)) s)+    instance SingI2 (ESym2 :: a+                              -> b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))+        = (singFun2 @(ESym2 (d :: a) (d :: b))) ((SE s) s)     instance (SingI d, SingI d, SingI d) =>              SingI (ESym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where       sing         = (singFun1 @(ESym3 (d :: a) (d :: b) (d :: c)))             (((SE (sing @d)) (sing @d)) (sing @d))+    instance (SingI d, SingI d) =>+             SingI1 (ESym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where+      liftSing (s :: Sing (d :: c))+        = (singFun1 @(ESym3 (d :: a) (d :: b) (d :: c)))+            (((SE (sing @d)) (sing @d)) s)+    instance SingI d =>+             SingI2 (ESym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where+      liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))+        = (singFun1 @(ESym3 (d :: a) (d :: b) (d :: c)))+            (((SE (sing @d)) s) s)     instance (SingI n, SingI n, SingI n, SingI n) =>              SingI (F (n :: a) (n :: b) (n :: c) (n :: d)) where       sing = (((SF sing) sing) sing) sing+    instance (SingI n, SingI n, SingI n) =>+             SingI1 (F (n :: a) (n :: b) (n :: c)) where+      liftSing = ((SF sing) sing) sing+    instance (SingI n, SingI n) => SingI2 (F (n :: a) (n :: b)) where+      liftSing2 = (SF sing) sing     instance SingI (FSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where       sing = (singFun4 @FSym0) SF     instance SingI d =>              SingI (FSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where       sing = (singFun3 @(FSym1 (d :: a))) (SF (sing @d))+    instance SingI1 (FSym1 :: a+                              -> (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+      liftSing (s :: Sing (d :: a)) = (singFun3 @(FSym1 (d :: a))) (SF s)     instance (SingI d, SingI d) =>              SingI (FSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where       sing         = (singFun2 @(FSym2 (d :: a) (d :: b))) ((SF (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (FSym2 (d :: a) :: b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing (s :: Sing (d :: b))+        = (singFun2 @(FSym2 (d :: a) (d :: b))) ((SF (sing @d)) s)+    instance SingI2 (FSym2 :: a+                              -> b -> (~>) c ((~>) d (Foo a b c d))) where+      liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))+        = (singFun2 @(FSym2 (d :: a) (d :: b))) ((SF s) s)     instance (SingI d, SingI d, SingI d) =>              SingI (FSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where       sing         = (singFun1 @(FSym3 (d :: a) (d :: b) (d :: c)))             (((SF (sing @d)) (sing @d)) (sing @d))+    instance (SingI d, SingI d) =>+             SingI1 (FSym3 (d :: a) (d :: b) :: c -> (~>) d (Foo a b c d)) where+      liftSing (s :: Sing (d :: c))+        = (singFun1 @(FSym3 (d :: a) (d :: b) (d :: c)))+            (((SF (sing @d)) (sing @d)) s)+    instance SingI d =>+             SingI2 (FSym3 (d :: a) :: b -> c -> (~>) d (Foo a b c d)) where+      liftSing2 (s :: Sing (d :: b)) (s :: Sing (d :: c))+        = (singFun1 @(FSym3 (d :: a) (d :: b) (d :: c)))+            (((SF (sing @d)) s) s)
tests/compile-and-dump/Singletons/PatternMatching.golden view
@@ -51,12 +51,12 @@       Complex = Apply (Apply PairSym0 (Apply (Apply PairSym0 (Apply JustSym0 ZeroSym0)) ZeroSym0)) FalseSym0     type family Pr where       Pr = Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) ZeroSym0) NilSym0)-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> Pair a b -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Pair a b) (a :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: Pair a b) (a :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210 p_0123456789876543210 (Pair arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Pair ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (Pair a b) ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (Pair a b) ((~>) Symbol Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (Pair a b) ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (Pair a b) ((~>) Symbol Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -64,9 +64,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) (Pair a b) ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) (Pair a b) ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) (Pair a b) ((~>) Symbol Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -74,9 +74,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> Pair a b -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a b) :: (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Pair a b) :: (~>) Symbol Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -84,9 +84,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> Pair a b -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a b) (a0123456789876543210 :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Pair a b) (a0123456789876543210 :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow (Pair a b) where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -131,16 +131,17 @@       type Demote (Pair a b) = Pair (Demote a) (Demote b)       fromSing (SPair b b) = (Pair (fromSing b)) (fromSing b)       toSing (Pair (b :: Demote a) (b :: Demote b))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c)     instance (SShow a, SShow b) => SShow (Pair a b) where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: Pair a b) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Pair a b) ((~>) Symbol Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: Pair a b)+               (t3 :: Symbol). Sing t1+                               -> Sing t2+                                  -> Sing t3+                                     -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) (Pair a b) ((~>) Symbol Symbol))+                                                                                    -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         (sP_0123456789876543210 :: Sing p_0123456789876543210)         (SPair (sArg_0123456789876543210 :: Sing arg_0123456789876543210)@@ -175,11 +176,18 @@                       Show (SPair (z :: Pair a b))     instance (SingI n, SingI n) => SingI (Pair (n :: a) (n :: b)) where       sing = (SPair sing) sing+    instance SingI n => SingI1 (Pair (n :: a)) where+      liftSing = SPair sing+    instance SingI2 Pair where+      liftSing2 = SPair     instance SingI (PairSym0 :: (~>) a ((~>) b (Pair a b))) where       sing = (singFun2 @PairSym0) SPair     instance SingI d =>              SingI (PairSym1 (d :: a) :: (~>) b (Pair a b)) where       sing = (singFun1 @(PairSym1 (d :: a))) (SPair (sing @d))+    instance SingI1 (PairSym1 :: a -> (~>) b (Pair a b)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(PairSym1 (d :: a))) (SPair s) Singletons/PatternMatching.hs:(0,0)-(0,0): Splicing declarations     singletons       [d| Pair sz lz = pr@@ -191,9 +199,9 @@           foo1 :: (a, b) -> a           foo1 (x, y) = (\ _ -> x) y           foo2 :: (# a, b #) -> a-          foo2 t@(# x, y #) = case t of { (# a, b #) -> (\ _ -> a) b }+          foo2 t@(# x, y #) = case t of (# a, b #) -> (\ _ -> a) b           silly :: a -> ()-          silly x = case x of { _ -> () } |]+          silly x = case x of _ -> () |]   ======>     Pair sz lz = pr     Pair (Pair jz zz) fls = complex@@ -204,9 +212,9 @@     foo1 :: (a, b) -> a     foo1 (x, y) = (\ _ -> x) y     foo2 :: (# a, b #) -> a-    foo2 t@(# x, y #) = case t of { (# a, b #) -> (\ _ -> a) b }+    foo2 t@(# x, y #) = case t of (# a, b #) -> (\ _ -> a) b     silly :: a -> ()-    silly x = case x of { _ -> () }+    silly x = case x of _ -> ()     type family Case_0123456789876543210 x t where       Case_0123456789876543210 x _ = Tuple0Sym0     data Let0123456789876543210TSym0 x0123456789876543210@@ -464,7 +472,7 @@     sX_0123456789876543210 :: Sing @_ X_0123456789876543210Sym0     sSilly (sX :: Sing x)       = (id @(Sing (Case_0123456789876543210 x x :: ())))-          (case sX of { _ -> STuple0 })+          (case sX of _ -> STuple0)     sFoo2 (STuple2 (sX :: Sing x) (sY :: Sing y))       = let           sT :: Sing @_ (Let0123456789876543210TSym2 x y)@@ -473,93 +481,93 @@         in           (id              @(Sing (Case_0123456789876543210 x y (Let0123456789876543210TSym2 x y) :: a)))-            (case sT of {+            (case sT of                STuple2 (sA :: Sing a) (sB :: Sing b)                  -> (applySing                        ((singFun1                            @(Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) b) x) y))                           (\ sArg_0123456789876543210-                             -> case sArg_0123456789876543210 of {+                             -> case sArg_0123456789876543210 of                                   (_ :: Sing arg_0123456789876543210)                                     -> (id                                           @(Sing (Case_0123456789876543210 arg_0123456789876543210 a b x y arg_0123456789876543210)))-                                         (case sArg_0123456789876543210 of { _ -> sA }) })))-                      sB })+                                         (case sArg_0123456789876543210 of _ -> sA))))+                      sB)     sFoo1 (STuple2 (sX :: Sing x) (sY :: Sing y))       = (applySing            ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))               (\ sArg_0123456789876543210-                 -> case sArg_0123456789876543210 of {+                 -> case sArg_0123456789876543210 of                       (_ :: Sing arg_0123456789876543210)                         -> (id                               @(Sing (Case_0123456789876543210 arg_0123456789876543210 x y arg_0123456789876543210)))-                             (case sArg_0123456789876543210 of { _ -> sX }) })))+                             (case sArg_0123456789876543210 of _ -> sX))))           sY     sBlimy       = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SCons _                    (SCons _                           (SCons (SSucc (sY_0123456789876543210 :: Sing y_0123456789876543210))                                  SNil))-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sLsz       = (id            @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Nat)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SCons _                    (SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)                           (SCons (SSucc _) SNil))-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sX_0123456789876543210 = sAList     sTt       = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              STuple3 _ _ (sY_0123456789876543210 :: Sing y_0123456789876543210)-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sTjz       = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              STuple3 _ (sY_0123456789876543210 :: Sing y_0123456789876543210) _-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sTf       = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              STuple3 (sY_0123456789876543210 :: Sing y_0123456789876543210) _ _-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sX_0123456789876543210 = sTuple     sFls       = (id            @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SPair (SPair _ _)                    (sY_0123456789876543210 :: Sing y_0123456789876543210)-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sZz       = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SPair (SPair _                           (sY_0123456789876543210 :: Sing y_0123456789876543210))                    _-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sJz       = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SPair (SPair (sY_0123456789876543210 :: Sing y_0123456789876543210)                           _)                    _-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sX_0123456789876543210 = sComplex     sLz       = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SPair _ (sY_0123456789876543210 :: Sing y_0123456789876543210)-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sSz       = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SPair (sY_0123456789876543210 :: Sing y_0123456789876543210) _-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sX_0123456789876543210 = sPr     instance SingI (SillySym0 :: (~>) a ()) where       sing = (singFun1 @SillySym0) sSilly
tests/compile-and-dump/Singletons/PolyKinds.golden view
@@ -17,11 +17,11 @@     type family FffSym1 (a0123456789876543210 :: Proxy (a :: k)) :: () where       FffSym1 a0123456789876543210 = Fff a0123456789876543210     class PCls (a :: k) where-      type Fff (arg :: Proxy (a :: k)) :: ()+      type family Fff (arg :: Proxy (a :: k)) :: ()     class SCls (a :: k) where       sFff ::-        forall (t :: Proxy (a :: k)).-        Sing t -> Sing (Apply FffSym0 t :: ())+        forall (t :: Proxy (a :: k)). Sing t+                                      -> Sing (Apply FffSym0 t :: ())     instance SCls a =>              SingI (FffSym0 :: (~>) (Proxy (a :: k)) ()) where       sing = (singFun1 @FffSym0) sFff
tests/compile-and-dump/Singletons/PolyKindsApp.golden view
@@ -5,12 +5,12 @@   ======>     class Cls (a :: k -> Type) where       fff :: (a :: k -> Type) (b :: k)-    type FffSym0 :: forall k (a :: k -> Type) (b :: k).-                    (a :: k -> Type) (b :: k)+    type FffSym0 :: forall k (a :: k -> Type) (b :: k). (a :: k+                                                              -> Type) (b :: k)     type family FffSym0 :: (a :: k -> Type) (b :: k) where       FffSym0 = Fff     class PCls (a :: k -> Type) where-      type Fff :: (a :: k -> Type) (b :: k)+      type family Fff :: (a :: k -> Type) (b :: k)     class SCls (a :: k -> Type) where       sFff ::         forall (b :: k). Sing (FffSym0 :: (a :: k -> Type) (b :: k))
tests/compile-and-dump/Singletons/Records.golden view
@@ -51,8 +51,8 @@     type family Field1 (a :: Record a) :: a where       Field1 (MkRecord field _) = field     sField2 ::-      forall a (t :: Record a).-      Sing t -> Sing (Apply Field2Sym0 t :: Bool)+      forall a (t :: Record a). Sing t+                                -> Sing (Apply Field2Sym0 t :: Bool)     sField1 ::       forall a (t :: Record a). Sing t -> Sing (Apply Field1Sym0 t :: a)     sField2 (SMkRecord _ (sField :: Sing field)) = sField@@ -72,13 +72,20 @@       toSing (MkRecord (b :: Demote a) (b :: Demote Bool))         = case               ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing Bool)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkRecord c) c) }+          of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkRecord c) c)     instance (SingI n, SingI n) =>              SingI (MkRecord (n :: a) (n :: Bool)) where       sing = (SMkRecord sing) sing+    instance SingI n => SingI1 (MkRecord (n :: a)) where+      liftSing = SMkRecord sing+    instance SingI2 MkRecord where+      liftSing2 = SMkRecord     instance SingI (MkRecordSym0 :: (~>) a ((~>) Bool (Record a))) where       sing = (singFun2 @MkRecordSym0) SMkRecord     instance SingI d =>              SingI (MkRecordSym1 (d :: a) :: (~>) Bool (Record a)) where       sing = (singFun1 @(MkRecordSym1 (d :: a))) (SMkRecord (sing @d))+    instance SingI1 (MkRecordSym1 :: a -> (~>) Bool (Record a)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(MkRecordSym1 (d :: a))) (SMkRecord s)
tests/compile-and-dump/Singletons/ReturnFunc.golden view
@@ -72,12 +72,12 @@     type family ReturnFunc (a :: Nat) (a :: Nat) :: Nat where       ReturnFunc _ a_0123456789876543210 = Apply SuccSym0 a_0123456789876543210     sIdFoo ::-      forall c a (t :: c) (t :: a).-      Sing t -> Sing t -> Sing (Apply (Apply IdFooSym0 t) t :: a)+      forall c a (t :: c) (t :: a). Sing t+                                    -> Sing t -> Sing (Apply (Apply IdFooSym0 t) t :: a)     sId :: forall a (t :: a). Sing t -> Sing (Apply IdSym0 t :: a)     sReturnFunc ::-      forall (t :: Nat) (t :: Nat).-      Sing t -> Sing t -> Sing (Apply (Apply ReturnFuncSym0 t) t :: Nat)+      forall (t :: Nat) (t :: Nat). Sing t+                                    -> Sing t -> Sing (Apply (Apply ReturnFuncSym0 t) t :: Nat)     sIdFoo _ (sA_0123456789876543210 :: Sing a_0123456789876543210)       = (applySing ((singFun1 @IdSym0) sId)) sA_0123456789876543210     sId (sX :: Sing x) = sX@@ -89,6 +89,9 @@       sing = (singFun2 @IdFooSym0) sIdFoo     instance SingI d => SingI (IdFooSym1 (d :: c) :: (~>) a a) where       sing = (singFun1 @(IdFooSym1 (d :: c))) (sIdFoo (sing @d))+    instance SingI1 (IdFooSym1 :: c -> (~>) a a) where+      liftSing (s :: Sing (d :: c))+        = (singFun1 @(IdFooSym1 (d :: c))) (sIdFoo s)     instance SingI (IdSym0 :: (~>) a a) where       sing = (singFun1 @IdSym0) sId     instance SingI (ReturnFuncSym0 :: (~>) Nat ((~>) Nat Nat)) where@@ -97,3 +100,6 @@              SingI (ReturnFuncSym1 (d :: Nat) :: (~>) Nat Nat) where       sing         = (singFun1 @(ReturnFuncSym1 (d :: Nat))) (sReturnFunc (sing @d))+    instance SingI1 (ReturnFuncSym1 :: Nat -> (~>) Nat Nat) where+      liftSing (s :: Sing (d :: Nat))+        = (singFun1 @(ReturnFuncSym1 (d :: Nat))) (sReturnFunc s)
tests/compile-and-dump/Singletons/Sections.golden view
@@ -76,8 +76,8 @@     sFoo2 :: Sing (Foo2Sym0 :: [Nat])     sFoo1 :: Sing (Foo1Sym0 :: [Nat])     (%+) ::-      forall (t :: Nat) (t :: Nat).-      Sing t -> Sing t -> Sing (Apply (Apply (+@#@$) t) t :: Nat)+      forall (t :: Nat) (t :: Nat). Sing t+                                    -> Sing t -> Sing (Apply (Apply (+@#@$) t) t :: Nat)     sFoo3       = (applySing            ((applySing@@ -100,11 +100,11 @@            ((applySing ((singFun2 @MapSym0) sMap))               ((singFun1 @Lambda_0123456789876543210Sym0)                  (\ sLhs_0123456789876543210-                    -> case sLhs_0123456789876543210 of {+                    -> case sLhs_0123456789876543210 of                          (_ :: Sing lhs_0123456789876543210)                            -> (applySing                                  ((applySing ((singFun2 @(+@#@$)) (%+))) sLhs_0123456789876543210))-                                ((applySing ((singFun1 @SuccSym0) SSucc)) SZero) }))))+                                ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))))           ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))              ((applySing                  ((applySing ((singFun2 @(:@#@$)) SCons))@@ -129,3 +129,6 @@     instance SingI d =>              SingI ((+@#@$$) (d :: Nat) :: (~>) Nat Nat) where       sing = (singFun1 @((+@#@$$) (d :: Nat))) ((%+) (sing @d))+    instance SingI1 ((+@#@$$) :: Nat -> (~>) Nat Nat) where+      liftSing (s :: Sing (d :: Nat))+        = (singFun1 @((+@#@$$) (d :: Nat))) ((%+) s)
tests/compile-and-dump/Singletons/ShowDeriving.golden view
@@ -9,7 +9,7 @@             = MkFoo2a a a | a `MkFoo2b` a | (:*:) a a | a :&: a             deriving Show           data Foo3-            = MkFoo3 {getFoo3a :: Bool, *** :: Bool}+            = MkFoo3 {getFoo3a :: Bool, (***) :: Bool}             deriving Show |]   ======>     data Foo1@@ -22,7 +22,7 @@       = MkFoo2a a a | a `MkFoo2b` a | (:*:) a a | a :&: a       deriving Show     data Foo3-      = MkFoo3 {getFoo3a :: Bool, *** :: Bool}+      = MkFoo3 {getFoo3a :: Bool, (***) :: Bool}       deriving Show     type MkFoo1Sym0 :: Foo1     type family MkFoo1Sym0 :: Foo1 where@@ -159,12 +159,12 @@     type GetFoo3a :: Foo3 -> Bool     type family GetFoo3a (a :: Foo3) :: Bool where       GetFoo3a (MkFoo3 field _) = field-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> Foo1 -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo1) (a :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: Foo1) (a :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210 _ MkFoo1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "MkFoo1") a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo1 ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo1 ((~>) Symbol Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) Foo1 ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) Foo1 ((~>) Symbol Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -172,9 +172,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) Foo1 ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Foo1 ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) Foo1 ((~>) Symbol Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -182,9 +182,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> Foo1 -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo1) :: (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Foo1) :: (~>) Symbol Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -192,21 +192,21 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> Foo1 -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo1) (a0123456789876543210 :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Foo1) (a0123456789876543210 :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow Foo1 where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> Foo2 a -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo2 a) (a :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: Foo2 a) (a :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210 p_0123456789876543210 (MkFoo2a arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "MkFoo2a ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210       ShowsPrec_0123456789876543210 p_0123456789876543210 (MkFoo2b argL_0123456789876543210 argR_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 5))) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argL_0123456789876543210)) (Apply (Apply (.@#@$) (Apply ShowStringSym0 " `MkFoo2b` ")) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argR_0123456789876543210)))) a_0123456789876543210       ShowsPrec_0123456789876543210 p_0123456789876543210 ((:*:) arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "(:*:) ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210       ShowsPrec_0123456789876543210 p_0123456789876543210 ((:&:) argL_0123456789876543210 argR_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 5))) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argL_0123456789876543210)) (Apply (Apply (.@#@$) (Apply ShowStringSym0 " :&: ")) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argR_0123456789876543210)))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (Foo2 a) ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (Foo2 a) ((~>) Symbol Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (Foo2 a) ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (Foo2 a) ((~>) Symbol Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -214,9 +214,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) (Foo2 a) ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) (Foo2 a) ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) (Foo2 a) ((~>) Symbol Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -224,9 +224,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> Foo2 a -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo2 a) :: (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Foo2 a) :: (~>) Symbol Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -234,18 +234,18 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> Foo2 a -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo2 a) (a0123456789876543210 :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Foo2 a) (a0123456789876543210 :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow (Foo2 a) where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> Foo3 -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo3) (a :: Symbol) :: Symbol where-      ShowsPrec_0123456789876543210 p_0123456789876543210 (MkFoo3 arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "MkFoo3 ")) (Apply (Apply (.@#@$) (Apply ShowCharSym0 "{")) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "getFoo3a = ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 0)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowCommaSpaceSym0) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "(***) = ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 0)) arg_0123456789876543210)) (Apply ShowCharSym0 "}"))))))))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo3 ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo3 ((~>) Symbol Symbol))+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: Foo3) (a :: Symbol) :: Symbol where+      ShowsPrec_0123456789876543210 p_0123456789876543210 (MkFoo3 arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "MkFoo3 ")) (Apply (Apply (.@#@$) (Apply ShowCharSym0 '{')) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "getFoo3a = ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 0)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowCommaSpaceSym0) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "(***) = ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 0)) arg_0123456789876543210)) (Apply ShowCharSym0 '}'))))))))) a_0123456789876543210+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) Foo3 ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) Foo3 ((~>) Symbol Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -253,9 +253,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) Foo3 ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Foo3 ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) Foo3 ((~>) Symbol Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -263,9 +263,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> Foo3 -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo3) :: (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Foo3) :: (~>) Symbol Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -273,9 +273,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> Foo3 -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo3) (a0123456789876543210 :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Foo3) (a0123456789876543210 :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow Foo3 where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -317,17 +317,17 @@       fromSing ((:%*:) b b) = ((:*:) (fromSing b)) (fromSing b)       fromSing ((:%&:) b b) = ((:&:) (fromSing b)) (fromSing b)       toSing (MkFoo2a (b :: Demote a) (b :: Demote a))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo2a c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo2a c) c)       toSing (MkFoo2b (b :: Demote a) (b :: Demote a))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo2b c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo2b c) c)       toSing ((:*:) (b :: Demote a) (b :: Demote a))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c)       toSing ((:&:) (b :: Demote a) (b :: Demote a))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%&:) c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%&:) c) c)     data SFoo3 :: Foo3 -> GHC.Types.Type       where         SMkFoo3 :: forall (n :: Bool) (n :: Bool).@@ -339,16 +339,17 @@       toSing (MkFoo3 (b :: Demote Bool) (b :: Demote Bool))         = case               ((,) (toSing b :: SomeSing Bool)) (toSing b :: SomeSing Bool)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo3 c) c) }+          of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo3 c) c)     instance SShow Foo1 where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: Foo1) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Foo1 ((~>) Symbol Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: Foo1)+               (t3 :: Symbol). Sing t1+                               -> Sing t2+                                  -> Sing t3+                                     -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) Foo1 ((~>) Symbol Symbol))+                                                                                    -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         _         SMkFoo1@@ -359,12 +360,13 @@             sA_0123456789876543210     instance SShow a => SShow (Foo2 a) where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: Foo2 a) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Foo2 a) ((~>) Symbol Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: Foo2 a)+               (t3 :: Symbol). Sing t1+                               -> Sing t2+                                  -> Sing t3+                                     -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) (Foo2 a) ((~>) Symbol Symbol))+                                                                                    -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         (sP_0123456789876543210 :: Sing p_0123456789876543210)         (SMkFoo2a (sArg_0123456789876543210 :: Sing arg_0123456789876543210)@@ -477,12 +479,13 @@             sA_0123456789876543210     instance SShow Bool => SShow Foo3 where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: Foo3) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Foo3 ((~>) Symbol Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: Foo3)+               (t3 :: Symbol). Sing t1+                               -> Sing t2+                                  -> Sing t3+                                     -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) Foo3 ((~>) Symbol Symbol))+                                                                                    -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         (sP_0123456789876543210 :: Sing p_0123456789876543210)         (SMkFoo3 (sArg_0123456789876543210 :: Sing arg_0123456789876543210)@@ -501,7 +504,7 @@                    ((applySing                        ((applySing ((singFun3 @(.@#@$)) (%.)))                           ((applySing ((singFun2 @ShowCharSym0) sShowChar))-                             (sing :: Sing "{"))))+                             (sing :: Sing '{'))))                       ((applySing                           ((applySing ((singFun3 @(.@#@$)) (%.)))                              ((applySing ((singFun2 @ShowStringSym0) sShowString))@@ -526,7 +529,7 @@                                                 (sFromInteger (sing :: Sing 0))))                                             sArg_0123456789876543210)))                                      ((applySing ((singFun2 @ShowCharSym0) sShowChar))-                                        (sing :: Sing "}")))))))))))+                                        (sing :: Sing '}')))))))))))             sA_0123456789876543210     deriving instance Show (SFoo1 (z :: Foo1))     deriving instance Data.Singletons.ShowSing.ShowSing a =>@@ -538,40 +541,75 @@     instance (SingI n, SingI n) =>              SingI (MkFoo2a (n :: a) (n :: a)) where       sing = (SMkFoo2a sing) sing+    instance SingI n => SingI1 (MkFoo2a (n :: a)) where+      liftSing = SMkFoo2a sing+    instance SingI2 MkFoo2a where+      liftSing2 = SMkFoo2a     instance SingI (MkFoo2aSym0 :: (~>) a ((~>) a (Foo2 a))) where       sing = (singFun2 @MkFoo2aSym0) SMkFoo2a     instance SingI d =>              SingI (MkFoo2aSym1 (d :: a) :: (~>) a (Foo2 a)) where       sing = (singFun1 @(MkFoo2aSym1 (d :: a))) (SMkFoo2a (sing @d))+    instance SingI1 (MkFoo2aSym1 :: a -> (~>) a (Foo2 a)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(MkFoo2aSym1 (d :: a))) (SMkFoo2a s)     instance (SingI n, SingI n) =>              SingI (MkFoo2b (n :: a) (n :: a)) where       sing = (SMkFoo2b sing) sing+    instance SingI n => SingI1 (MkFoo2b (n :: a)) where+      liftSing = SMkFoo2b sing+    instance SingI2 MkFoo2b where+      liftSing2 = SMkFoo2b     instance SingI (MkFoo2bSym0 :: (~>) a ((~>) a (Foo2 a))) where       sing = (singFun2 @MkFoo2bSym0) SMkFoo2b     instance SingI d =>              SingI (MkFoo2bSym1 (d :: a) :: (~>) a (Foo2 a)) where       sing = (singFun1 @(MkFoo2bSym1 (d :: a))) (SMkFoo2b (sing @d))+    instance SingI1 (MkFoo2bSym1 :: a -> (~>) a (Foo2 a)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(MkFoo2bSym1 (d :: a))) (SMkFoo2b s)     instance (SingI n, SingI n) =>              SingI ((:*:) (n :: a) (n :: a)) where       sing = ((:%*:) sing) sing+    instance SingI n => SingI1 ((:*:) (n :: a)) where+      liftSing = (:%*:) sing+    instance SingI2 (:*:) where+      liftSing2 = (:%*:)     instance SingI ((:*:@#@$) :: (~>) a ((~>) a (Foo2 a))) where       sing = (singFun2 @(:*:@#@$)) (:%*:)     instance SingI d =>              SingI ((:*:@#@$$) (d :: a) :: (~>) a (Foo2 a)) where       sing = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) (sing @d))+    instance SingI1 ((:*:@#@$$) :: a -> (~>) a (Foo2 a)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) s)     instance (SingI n, SingI n) =>              SingI ((:&:) (n :: a) (n :: a)) where       sing = ((:%&:) sing) sing+    instance SingI n => SingI1 ((:&:) (n :: a)) where+      liftSing = (:%&:) sing+    instance SingI2 (:&:) where+      liftSing2 = (:%&:)     instance SingI ((:&:@#@$) :: (~>) a ((~>) a (Foo2 a))) where       sing = (singFun2 @(:&:@#@$)) (:%&:)     instance SingI d =>              SingI ((:&:@#@$$) (d :: a) :: (~>) a (Foo2 a)) where       sing = (singFun1 @((:&:@#@$$) (d :: a))) ((:%&:) (sing @d))+    instance SingI1 ((:&:@#@$$) :: a -> (~>) a (Foo2 a)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((:&:@#@$$) (d :: a))) ((:%&:) s)     instance (SingI n, SingI n) =>              SingI (MkFoo3 (n :: Bool) (n :: Bool)) where       sing = (SMkFoo3 sing) sing+    instance SingI n => SingI1 (MkFoo3 (n :: Bool)) where+      liftSing = SMkFoo3 sing+    instance SingI2 MkFoo3 where+      liftSing2 = SMkFoo3     instance SingI (MkFoo3Sym0 :: (~>) Bool ((~>) Bool Foo3)) where       sing = (singFun2 @MkFoo3Sym0) SMkFoo3     instance SingI d =>              SingI (MkFoo3Sym1 (d :: Bool) :: (~>) Bool Foo3) where       sing = (singFun1 @(MkFoo3Sym1 (d :: Bool))) (SMkFoo3 (sing @d))+    instance SingI1 (MkFoo3Sym1 :: Bool -> (~>) Bool Foo3) where+      liftSing (s :: Sing (d :: Bool))+        = (singFun1 @(MkFoo3Sym1 (d :: Bool))) (SMkFoo3 s)
tests/compile-and-dump/Singletons/StandaloneDeriving.golden view
@@ -108,12 +108,12 @@       Compare_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210     instance POrd (T a ()) where       type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> T a () -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: T a ()) (a :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: T a ()) (a :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210 p_0123456789876543210 ((:*:) argL_0123456789876543210 argR_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 6))) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 7)) argL_0123456789876543210)) (Apply (Apply (.@#@$) (Apply ShowStringSym0 " :*: ")) (Apply (Apply ShowsPrecSym0 (FromInteger 7)) argR_0123456789876543210)))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (T a ()) ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (T a ()) ((~>) Symbol Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (T a ()) ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (T a ()) ((~>) Symbol Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -121,9 +121,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) (T a ()) ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) (T a ()) ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) (T a ()) ((~>) Symbol Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -131,9 +131,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> T a () -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T a ()) :: (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: T a ()) :: (~>) Symbol Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -141,9 +141,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> T a () -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T a ()) (a0123456789876543210 :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: T a ()) (a0123456789876543210 :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow (T a ()) where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -205,13 +205,13 @@       Compare_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210     instance POrd S where       type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> S -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: S) (a :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: S) (a :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210 _ S1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "S1") a_0123456789876543210       ShowsPrec_0123456789876543210 _ S2 a_0123456789876543210 = Apply (Apply ShowStringSym0 "S2") a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) S ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) S ((~>) Symbol Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) S ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) S ((~>) Symbol Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -219,9 +219,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) S ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) S ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) S ((~>) Symbol Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -229,9 +229,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> S -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: S) :: (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: S) :: (~>) Symbol Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -239,9 +239,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> S -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: S) (a0123456789876543210 :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: S) (a0123456789876543210 :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow S where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -266,11 +266,11 @@     type family Case_0123456789876543210 n t where       Case_0123456789876543210 n 'True = S1Sym0       Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 1))-    type ToEnum_0123456789876543210 :: GHC.Types.Nat -> S-    type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: S where+    type ToEnum_0123456789876543210 :: GHC.Num.Natural.Natural -> S+    type family ToEnum_0123456789876543210 (a :: GHC.Num.Natural.Natural) :: S where       ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0))-    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat S-    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat S+    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural S+    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural S       where         ToEnum_0123456789876543210Sym0KindInference :: SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>                                                        ToEnum_0123456789876543210Sym0 a0123456789876543210@@ -278,15 +278,15 @@     instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())-    type ToEnum_0123456789876543210Sym1 :: GHC.Types.Nat -> S-    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: S where+    type ToEnum_0123456789876543210Sym1 :: GHC.Num.Natural.Natural -> S+    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: S where       ToEnum_0123456789876543210Sym1 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210-    type FromEnum_0123456789876543210 :: S -> GHC.Types.Nat-    type family FromEnum_0123456789876543210 (a :: S) :: GHC.Types.Nat where+    type FromEnum_0123456789876543210 :: S -> GHC.Num.Natural.Natural+    type family FromEnum_0123456789876543210 (a :: S) :: GHC.Num.Natural.Natural where       FromEnum_0123456789876543210 S1 = FromInteger 0       FromEnum_0123456789876543210 S2 = FromInteger 1-    type FromEnum_0123456789876543210Sym0 :: (~>) S GHC.Types.Nat-    data FromEnum_0123456789876543210Sym0 :: (~>) S GHC.Types.Nat+    type FromEnum_0123456789876543210Sym0 :: (~>) S GHC.Num.Natural.Natural+    data FromEnum_0123456789876543210Sym0 :: (~>) S GHC.Num.Natural.Natural       where         FromEnum_0123456789876543210Sym0KindInference :: SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>                                                          FromEnum_0123456789876543210Sym0 a0123456789876543210@@ -294,8 +294,9 @@     instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())-    type FromEnum_0123456789876543210Sym1 :: S -> GHC.Types.Nat-    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: S) :: GHC.Types.Nat where+    type FromEnum_0123456789876543210Sym1 :: S+                                             -> GHC.Num.Natural.Natural+    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: S) :: GHC.Num.Natural.Natural where       FromEnum_0123456789876543210Sym1 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210     instance PEnum S where       type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a@@ -310,8 +311,8 @@       type Demote (T a b) = T (Demote a) (Demote b)       fromSing ((:%*:) b b) = ((:*:) (fromSing b)) (fromSing b)       toSing ((:*:) (b :: Demote a) (b :: Demote b))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c)     data SS :: S -> GHC.Types.Type       where         SS1 :: SS (S1 :: S)@@ -325,11 +326,10 @@       toSing S2 = SomeSing SS2     instance SEq a => SEq (T a ()) where       (%==) ::-        forall (t1 :: T a ()) (t2 :: T a ()).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun (T a ()) ((~>) (T a ()) Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: T a ()) (t2 :: T a ()). Sing t1+                                              -> Sing t2+                                                 -> Sing (Apply (Apply ((==@#@$) :: TyFun (T a ()) ((~>) (T a ()) Bool)+                                                                                    -> GHC.Types.Type) t1) t2)       (%==)         ((:%*:) (sA_0123456789876543210 :: Sing a_0123456789876543210)                 (sA_0123456789876543210 :: Sing a_0123456789876543210))@@ -345,11 +345,10 @@                sB_0123456789876543210)     instance SOrd a => SOrd (T a ()) where       sCompare ::-        forall (t1 :: T a ()) (t2 :: T a ()).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun (T a ()) ((~>) (T a ()) Ordering)-                                                 -> GHC.Types.Type) t1) t2)+        forall (t1 :: T a ()) (t2 :: T a ()). Sing t1+                                              -> Sing t2+                                                 -> Sing (Apply (Apply (CompareSym0 :: TyFun (T a ()) ((~>) (T a ()) Ordering)+                                                                                       -> GHC.Types.Type) t1) t2)       sCompare         ((:%*:) (sA_0123456789876543210 :: Sing a_0123456789876543210)                 (sA_0123456789876543210 :: Sing a_0123456789876543210))@@ -375,12 +374,13 @@                   SNil))     instance SShow a => SShow (T a ()) where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: T a ()) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (T a ()) ((~>) Symbol Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: T a ())+               (t3 :: Symbol). Sing t1+                               -> Sing t2+                                  -> Sing t3+                                     -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) (T a ()) ((~>) Symbol Symbol))+                                                                                    -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         (sP_0123456789876543210 :: Sing p_0123456789876543210)         ((:%*:) (sArgL_0123456789876543210 :: Sing argL_0123456789876543210)@@ -409,22 +409,20 @@             sA_0123456789876543210     instance SEq S where       (%==) ::-        forall (t1 :: S) (t2 :: S).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun S ((~>) S Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: S) (t2 :: S). Sing t1+                                    -> Sing t2+                                       -> Sing (Apply (Apply ((==@#@$) :: TyFun S ((~>) S Bool)+                                                                          -> GHC.Types.Type) t1) t2)       (%==) SS1 SS1 = STrue       (%==) SS1 SS2 = SFalse       (%==) SS2 SS1 = SFalse       (%==) SS2 SS2 = STrue     instance SOrd S where       sCompare ::-        forall (t1 :: S) (t2 :: S).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun S ((~>) S Ordering)-                                                 -> GHC.Types.Type) t1) t2)+        forall (t1 :: S) (t2 :: S). Sing t1+                                    -> Sing t2+                                       -> Sing (Apply (Apply (CompareSym0 :: TyFun S ((~>) S Ordering)+                                                                             -> GHC.Types.Type) t1) t2)       sCompare SS1 SS1         = (applySing              ((applySing@@ -443,12 +441,13 @@       sCompare SS2 SS1 = SGT     instance SShow S where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: S) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) S ((~>) Symbol Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: S)+               (t3 :: Symbol). Sing t1+                               -> Sing t2+                                  -> Sing t3+                                     -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) S ((~>) Symbol Symbol))+                                                                                    -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         _         SS1@@ -472,15 +471,13 @@       sMaxBound = SS2     instance SEnum S where       sToEnum ::-        forall (t :: GHC.Types.Nat).-        Sing t-        -> Sing (Apply (ToEnumSym0 :: TyFun GHC.Types.Nat S-                                      -> GHC.Types.Type) t)+        forall (t :: GHC.Num.Natural.Natural). Sing t+                                               -> Sing (Apply (ToEnumSym0 :: TyFun GHC.Num.Natural.Natural S+                                                                             -> GHC.Types.Type) t)       sFromEnum ::-        forall (t :: S).-        Sing t-        -> Sing (Apply (FromEnumSym0 :: TyFun S GHC.Types.Nat-                                        -> GHC.Types.Type) t)+        forall (t :: S). Sing t+                         -> Sing (Apply (FromEnumSym0 :: TyFun S GHC.Num.Natural.Natural+                                                         -> GHC.Types.Type) t)       sToEnum (sN :: Sing n)         = (id              @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0)))))@@ -505,9 +502,9 @@         = case ((,) (((%~) a) b)) (((%~) a) b) of             (,) (Proved Refl) (Proved Refl) -> Proved Refl             (,) (Disproved contra) _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,) _ (Disproved contra)-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)     instance SDecide a =>              Data.Type.Equality.TestEquality (ST :: T a ()                                                     -> GHC.Types.Type) where@@ -520,8 +517,8 @@         = Data.Singletons.Decide.decideCoercion     instance SDecide S where       (%~) SS1 SS1 = Proved Refl-      (%~) SS1 SS2 = Disproved (\ x -> case x of)-      (%~) SS2 SS1 = Disproved (\ x -> case x of)+      (%~) SS1 SS2 = Disproved (\ x -> case x of {})+      (%~) SS2 SS1 = Disproved (\ x -> case x of {})       (%~) SS2 SS2 = Proved Refl     instance Data.Type.Equality.TestEquality (SS :: S                                                     -> GHC.Types.Type) where@@ -537,11 +534,18 @@     instance (SingI n, SingI n) =>              SingI ((:*:) (n :: a) (n :: b)) where       sing = ((:%*:) sing) sing+    instance SingI n => SingI1 ((:*:) (n :: a)) where+      liftSing = (:%*:) sing+    instance SingI2 (:*:) where+      liftSing2 = (:%*:)     instance SingI ((:*:@#@$) :: (~>) a ((~>) b (T a b))) where       sing = (singFun2 @(:*:@#@$)) (:%*:)     instance SingI d =>              SingI ((:*:@#@$$) (d :: a) :: (~>) b (T a b)) where       sing = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) (sing @d))+    instance SingI1 ((:*:@#@$$) :: a -> (~>) b (T a b)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) s)     instance SingI S1 where       sing = SS1     instance SingI S2 where
tests/compile-and-dump/Singletons/Star.golden view
@@ -148,16 +148,16 @@       Compare_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210     instance POrd Type where       type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> Type -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Type) (a :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: Type) (a :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210 _ Nat a_0123456789876543210 = Apply (Apply ShowStringSym0 "Nat") a_0123456789876543210       ShowsPrec_0123456789876543210 _ Int a_0123456789876543210 = Apply (Apply ShowStringSym0 "Int") a_0123456789876543210       ShowsPrec_0123456789876543210 _ String a_0123456789876543210 = Apply (Apply ShowStringSym0 "String") a_0123456789876543210       ShowsPrec_0123456789876543210 p_0123456789876543210 (Maybe arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Maybe ")) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210       ShowsPrec_0123456789876543210 p_0123456789876543210 (Vec arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Vec ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Type ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Type ((~>) Symbol Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) Type ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) Type ((~>) Symbol Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -165,9 +165,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) Type ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Type ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) Type ((~>) Symbol Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -175,9 +175,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> Type -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Type) :: (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Type) :: (~>) Symbol Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -185,9 +185,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> Type -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Type) (a0123456789876543210 :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Type) (a0123456789876543210 :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow Type where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -212,49 +212,49 @@       toSing Singletons.Star.Int = SomeSing SInt       toSing Singletons.Star.String = SomeSing SString       toSing (Singletons.Star.Maybe (b :: Demote Type))-        = case toSing b :: SomeSing Type of {-            SomeSing c -> SomeSing (SMaybe c) }+        = case toSing b :: SomeSing Type of+            SomeSing c -> SomeSing (SMaybe c)       toSing (Singletons.Star.Vec (b :: Demote Type) (b :: Demote Nat))         = case               ((,) (toSing b :: SomeSing Type)) (toSing b :: SomeSing Nat)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SVec c) c) }+          of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SVec c) c)     instance (SDecide Type, SDecide Nat) => SDecide Type where       (%~) SNat SNat = Proved Refl-      (%~) SNat SInt = Disproved (\ x -> case x of)-      (%~) SNat SString = Disproved (\ x -> case x of)-      (%~) SNat (SMaybe _) = Disproved (\ x -> case x of)-      (%~) SNat (SVec _ _) = Disproved (\ x -> case x of)-      (%~) SInt SNat = Disproved (\ x -> case x of)+      (%~) SNat SInt = Disproved (\ x -> case x of {})+      (%~) SNat SString = Disproved (\ x -> case x of {})+      (%~) SNat (SMaybe _) = Disproved (\ x -> case x of {})+      (%~) SNat (SVec _ _) = Disproved (\ x -> case x of {})+      (%~) SInt SNat = Disproved (\ x -> case x of {})       (%~) SInt SInt = Proved Refl-      (%~) SInt SString = Disproved (\ x -> case x of)-      (%~) SInt (SMaybe _) = Disproved (\ x -> case x of)-      (%~) SInt (SVec _ _) = Disproved (\ x -> case x of)-      (%~) SString SNat = Disproved (\ x -> case x of)-      (%~) SString SInt = Disproved (\ x -> case x of)+      (%~) SInt SString = Disproved (\ x -> case x of {})+      (%~) SInt (SMaybe _) = Disproved (\ x -> case x of {})+      (%~) SInt (SVec _ _) = Disproved (\ x -> case x of {})+      (%~) SString SNat = Disproved (\ x -> case x of {})+      (%~) SString SInt = Disproved (\ x -> case x of {})       (%~) SString SString = Proved Refl-      (%~) SString (SMaybe _) = Disproved (\ x -> case x of)-      (%~) SString (SVec _ _) = Disproved (\ x -> case x of)-      (%~) (SMaybe _) SNat = Disproved (\ x -> case x of)-      (%~) (SMaybe _) SInt = Disproved (\ x -> case x of)-      (%~) (SMaybe _) SString = Disproved (\ x -> case x of)+      (%~) SString (SMaybe _) = Disproved (\ x -> case x of {})+      (%~) SString (SVec _ _) = Disproved (\ x -> case x of {})+      (%~) (SMaybe _) SNat = Disproved (\ x -> case x of {})+      (%~) (SMaybe _) SInt = Disproved (\ x -> case x of {})+      (%~) (SMaybe _) SString = Disproved (\ x -> case x of {})       (%~) (SMaybe a) (SMaybe b)         = case ((%~) a) b of             Proved Refl -> Proved Refl             Disproved contra-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })-      (%~) (SMaybe _) (SVec _ _) = Disproved (\ x -> case x of)-      (%~) (SVec _ _) SNat = Disproved (\ x -> case x of)-      (%~) (SVec _ _) SInt = Disproved (\ x -> case x of)-      (%~) (SVec _ _) SString = Disproved (\ x -> case x of)-      (%~) (SVec _ _) (SMaybe _) = Disproved (\ x -> case x of)+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)+      (%~) (SMaybe _) (SVec _ _) = Disproved (\ x -> case x of {})+      (%~) (SVec _ _) SNat = Disproved (\ x -> case x of {})+      (%~) (SVec _ _) SInt = Disproved (\ x -> case x of {})+      (%~) (SVec _ _) SString = Disproved (\ x -> case x of {})+      (%~) (SVec _ _) (SMaybe _) = Disproved (\ x -> case x of {})       (%~) (SVec a a) (SVec b b)         = case ((,) (((%~) a) b)) (((%~) a) b) of             (,) (Proved Refl) (Proved Refl) -> Proved Refl             (,) (Disproved contra) _-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)             (,) _ (Disproved contra)-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)     instance (SDecide Type, SDecide Nat) =>              Data.Type.Equality.TestEquality (SRep :: Type -> Type) where       Data.Type.Equality.testEquality = decideEquality@@ -263,11 +263,10 @@       Data.Type.Coercion.testCoercion = decideCoercion     instance (SEq Type, SEq Nat) => SEq Type where       (%==) ::-        forall (t1 :: Type) (t2 :: Type).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun Type ((~>) Type Bool)-                                              -> Type) t1) t2)+        forall (t1 :: Type) (t2 :: Type). Sing t1+                                          -> Sing t2+                                             -> Sing (Apply (Apply ((==@#@$) :: TyFun Type ((~>) Type Bool)+                                                                                -> Type) t1) t2)       (%==) SNat SNat = STrue       (%==) SNat SInt = SFalse       (%==) SNat SString = SFalse@@ -312,11 +311,10 @@                sB_0123456789876543210)     instance (SOrd Type, SOrd Nat) => SOrd Type where       sCompare ::-        forall (t1 :: Type) (t2 :: Type).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun Type ((~>) Type Ordering)-                                                 -> Type) t1) t2)+        forall (t1 :: Type) (t2 :: Type). Sing t1+                                          -> Sing t2+                                             -> Sing (Apply (Apply (CompareSym0 :: TyFun Type ((~>) Type Ordering)+                                                                                   -> Type) t1) t2)       sCompare SNat SNat         = (applySing              ((applySing@@ -398,12 +396,13 @@       sCompare (SVec _ _) (SMaybe _) = SGT     instance (SShow Type, SShow Nat) => SShow Type where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: Type) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Type ((~>) Symbol Symbol))-                                                             -> Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: Type)+               (t3 :: Symbol). Sing t1+                               -> Sing t2+                                  -> Sing t3+                                     -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) Type ((~>) Symbol Symbol))+                                                                                    -> Type) t1) t2) t3)       sShowsPrec         _         SNat@@ -484,13 +483,22 @@       sing = SString     instance SingI n => SingI (Maybe (n :: Type)) where       sing = SMaybe sing+    instance SingI1 Maybe where+      liftSing = SMaybe     instance SingI (MaybeSym0 :: (~>) Type Type) where       sing = (singFun1 @MaybeSym0) SMaybe     instance (SingI n, SingI n) =>              SingI (Vec (n :: Type) (n :: Nat)) where       sing = (SVec sing) sing+    instance SingI n => SingI1 (Vec (n :: Type)) where+      liftSing = SVec sing+    instance SingI2 Vec where+      liftSing2 = SVec     instance SingI (VecSym0 :: (~>) Type ((~>) Nat Type)) where       sing = (singFun2 @VecSym0) SVec     instance SingI d =>              SingI (VecSym1 (d :: Type) :: (~>) Nat Type) where       sing = (singFun1 @(VecSym1 (d :: Type))) (SVec (sing @d))+    instance SingI1 (VecSym1 :: Type -> (~>) Nat Type) where+      liftSing (s :: Sing (d :: Type))+        = (singFun1 @(VecSym1 (d :: Type))) (SVec s)
tests/compile-and-dump/Singletons/T136.golden view
@@ -71,11 +71,12 @@       Case_0123456789876543210 i arg_0123456789876543210 'False = Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (==@#@$) i) (FromInteger 0))     type family Case_0123456789876543210 arg_0123456789876543210 t where       Case_0123456789876543210 arg_0123456789876543210 i = Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (<@#@$) i) (FromInteger 0))-    type ToEnum_0123456789876543210 :: GHC.Types.Nat -> [Bool]-    type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: [Bool] where+    type ToEnum_0123456789876543210 :: GHC.Num.Natural.Natural+                                       -> [Bool]+    type family ToEnum_0123456789876543210 (a :: GHC.Num.Natural.Natural) :: [Bool] where       ToEnum_0123456789876543210 arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 arg_0123456789876543210-    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat [Bool]-    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat [Bool]+    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural [Bool]+    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural [Bool]       where         ToEnum_0123456789876543210Sym0KindInference :: SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>                                                        ToEnum_0123456789876543210Sym0 a0123456789876543210@@ -83,16 +84,18 @@     instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())-    type ToEnum_0123456789876543210Sym1 :: GHC.Types.Nat -> [Bool]-    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: [Bool] where+    type ToEnum_0123456789876543210Sym1 :: GHC.Num.Natural.Natural+                                           -> [Bool]+    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: [Bool] where       ToEnum_0123456789876543210Sym1 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210-    type FromEnum_0123456789876543210 :: [Bool] -> GHC.Types.Nat-    type family FromEnum_0123456789876543210 (a :: [Bool]) :: GHC.Types.Nat where+    type FromEnum_0123456789876543210 :: [Bool]+                                         -> GHC.Num.Natural.Natural+    type family FromEnum_0123456789876543210 (a :: [Bool]) :: GHC.Num.Natural.Natural where       FromEnum_0123456789876543210 '[] = FromInteger 0       FromEnum_0123456789876543210 ('(:) 'False as) = Apply (Apply (*@#@$) (FromInteger 2)) (Apply FromEnumSym0 as)       FromEnum_0123456789876543210 ('(:) 'True as) = Apply (Apply (+@#@$) (FromInteger 1)) (Apply (Apply (*@#@$) (FromInteger 2)) (Apply FromEnumSym0 as))-    type FromEnum_0123456789876543210Sym0 :: (~>) [Bool] GHC.Types.Nat-    data FromEnum_0123456789876543210Sym0 :: (~>) [Bool] GHC.Types.Nat+    type FromEnum_0123456789876543210Sym0 :: (~>) [Bool] GHC.Num.Natural.Natural+    data FromEnum_0123456789876543210Sym0 :: (~>) [Bool] GHC.Num.Natural.Natural       where         FromEnum_0123456789876543210Sym0KindInference :: SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>                                                          FromEnum_0123456789876543210Sym0 a0123456789876543210@@ -100,8 +103,9 @@     instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())-    type FromEnum_0123456789876543210Sym1 :: [Bool] -> GHC.Types.Nat-    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: [Bool]) :: GHC.Types.Nat where+    type FromEnum_0123456789876543210Sym1 :: [Bool]+                                             -> GHC.Num.Natural.Natural+    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: [Bool]) :: GHC.Num.Natural.Natural where       FromEnum_0123456789876543210Sym1 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210     instance PEnum [Bool] where       type Succ a = Apply Succ_0123456789876543210Sym0 a@@ -110,25 +114,21 @@       type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a     instance SEnum [Bool] where       sSucc ::-        forall (t :: [Bool]).-        Sing t-        -> Sing (Apply (SuccSym0 :: TyFun [Bool] [Bool]-                                    -> GHC.Types.Type) t)+        forall (t :: [Bool]). Sing t+                              -> Sing (Apply (SuccSym0 :: TyFun [Bool] [Bool]+                                                          -> GHC.Types.Type) t)       sPred ::-        forall (t :: [Bool]).-        Sing t-        -> Sing (Apply (PredSym0 :: TyFun [Bool] [Bool]-                                    -> GHC.Types.Type) t)+        forall (t :: [Bool]). Sing t+                              -> Sing (Apply (PredSym0 :: TyFun [Bool] [Bool]+                                                          -> GHC.Types.Type) t)       sToEnum ::-        forall (t :: GHC.Types.Nat).-        Sing t-        -> Sing (Apply (ToEnumSym0 :: TyFun GHC.Types.Nat [Bool]-                                      -> GHC.Types.Type) t)+        forall (t :: GHC.Num.Natural.Natural). Sing t+                                               -> Sing (Apply (ToEnumSym0 :: TyFun GHC.Num.Natural.Natural [Bool]+                                                                             -> GHC.Types.Type) t)       sFromEnum ::-        forall (t :: [Bool]).-        Sing t-        -> Sing (Apply (FromEnumSym0 :: TyFun [Bool] GHC.Types.Nat-                                        -> GHC.Types.Type) t)+        forall (t :: [Bool]). Sing t+                              -> Sing (Apply (FromEnumSym0 :: TyFun [Bool] GHC.Num.Natural.Natural+                                                              -> GHC.Types.Type) t)       sSucc SNil         = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) STrue)) SNil       sSucc (SCons SFalse (sAs :: Sing as))@@ -145,7 +145,7 @@       sToEnum (sArg_0123456789876543210 :: Sing arg_0123456789876543210)         = (id              @(Sing (Case_0123456789876543210 arg_0123456789876543210 arg_0123456789876543210)))-            (case sArg_0123456789876543210 of {+            (case sArg_0123456789876543210 of                (sI :: Sing i)                  -> (id                        @(Sing (Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (<@#@$) i) (FromInteger 0)))))@@ -165,7 +165,7 @@                                    SFalse                                      -> (applySing ((singFun1 @SuccSym0) sSucc))                                           ((applySing ((singFun1 @ToEnumSym0) sToEnum))-                                             ((applySing ((singFun1 @PredSym0) sPred)) sI)))) })+                                             ((applySing ((singFun1 @PredSym0) sPred)) sI)))))       sFromEnum SNil = sFromInteger (sing :: Sing 0)       sFromEnum (SCons SFalse (sAs :: Sing as))         = (applySing
tests/compile-and-dump/Singletons/T136b.golden view
@@ -17,7 +17,7 @@     type family MethSym1 (a0123456789876543210 :: a) :: a where       MethSym1 a0123456789876543210 = Meth a0123456789876543210     class PC a where-      type Meth (arg :: a) :: a+      type family Meth (arg :: a) :: a     class SC a where       sMeth :: forall (t :: a). Sing t -> Sing (Apply MethSym0 t :: a)     instance SC a => SingI (MethSym0 :: (~>) a a) where@@ -48,8 +48,7 @@       type Meth a = Apply Meth_0123456789876543210Sym0 a     instance SC Bool where       sMeth ::-        forall (t :: Bool).-        Sing t-        -> Sing (Apply (MethSym0 :: TyFun Bool Bool -> GHC.Types.Type) t)+        forall (t :: Bool). Sing t+                            -> Sing (Apply (MethSym0 :: TyFun Bool Bool -> GHC.Types.Type) t)       sMeth (sA_0123456789876543210 :: Sing a_0123456789876543210)         = (applySing ((singFun1 @NotSym0) sNot)) sA_0123456789876543210
tests/compile-and-dump/Singletons/T145.golden view
@@ -25,14 +25,17 @@     type family ColSym2 (a0123456789876543210 :: f a) (a0123456789876543210 :: a) :: Bool where       ColSym2 a0123456789876543210 a0123456789876543210 = Col a0123456789876543210 a0123456789876543210     class PColumn (f :: Type -> Type) where-      type Col (arg :: f a) (arg :: a) :: Bool+      type family Col (arg :: f a) (arg :: a) :: Bool     class SColumn (f :: Type -> Type) where       sCol ::-        forall a (t :: f a) (t :: a).-        Sing t -> Sing t -> Sing (Apply (Apply ColSym0 t) t :: Bool)+        forall a (t :: f a) (t :: a). Sing t+                                      -> Sing t -> Sing (Apply (Apply ColSym0 t) t :: Bool)     instance SColumn f =>              SingI (ColSym0 :: (~>) (f a) ((~>) a Bool)) where       sing = (singFun2 @ColSym0) sCol     instance (SColumn f, SingI d) =>              SingI (ColSym1 (d :: f a) :: (~>) a Bool) where       sing = (singFun1 @(ColSym1 (d :: f a))) (sCol (sing @d))+    instance SColumn f => SingI1 (ColSym1 :: f a -> (~>) a Bool) where+      liftSing (s :: Sing (d :: f a))+        = (singFun1 @(ColSym1 (d :: f a))) (sCol s)
tests/compile-and-dump/Singletons/T150.golden view
@@ -9,7 +9,7 @@                   (!) :: Vec n a -> Fin n -> a                   VCons x _ ! FZ = x                   VCons _ xs ! FS n = xs ! n-                  VNil ! n = case n of+                  VNil ! n = case n of {}                   mapVec :: (a -> b) -> Vec n a -> Vec n b                   mapVec _ VNil = VNil                   mapVec f (VCons x xs) = VCons (f x) (mapVec f xs)@@ -56,7 +56,7 @@     (!) :: Vec n a -> Fin n -> a     (!) (VCons x _) FZ = x     (!) (VCons _ xs) (FS n) = (xs ! n)-    (!) VNil n = case n of+    (!) VNil n = case n of {}     mapVec :: (a -> b) -> Vec n a -> Vec n b     mapVec _ VNil = VNil     mapVec f (VCons x xs) = (VCons (f x)) ((mapVec f) xs)@@ -263,24 +263,25 @@     type family HeadVec (a :: Vec ('Succ n) a) :: a where       HeadVec (VCons x _) = x     sTransitivity ::-      forall a b c (t :: Equal a b) (t :: Equal b c).-      Sing t-      -> Sing t -> Sing (Apply (Apply TransitivitySym0 t) t :: Equal a c)+      forall a b c (t :: Equal a b) (t :: Equal b c). Sing t+                                                      -> Sing t+                                                         -> Sing (Apply (Apply TransitivitySym0 t) t :: Equal a c)     sSymmetry ::-      forall a b (t :: Equal a b).-      Sing t -> Sing (Apply SymmetrySym0 t :: Equal b a)+      forall a b (t :: Equal a b). Sing t+                                   -> Sing (Apply SymmetrySym0 t :: Equal b a)     sMapVec ::-      forall a b n (t :: (~>) a b) (t :: Vec n a).-      Sing t -> Sing t -> Sing (Apply (Apply MapVecSym0 t) t :: Vec n b)+      forall a b n (t :: (~>) a b) (t :: Vec n a). Sing t+                                                   -> Sing t+                                                      -> Sing (Apply (Apply MapVecSym0 t) t :: Vec n b)     (%!) ::-      forall n a (t :: Vec n a) (t :: Fin n).-      Sing t -> Sing t -> Sing (Apply (Apply (!@#@$) t) t :: a)+      forall n a (t :: Vec n a) (t :: Fin n). Sing t+                                              -> Sing t -> Sing (Apply (Apply (!@#@$) t) t :: a)     sTailVec ::-      forall n a (t :: Vec ('Succ n) a).-      Sing t -> Sing (Apply TailVecSym0 t :: Vec n a)+      forall n a (t :: Vec ('Succ n) a). Sing t+                                         -> Sing (Apply TailVecSym0 t :: Vec n a)     sHeadVec ::-      forall n a (t :: Vec ('Succ n) a).-      Sing t -> Sing (Apply HeadVecSym0 t :: a)+      forall n a (t :: Vec ('Succ n) a). Sing t+                                         -> Sing (Apply HeadVecSym0 t :: a)     sTransitivity SReflexive SReflexive = SReflexive     sSymmetry SReflexive = SReflexive     sMapVec _ SVNil = SVNil@@ -292,7 +293,7 @@     (%!) (SVCons _ (sXs :: Sing xs)) (SFS (sN :: Sing n))       = (applySing ((applySing ((singFun2 @(!@#@$)) (%!))) sXs)) sN     (%!) SVNil (sN :: Sing n)-      = (id @(Sing (Case_0123456789876543210 n n :: a))) (case sN of)+      = (id @(Sing (Case_0123456789876543210 n n :: a))) (case sN of {})     sTailVec (SVCons _ (sXs :: Sing xs)) = sXs     sHeadVec (SVCons (sX :: Sing x) _) = sX     instance SingI (TransitivitySym0 :: (~>) (Equal a b) ((~>) (Equal b c) (Equal a c))) where@@ -302,6 +303,10 @@       sing         = (singFun1 @(TransitivitySym1 (d :: Equal a b)))             (sTransitivity (sing @d))+    instance SingI1 (TransitivitySym1 :: Equal a b+                                         -> (~>) (Equal b c) (Equal a c)) where+      liftSing (s :: Sing (d :: Equal a b))+        = (singFun1 @(TransitivitySym1 (d :: Equal a b))) (sTransitivity s)     instance SingI (SymmetrySym0 :: (~>) (Equal a b) (Equal b a)) where       sing = (singFun1 @SymmetrySym0) sSymmetry     instance SingI (MapVecSym0 :: (~>) ((~>) a b) ((~>) (Vec n a) (Vec n b))) where@@ -309,11 +314,18 @@     instance SingI d =>              SingI (MapVecSym1 (d :: (~>) a b) :: (~>) (Vec n a) (Vec n b)) where       sing = (singFun1 @(MapVecSym1 (d :: (~>) a b))) (sMapVec (sing @d))+    instance SingI1 (MapVecSym1 :: (~>) a b+                                   -> (~>) (Vec n a) (Vec n b)) where+      liftSing (s :: Sing (d :: (~>) a b))+        = (singFun1 @(MapVecSym1 (d :: (~>) a b))) (sMapVec s)     instance SingI ((!@#@$) :: (~>) (Vec n a) ((~>) (Fin n) a)) where       sing = (singFun2 @(!@#@$)) (%!)     instance SingI d =>              SingI ((!@#@$$) (d :: Vec n a) :: (~>) (Fin n) a) where       sing = (singFun1 @((!@#@$$) (d :: Vec n a))) ((%!) (sing @d))+    instance SingI1 ((!@#@$$) :: Vec n a -> (~>) (Fin n) a) where+      liftSing (s :: Sing (d :: Vec n a))+        = (singFun1 @((!@#@$$) (d :: Vec n a))) ((%!) s)     instance SingI (TailVecSym0 :: (~>) (Vec ('Succ n) a) (Vec n a)) where       sing = (singFun1 @TailVecSym0) sTailVec     instance SingI (HeadVecSym0 :: (~>) (Vec ('Succ n) a) a) where@@ -351,6 +363,8 @@       sing = SFZ     instance SingI n => SingI (FS (n :: Fin n)) where       sing = SFS sing+    instance SingI1 FS where+      liftSing = SFS     instance SingI (FSSym0 :: (~>) (Fin n) (Fin ('Succ n))) where       sing = (singFun1 @FSSym0) SFS     instance SingI MkFoo1 where@@ -362,11 +376,19 @@     instance (SingI n, SingI n) =>              SingI (VCons (n :: a) (n :: Vec n a)) where       sing = (SVCons sing) sing+    instance SingI n => SingI1 (VCons (n :: a)) where+      liftSing = SVCons sing+    instance SingI2 VCons where+      liftSing2 = SVCons     instance SingI (VConsSym0 :: (~>) a ((~>) (Vec n a) (Vec ('Succ n) a))) where       sing = (singFun2 @VConsSym0) SVCons     instance SingI d =>              SingI (VConsSym1 (d :: a) :: (~>) (Vec n a) (Vec ('Succ n) a)) where       sing = (singFun1 @(VConsSym1 (d :: a))) (SVCons (sing @d))+    instance SingI1 (VConsSym1 :: a+                                  -> (~>) (Vec n a) (Vec ('Succ n) a)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(VConsSym1 (d :: a))) (SVCons s)     instance SingI Reflexive where       sing = SReflexive     instance SingI HNil where@@ -374,12 +396,22 @@     instance (SingI n, SingI n) =>              SingI (HCons (n :: x) (n :: HList xs)) where       sing = (SHCons sing) sing+    instance SingI n => SingI1 (HCons (n :: x)) where+      liftSing = SHCons sing+    instance SingI2 HCons where+      liftSing2 = SHCons     instance SingI (HConsSym0 :: (~>) x ((~>) (HList xs) (HList ('(:) x xs)))) where       sing = (singFun2 @HConsSym0) SHCons     instance SingI d =>              SingI (HConsSym1 (d :: x) :: (~>) (HList xs) (HList ('(:) x xs))) where       sing = (singFun1 @(HConsSym1 (d :: x))) (SHCons (sing @d))+    instance SingI1 (HConsSym1 :: x+                                  -> (~>) (HList xs) (HList ('(:) x xs))) where+      liftSing (s :: Sing (d :: x))+        = (singFun1 @(HConsSym1 (d :: x))) (SHCons s)     instance SingI n => SingI (Obj (n :: a)) where       sing = SObj sing+    instance SingI1 Obj where+      liftSing = SObj     instance SingI (ObjSym0 :: (~>) a Obj) where       sing = (singFun1 @ObjSym0) SObj
tests/compile-and-dump/Singletons/T159.golden view
@@ -118,15 +118,11 @@       fromSing ((:%&&) b b) = ((:&&) (fromSing b)) (fromSing b)       toSing N1 = SomeSing SN1       toSing (C1 (b :: Demote T0) (b :: Demote T1))-        = case-              ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T1)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SC1 c) c) }+        = case ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T1) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SC1 c) c)       toSing ((:&&) (b :: Demote T0) (b :: Demote T1))-        = case-              ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T1)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%&&) c) c) }+        = case ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T1) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%&&) c) c)     infixr 5 `SC1`     infixr 5 :%&&     instance SingI 'N1 where@@ -134,18 +130,32 @@     instance (SingI n, SingI n) =>              SingI ('C1 (n :: T0) (n :: T1)) where       sing = (SC1 sing) sing+    instance SingI n => SingI1 ('C1 (n :: T0)) where+      liftSing = SC1 sing+    instance SingI2 'C1 where+      liftSing2 = SC1     instance SingI (C1Sym0 :: (~>) T0 ((~>) T1 T1)) where       sing = (singFun2 @C1Sym0) SC1     instance SingI d => SingI (C1Sym1 (d :: T0) :: (~>) T1 T1) where       sing = (singFun1 @(C1Sym1 (d :: T0))) (SC1 (sing @d))+    instance SingI1 (C1Sym1 :: T0 -> (~>) T1 T1) where+      liftSing (s :: Sing (d :: T0))+        = (singFun1 @(C1Sym1 (d :: T0))) (SC1 s)     instance (SingI n, SingI n) =>              SingI ('(:&&) (n :: T0) (n :: T1)) where       sing = ((:%&&) sing) sing+    instance SingI n => SingI1 ('(:&&) (n :: T0)) where+      liftSing = (:%&&) sing+    instance SingI2 '(:&&) where+      liftSing2 = (:%&&)     instance SingI ((:&&@#@$) :: (~>) T0 ((~>) T1 T1)) where       sing = (singFun2 @(:&&@#@$)) (:%&&)     instance SingI d =>              SingI ((:&&@#@$$) (d :: T0) :: (~>) T1 T1) where       sing = (singFun1 @((:&&@#@$$) (d :: T0))) ((:%&&) (sing @d))+    instance SingI1 ((:&&@#@$$) :: T0 -> (~>) T1 T1) where+      liftSing (s :: Sing (d :: T0))+        = (singFun1 @((:&&@#@$$) (d :: T0))) ((:%&&) s) Singletons/T159.hs:(0,0)-(0,0): Splicing declarations     singletons       [d| infixr 5 :||@@ -220,28 +230,38 @@       fromSing ((:%||) b b) = ((:||) (fromSing b)) (fromSing b)       toSing N2 = SomeSing SN2       toSing (C2 (b :: Demote T0) (b :: Demote T2))-        = case-              ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T2)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SC2 c) c) }+        = case ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T2) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SC2 c) c)       toSing ((:||) (b :: Demote T0) (b :: Demote T2))-        = case-              ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T2)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%||) c) c) }+        = case ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T2) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%||) c) c)     instance SingI N2 where       sing = SN2     instance (SingI n, SingI n) => SingI (C2 (n :: T0) (n :: T2)) where       sing = (SC2 sing) sing+    instance SingI n => SingI1 (C2 (n :: T0)) where+      liftSing = SC2 sing+    instance SingI2 C2 where+      liftSing2 = SC2     instance SingI (C2Sym0 :: (~>) T0 ((~>) T2 T2)) where       sing = (singFun2 @C2Sym0) SC2     instance SingI d => SingI (C2Sym1 (d :: T0) :: (~>) T2 T2) where       sing = (singFun1 @(C2Sym1 (d :: T0))) (SC2 (sing @d))+    instance SingI1 (C2Sym1 :: T0 -> (~>) T2 T2) where+      liftSing (s :: Sing (d :: T0))+        = (singFun1 @(C2Sym1 (d :: T0))) (SC2 s)     instance (SingI n, SingI n) =>              SingI ((:||) (n :: T0) (n :: T2)) where       sing = ((:%||) sing) sing+    instance SingI n => SingI1 ((:||) (n :: T0)) where+      liftSing = (:%||) sing+    instance SingI2 (:||) where+      liftSing2 = (:%||)     instance SingI ((:||@#@$) :: (~>) T0 ((~>) T2 T2)) where       sing = (singFun2 @(:||@#@$)) (:%||)     instance SingI d =>              SingI ((:||@#@$$) (d :: T0) :: (~>) T2 T2) where       sing = (singFun1 @((:||@#@$$) (d :: T0))) ((:%||) (sing @d))+    instance SingI1 ((:||@#@$$) :: T0 -> (~>) T2 T2) where+      liftSing (s :: Sing (d :: T0))+        = (singFun1 @((:||@#@$$) (d :: T0))) ((:%||) s)
tests/compile-and-dump/Singletons/T160.golden view
@@ -38,8 +38,8 @@     type family Foo (a :: a) :: a where       Foo x = Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)     sFoo ::-      forall a (t :: a).-      (SNum a, SEq a) => Sing t -> Sing (Apply FooSym0 t :: a)+      forall a (t :: a). (SNum a, SEq a) =>+                         Sing t -> Sing (Apply FooSym0 t :: a)     sFoo (sX :: Sing x)       = let           sScrutinee_0123456789876543210 ::
tests/compile-and-dump/Singletons/T163.golden view
@@ -34,14 +34,18 @@       fromSing (SL b) = L (fromSing b)       fromSing (SR b) = R (fromSing b)       toSing (L (b :: Demote a))-        = case toSing b :: SomeSing a of { SomeSing c -> SomeSing (SL c) }+        = case toSing b :: SomeSing a of SomeSing c -> SomeSing (SL c)       toSing (R (b :: Demote b))-        = case toSing b :: SomeSing b of { SomeSing c -> SomeSing (SR c) }+        = case toSing b :: SomeSing b of SomeSing c -> SomeSing (SR c)     instance SingI n => SingI (L (n :: a)) where       sing = SL sing+    instance SingI1 L where+      liftSing = SL     instance SingI (LSym0 :: (~>) a ((+) a b)) where       sing = (singFun1 @LSym0) SL     instance SingI n => SingI (R (n :: b)) where       sing = SR sing+    instance SingI1 R where+      liftSing = SR     instance SingI (RSym0 :: (~>) b ((+) a b)) where       sing = (singFun1 @RSym0) SR
tests/compile-and-dump/Singletons/T166.golden view
@@ -1,37 +1,37 @@ Singletons/T166.hs:(0,0)-(0,0): Splicing declarations     singletonsOnly       [d| class Foo a where-            foosPrec :: Nat -> a -> [Bool] -> [Bool]+            foosPrec :: Natural -> a -> [Bool] -> [Bool]             foo :: a -> [Bool]             foo x s = foosPrec 0 x s |]   ======>-    type FoosPrecSym0 :: forall a.-                         (~>) Nat ((~>) a ((~>) [Bool] [Bool]))-    data FoosPrecSym0 :: (~>) Nat ((~>) a ((~>) [Bool] [Bool]))+    type FoosPrecSym0 :: forall a. (~>) Natural ((~>) a ((~>) [Bool] [Bool]))+    data FoosPrecSym0 :: (~>) Natural ((~>) a ((~>) [Bool] [Bool]))       where         FoosPrecSym0KindInference :: SameKind (Apply FoosPrecSym0 arg) (FoosPrecSym1 arg) =>                                      FoosPrecSym0 a0123456789876543210     type instance Apply FoosPrecSym0 a0123456789876543210 = FoosPrecSym1 a0123456789876543210     instance SuppressUnusedWarnings FoosPrecSym0 where       suppressUnusedWarnings = snd (((,) FoosPrecSym0KindInference) ())-    type FoosPrecSym1 :: forall a. Nat -> (~>) a ((~>) [Bool] [Bool])-    data FoosPrecSym1 (a0123456789876543210 :: Nat) :: (~>) a ((~>) [Bool] [Bool])+    type FoosPrecSym1 :: forall a. Natural+                                   -> (~>) a ((~>) [Bool] [Bool])+    data FoosPrecSym1 (a0123456789876543210 :: Natural) :: (~>) a ((~>) [Bool] [Bool])       where         FoosPrecSym1KindInference :: SameKind (Apply (FoosPrecSym1 a0123456789876543210) arg) (FoosPrecSym2 a0123456789876543210 arg) =>                                      FoosPrecSym1 a0123456789876543210 a0123456789876543210     type instance Apply (FoosPrecSym1 a0123456789876543210) a0123456789876543210 = FoosPrecSym2 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (FoosPrecSym1 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) FoosPrecSym1KindInference) ())-    type FoosPrecSym2 :: forall a. Nat -> a -> (~>) [Bool] [Bool]-    data FoosPrecSym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: a) :: (~>) [Bool] [Bool]+    type FoosPrecSym2 :: forall a. Natural -> a -> (~>) [Bool] [Bool]+    data FoosPrecSym2 (a0123456789876543210 :: Natural) (a0123456789876543210 :: a) :: (~>) [Bool] [Bool]       where         FoosPrecSym2KindInference :: SameKind (Apply (FoosPrecSym2 a0123456789876543210 a0123456789876543210) arg) (FoosPrecSym3 a0123456789876543210 a0123456789876543210 arg) =>                                      FoosPrecSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210     type instance Apply (FoosPrecSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = FoosPrec a0123456789876543210 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (FoosPrecSym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) FoosPrecSym2KindInference) ())-    type FoosPrecSym3 :: forall a. Nat -> a -> [Bool] -> [Bool]-    type family FoosPrecSym3 (a0123456789876543210 :: Nat) (a0123456789876543210 :: a) (a0123456789876543210 :: [Bool]) :: [Bool] where+    type FoosPrecSym3 :: forall a. Natural -> a -> [Bool] -> [Bool]+    type family FoosPrecSym3 (a0123456789876543210 :: Natural) (a0123456789876543210 :: a) (a0123456789876543210 :: [Bool]) :: [Bool] where       FoosPrecSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = FoosPrec a0123456789876543210 a0123456789876543210 a0123456789876543210     type FooSym0 :: forall a. (~>) a [Bool]     data FooSym0 :: (~>) a [Bool]@@ -80,44 +80,59 @@     type family Foo_0123456789876543210Sym1 (a0123456789876543210 :: a) :: [Bool] where       Foo_0123456789876543210Sym1 a0123456789876543210 = Foo_0123456789876543210 a0123456789876543210     class PFoo a where-      type FoosPrec (arg :: Nat) (arg :: a) (arg :: [Bool]) :: [Bool]-      type Foo (arg :: a) :: [Bool]+      type family FoosPrec (arg :: Natural) (arg :: a) (arg :: [Bool]) :: [Bool]+      type family Foo (arg :: a) :: [Bool]       type Foo a = Apply Foo_0123456789876543210Sym0 a     class SFoo a where       sFoosPrec ::-        forall (t :: Nat) (t :: a) (t :: [Bool]).-        Sing t-        -> Sing t-           -> Sing t-              -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])+        forall (t :: Natural) (t :: a) (t :: [Bool]). Sing t+                                                      -> Sing t+                                                         -> Sing t+                                                            -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])       sFoo :: forall (t :: a). Sing t -> Sing (Apply FooSym0 t :: [Bool])       default sFoo ::-                forall (t :: a).-                ((Apply FooSym0 t :: [Bool])-                 ~ Apply Foo_0123456789876543210Sym0 t) =>-                Sing t -> Sing (Apply FooSym0 t :: [Bool])+                forall (t :: a). ((Apply FooSym0 t :: [Bool])+                                  ~ Apply Foo_0123456789876543210Sym0 t) =>+                                 Sing t -> Sing (Apply FooSym0 t :: [Bool])       sFoo (sX :: Sing x)         = (singFun1 @(Apply Lambda_0123456789876543210Sym0 x))             (\ sS-               -> case sS of {+               -> case sS of                     (_ :: Sing s)                       -> (applySing                             ((applySing                                 ((applySing ((singFun3 @FoosPrecSym0) sFoosPrec))                                    (sFromInteger (sing :: Sing 0))))                                sX))-                           sS })+                           sS)     instance SFoo a =>-             SingI (FoosPrecSym0 :: (~>) Nat ((~>) a ((~>) [Bool] [Bool]))) where+             SingI (FoosPrecSym0 :: (~>) Natural ((~>) a ((~>) [Bool] [Bool]))) where       sing = (singFun3 @FoosPrecSym0) sFoosPrec     instance (SFoo a, SingI d) =>-             SingI (FoosPrecSym1 (d :: Nat) :: (~>) a ((~>) [Bool] [Bool])) where-      sing = (singFun2 @(FoosPrecSym1 (d :: Nat))) (sFoosPrec (sing @d))+             SingI (FoosPrecSym1 (d :: Natural) :: (~>) a ((~>) [Bool] [Bool])) where+      sing+        = (singFun2 @(FoosPrecSym1 (d :: Natural))) (sFoosPrec (sing @d))+    instance SFoo a =>+             SingI1 (FoosPrecSym1 :: Natural+                                     -> (~>) a ((~>) [Bool] [Bool])) where+      liftSing (s :: Sing (d :: Natural))+        = (singFun2 @(FoosPrecSym1 (d :: Natural))) (sFoosPrec s)     instance (SFoo a, SingI d, SingI d) =>-             SingI (FoosPrecSym2 (d :: Nat) (d :: a) :: (~>) [Bool] [Bool]) where+             SingI (FoosPrecSym2 (d :: Natural) (d :: a) :: (~>) [Bool] [Bool]) where       sing-        = (singFun1 @(FoosPrecSym2 (d :: Nat) (d :: a)))+        = (singFun1 @(FoosPrecSym2 (d :: Natural) (d :: a)))             ((sFoosPrec (sing @d)) (sing @d))+    instance (SFoo a, SingI d) =>+             SingI1 (FoosPrecSym2 (d :: Natural) :: a+                                                    -> (~>) [Bool] [Bool]) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(FoosPrecSym2 (d :: Natural) (d :: a)))+            ((sFoosPrec (sing @d)) s)+    instance SFoo a =>+             SingI2 (FoosPrecSym2 :: Natural -> a -> (~>) [Bool] [Bool]) where+      liftSing2 (s :: Sing (d :: Natural)) (s :: Sing (d :: a))+        = (singFun1 @(FoosPrecSym2 (d :: Natural) (d :: a)))+            ((sFoosPrec s) s)     instance SFoo a => SingI (FooSym0 :: (~>) a [Bool]) where       sing = (singFun1 @FooSym0) sFoo 
tests/compile-and-dump/Singletons/T166.hs view
@@ -13,7 +13,7 @@  $(singletonsOnly [d|   class Foo a where-    foosPrec :: Nat -> a -> [Bool] -> [Bool]+    foosPrec :: Natural -> a -> [Bool] -> [Bool]     foo      :: a -> [Bool]      foo        x s = foosPrec 0 x s
tests/compile-and-dump/Singletons/T167.golden view
@@ -1,40 +1,40 @@ Singletons/T167.hs:(0,0)-(0,0): Splicing declarations     singletonsOnly       [d| class Foo a where-            foosPrec :: Nat -> a -> DiffList+            foosPrec :: Natural -> a -> DiffList             fooList :: a -> DiffList             fooList = undefined                      instance Foo a => Foo [a] where             foosPrec _ = fooList |]   ======>-    type FoosPrecSym0 :: forall a.-                         (~>) Nat ((~>) a ((~>) [Bool] [Bool]))-    data FoosPrecSym0 :: (~>) Nat ((~>) a ((~>) [Bool] [Bool]))+    type FoosPrecSym0 :: forall a. (~>) Natural ((~>) a ((~>) [Bool] [Bool]))+    data FoosPrecSym0 :: (~>) Natural ((~>) a ((~>) [Bool] [Bool]))       where         FoosPrecSym0KindInference :: SameKind (Apply FoosPrecSym0 arg) (FoosPrecSym1 arg) =>                                      FoosPrecSym0 a0123456789876543210     type instance Apply FoosPrecSym0 a0123456789876543210 = FoosPrecSym1 a0123456789876543210     instance SuppressUnusedWarnings FoosPrecSym0 where       suppressUnusedWarnings = snd (((,) FoosPrecSym0KindInference) ())-    type FoosPrecSym1 :: forall a. Nat -> (~>) a ((~>) [Bool] [Bool])-    data FoosPrecSym1 (a0123456789876543210 :: Nat) :: (~>) a ((~>) [Bool] [Bool])+    type FoosPrecSym1 :: forall a. Natural+                                   -> (~>) a ((~>) [Bool] [Bool])+    data FoosPrecSym1 (a0123456789876543210 :: Natural) :: (~>) a ((~>) [Bool] [Bool])       where         FoosPrecSym1KindInference :: SameKind (Apply (FoosPrecSym1 a0123456789876543210) arg) (FoosPrecSym2 a0123456789876543210 arg) =>                                      FoosPrecSym1 a0123456789876543210 a0123456789876543210     type instance Apply (FoosPrecSym1 a0123456789876543210) a0123456789876543210 = FoosPrecSym2 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (FoosPrecSym1 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) FoosPrecSym1KindInference) ())-    type FoosPrecSym2 :: forall a. Nat -> a -> (~>) [Bool] [Bool]-    data FoosPrecSym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: a) :: (~>) [Bool] [Bool]+    type FoosPrecSym2 :: forall a. Natural -> a -> (~>) [Bool] [Bool]+    data FoosPrecSym2 (a0123456789876543210 :: Natural) (a0123456789876543210 :: a) :: (~>) [Bool] [Bool]       where         FoosPrecSym2KindInference :: SameKind (Apply (FoosPrecSym2 a0123456789876543210 a0123456789876543210) arg) (FoosPrecSym3 a0123456789876543210 a0123456789876543210 arg) =>                                      FoosPrecSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210     type instance Apply (FoosPrecSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = FoosPrec a0123456789876543210 a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (FoosPrecSym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) FoosPrecSym2KindInference) ())-    type FoosPrecSym3 :: forall a. Nat -> a -> [Bool] -> [Bool]-    type family FoosPrecSym3 (a0123456789876543210 :: Nat) (a0123456789876543210 :: a) (a0123456789876543210 :: [Bool]) :: [Bool] where+    type FoosPrecSym3 :: forall a. Natural -> a -> [Bool] -> [Bool]+    type family FoosPrecSym3 (a0123456789876543210 :: Natural) (a0123456789876543210 :: a) (a0123456789876543210 :: [Bool]) :: [Bool] where       FoosPrecSym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = FoosPrec a0123456789876543210 a0123456789876543210 a0123456789876543210     type FooListSym0 :: forall a. (~>) a ((~>) [Bool] [Bool])     data FooListSym0 :: (~>) a ((~>) [Bool] [Bool])@@ -80,14 +80,15 @@     type family FooList_0123456789876543210Sym2 (a0123456789876543210 :: a) (a0123456789876543210 :: [Bool]) :: [Bool] where       FooList_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = FooList_0123456789876543210 a0123456789876543210 a0123456789876543210     class PFoo a where-      type FoosPrec (arg :: Nat) (arg :: a) (arg :: [Bool]) :: [Bool]-      type FooList (arg :: a) (arg :: [Bool]) :: [Bool]+      type family FoosPrec (arg :: Natural) (arg :: a) (arg :: [Bool]) :: [Bool]+      type family FooList (arg :: a) (arg :: [Bool]) :: [Bool]       type FooList a a = Apply (Apply FooList_0123456789876543210Sym0 a) a-    type FoosPrec_0123456789876543210 :: Nat -> [a] -> [Bool] -> [Bool]-    type family FoosPrec_0123456789876543210 (a :: Nat) (a :: [a]) (a :: [Bool]) :: [Bool] where+    type FoosPrec_0123456789876543210 :: Natural+                                         -> [a] -> [Bool] -> [Bool]+    type family FoosPrec_0123456789876543210 (a :: Natural) (a :: [a]) (a :: [Bool]) :: [Bool] where       FoosPrec_0123456789876543210 _ a_0123456789876543210 a_0123456789876543210 = Apply (Apply FooListSym0 a_0123456789876543210) a_0123456789876543210-    type FoosPrec_0123456789876543210Sym0 :: (~>) Nat ((~>) [a] ((~>) [Bool] [Bool]))-    data FoosPrec_0123456789876543210Sym0 :: (~>) Nat ((~>) [a] ((~>) [Bool] [Bool]))+    type FoosPrec_0123456789876543210Sym0 :: (~>) Natural ((~>) [a] ((~>) [Bool] [Bool]))+    data FoosPrec_0123456789876543210Sym0 :: (~>) Natural ((~>) [a] ((~>) [Bool] [Bool]))       where         FoosPrec_0123456789876543210Sym0KindInference :: SameKind (Apply FoosPrec_0123456789876543210Sym0 arg) (FoosPrec_0123456789876543210Sym1 arg) =>                                                          FoosPrec_0123456789876543210Sym0 a0123456789876543210@@ -95,9 +96,9 @@     instance SuppressUnusedWarnings FoosPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) FoosPrec_0123456789876543210Sym0KindInference) ())-    type FoosPrec_0123456789876543210Sym1 :: Nat+    type FoosPrec_0123456789876543210Sym1 :: Natural                                              -> (~>) [a] ((~>) [Bool] [Bool])-    data FoosPrec_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) [a] ((~>) [Bool] [Bool])+    data FoosPrec_0123456789876543210Sym1 (a0123456789876543210 :: Natural) :: (~>) [a] ((~>) [Bool] [Bool])       where         FoosPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (FoosPrec_0123456789876543210Sym1 a0123456789876543210) arg) (FoosPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                          FoosPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -105,9 +106,9 @@     instance SuppressUnusedWarnings (FoosPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) FoosPrec_0123456789876543210Sym1KindInference) ())-    type FoosPrec_0123456789876543210Sym2 :: Nat+    type FoosPrec_0123456789876543210Sym2 :: Natural                                              -> [a] -> (~>) [Bool] [Bool]-    data FoosPrec_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: [a]) :: (~>) [Bool] [Bool]+    data FoosPrec_0123456789876543210Sym2 (a0123456789876543210 :: Natural) (a0123456789876543210 :: [a]) :: (~>) [Bool] [Bool]       where         FoosPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (FoosPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                          FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -115,38 +116,37 @@     instance SuppressUnusedWarnings (FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) FoosPrec_0123456789876543210Sym2KindInference) ())-    type FoosPrec_0123456789876543210Sym3 :: Nat+    type FoosPrec_0123456789876543210Sym3 :: Natural                                              -> [a] -> [Bool] -> [Bool]-    type family FoosPrec_0123456789876543210Sym3 (a0123456789876543210 :: Nat) (a0123456789876543210 :: [a]) (a0123456789876543210 :: [Bool]) :: [Bool] where+    type family FoosPrec_0123456789876543210Sym3 (a0123456789876543210 :: Natural) (a0123456789876543210 :: [a]) (a0123456789876543210 :: [Bool]) :: [Bool] where       FoosPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = FoosPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PFoo [a] where       type FoosPrec a a a = Apply (Apply (Apply FoosPrec_0123456789876543210Sym0 a) a) a     class SFoo a where       sFoosPrec ::-        forall (t :: Nat) (t :: a) (t :: [Bool]).-        Sing t-        -> Sing t-           -> Sing t-              -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])+        forall (t :: Natural) (t :: a) (t :: [Bool]). Sing t+                                                      -> Sing t+                                                         -> Sing t+                                                            -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])       sFooList ::-        forall (t :: a) (t :: [Bool]).-        Sing t -> Sing t -> Sing (Apply (Apply FooListSym0 t) t :: [Bool])+        forall (t :: a) (t :: [Bool]). Sing t+                                       -> Sing t -> Sing (Apply (Apply FooListSym0 t) t :: [Bool])       default sFooList ::-                forall (t :: a) (t :: [Bool]).-                ((Apply (Apply FooListSym0 t) t :: [Bool])-                 ~ Apply (Apply FooList_0123456789876543210Sym0 t) t) =>-                Sing t -> Sing t -> Sing (Apply (Apply FooListSym0 t) t :: [Bool])+                forall (t :: a)+                       (t :: [Bool]). ((Apply (Apply FooListSym0 t) t :: [Bool])+                                       ~ Apply (Apply FooList_0123456789876543210Sym0 t) t) =>+                                      Sing t+                                      -> Sing t -> Sing (Apply (Apply FooListSym0 t) t :: [Bool])       sFooList         (sA_0123456789876543210 :: Sing a_0123456789876543210)         (sA_0123456789876543210 :: Sing a_0123456789876543210)         = (sUndefined sA_0123456789876543210) sA_0123456789876543210     instance SFoo a => SFoo [a] where       sFoosPrec ::-        forall (t :: Nat) (t :: [a]) (t :: [Bool]).-        Sing t-        -> Sing t-           -> Sing t-              -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])+        forall (t :: Natural) (t :: [a]) (t :: [Bool]). Sing t+                                                        -> Sing t+                                                           -> Sing t+                                                              -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])       sFoosPrec         _         (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -156,19 +156,40 @@                 sA_0123456789876543210))             sA_0123456789876543210     instance SFoo a =>-             SingI (FoosPrecSym0 :: (~>) Nat ((~>) a ((~>) [Bool] [Bool]))) where+             SingI (FoosPrecSym0 :: (~>) Natural ((~>) a ((~>) [Bool] [Bool]))) where       sing = (singFun3 @FoosPrecSym0) sFoosPrec     instance (SFoo a, SingI d) =>-             SingI (FoosPrecSym1 (d :: Nat) :: (~>) a ((~>) [Bool] [Bool])) where-      sing = (singFun2 @(FoosPrecSym1 (d :: Nat))) (sFoosPrec (sing @d))+             SingI (FoosPrecSym1 (d :: Natural) :: (~>) a ((~>) [Bool] [Bool])) where+      sing+        = (singFun2 @(FoosPrecSym1 (d :: Natural))) (sFoosPrec (sing @d))+    instance SFoo a =>+             SingI1 (FoosPrecSym1 :: Natural+                                     -> (~>) a ((~>) [Bool] [Bool])) where+      liftSing (s :: Sing (d :: Natural))+        = (singFun2 @(FoosPrecSym1 (d :: Natural))) (sFoosPrec s)     instance (SFoo a, SingI d, SingI d) =>-             SingI (FoosPrecSym2 (d :: Nat) (d :: a) :: (~>) [Bool] [Bool]) where+             SingI (FoosPrecSym2 (d :: Natural) (d :: a) :: (~>) [Bool] [Bool]) where       sing-        = (singFun1 @(FoosPrecSym2 (d :: Nat) (d :: a)))+        = (singFun1 @(FoosPrecSym2 (d :: Natural) (d :: a)))             ((sFoosPrec (sing @d)) (sing @d))+    instance (SFoo a, SingI d) =>+             SingI1 (FoosPrecSym2 (d :: Natural) :: a+                                                    -> (~>) [Bool] [Bool]) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(FoosPrecSym2 (d :: Natural) (d :: a)))+            ((sFoosPrec (sing @d)) s)     instance SFoo a =>+             SingI2 (FoosPrecSym2 :: Natural -> a -> (~>) [Bool] [Bool]) where+      liftSing2 (s :: Sing (d :: Natural)) (s :: Sing (d :: a))+        = (singFun1 @(FoosPrecSym2 (d :: Natural) (d :: a)))+            ((sFoosPrec s) s)+    instance SFoo a =>              SingI (FooListSym0 :: (~>) a ((~>) [Bool] [Bool])) where       sing = (singFun2 @FooListSym0) sFooList     instance (SFoo a, SingI d) =>              SingI (FooListSym1 (d :: a) :: (~>) [Bool] [Bool]) where       sing = (singFun1 @(FooListSym1 (d :: a))) (sFooList (sing @d))+    instance SFoo a =>+             SingI1 (FooListSym1 :: a -> (~>) [Bool] [Bool]) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(FooListSym1 (d :: a))) (sFooList s)
tests/compile-and-dump/Singletons/T167.hs view
@@ -17,7 +17,7 @@  $(singletonsOnly [d|   class Foo a where-    foosPrec :: Nat -> a -> DiffList+    foosPrec :: Natural -> a -> DiffList     fooList  :: a -> DiffList     fooList = undefined 
tests/compile-and-dump/Singletons/T172.golden view
@@ -1,41 +1,46 @@ Singletons/T172.hs:(0,0)-(0,0): Splicing declarations     singletonsOnly-      [d| ($>) :: Nat -> Nat -> Nat+      [d| ($>) :: Natural -> Natural -> Natural           ($>) = (+) |]   ======>-    type ($>@#@$) :: (~>) Nat ((~>) Nat Nat)-    data ($>@#@$) :: (~>) Nat ((~>) Nat Nat)+    type ($>@#@$) :: (~>) Natural ((~>) Natural Natural)+    data ($>@#@$) :: (~>) Natural ((~>) Natural Natural)       where         (:$>@#@$###) :: SameKind (Apply ($>@#@$) arg) (($>@#@$$) arg) =>                         ($>@#@$) a0123456789876543210     type instance Apply ($>@#@$) a0123456789876543210 = ($>@#@$$) a0123456789876543210     instance SuppressUnusedWarnings ($>@#@$) where       suppressUnusedWarnings = snd (((,) (:$>@#@$###)) ())-    type ($>@#@$$) :: Nat -> (~>) Nat Nat-    data ($>@#@$$) (a0123456789876543210 :: Nat) :: (~>) Nat Nat+    type ($>@#@$$) :: Natural -> (~>) Natural Natural+    data ($>@#@$$) (a0123456789876543210 :: Natural) :: (~>) Natural Natural       where         (:$>@#@$$###) :: SameKind (Apply (($>@#@$$) a0123456789876543210) arg) (($>@#@$$$) a0123456789876543210 arg) =>                          ($>@#@$$) a0123456789876543210 a0123456789876543210     type instance Apply (($>@#@$$) a0123456789876543210) a0123456789876543210 = ($>) a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (($>@#@$$) a0123456789876543210) where       suppressUnusedWarnings = snd (((,) (:$>@#@$$###)) ())-    type ($>@#@$$$) :: Nat -> Nat -> Nat-    type family ($>@#@$$$) (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) :: Nat where+    type ($>@#@$$$) :: Natural -> Natural -> Natural+    type family ($>@#@$$$) (a0123456789876543210 :: Natural) (a0123456789876543210 :: Natural) :: Natural where       ($>@#@$$$) a0123456789876543210 a0123456789876543210 = ($>) a0123456789876543210 a0123456789876543210-    type ($>) :: Nat -> Nat -> Nat-    type family ($>) (a :: Nat) (a :: Nat) :: Nat where+    type ($>) :: Natural -> Natural -> Natural+    type family ($>) (a :: Natural) (a :: Natural) :: Natural where       ($>) a_0123456789876543210 a_0123456789876543210 = Apply (Apply (+@#@$) a_0123456789876543210) a_0123456789876543210     (%$>) ::-      forall (t :: Nat) (t :: Nat).-      Sing t -> Sing t -> Sing (Apply (Apply ($>@#@$) t) t :: Nat)+      forall (t :: Natural) (t :: Natural). Sing t+                                            -> Sing t+                                               -> Sing (Apply (Apply ($>@#@$) t) t :: Natural)     (%$>)       (sA_0123456789876543210 :: Sing a_0123456789876543210)       (sA_0123456789876543210 :: Sing a_0123456789876543210)       = (applySing            ((applySing ((singFun2 @(+@#@$)) (%+))) sA_0123456789876543210))           sA_0123456789876543210-    instance SingI (($>@#@$) :: (~>) Nat ((~>) Nat Nat)) where+    instance SingI (($>@#@$) :: (~>) Natural ((~>) Natural Natural)) where       sing = (singFun2 @($>@#@$)) (%$>)     instance SingI d =>-             SingI (($>@#@$$) (d :: Nat) :: (~>) Nat Nat) where-      sing = (singFun1 @(($>@#@$$) (d :: Nat))) ((%$>) (sing @d))+             SingI (($>@#@$$) (d :: Natural) :: (~>) Natural Natural) where+      sing = (singFun1 @(($>@#@$$) (d :: Natural))) ((%$>) (sing @d))+    instance SingI1 (($>@#@$$) :: Natural+                                  -> (~>) Natural Natural) where+      liftSing (s :: Sing (d :: Natural))+        = (singFun1 @(($>@#@$$) (d :: Natural))) ((%$>) s)
tests/compile-and-dump/Singletons/T172.hs view
@@ -13,6 +13,6 @@ import Prelude.Singletons  $(singletonsOnly [d|-  ($>) :: Nat -> Nat -> Nat+  ($>) :: Natural -> Natural -> Natural   ($>) = (+)   |])
tests/compile-and-dump/Singletons/T175.golden view
@@ -28,7 +28,7 @@     type family BazSym0 :: a where       BazSym0 = Baz     class PFoo a where-      type Baz :: a+      type family Baz :: a     type Quux1Sym0 :: forall a. a     type family Quux1Sym0 :: a where       Quux1Sym0 = Quux1@@ -39,7 +39,7 @@     type family Quux1_0123456789876543210Sym0 :: a where       Quux1_0123456789876543210Sym0 = Quux1_0123456789876543210     class PBar1 a where-      type Quux1 :: a+      type family Quux1 :: a       type Quux1 = Quux1_0123456789876543210Sym0     class PBar2 a     sQuux2 :: forall a. SBar2 a => Sing (Quux2Sym0 :: a)
tests/compile-and-dump/Singletons/T176.golden view
@@ -95,8 +95,8 @@     type family Baz1Sym0 :: a where       Baz1Sym0 = Baz1     class PFoo1 a where-      type Bar1 (arg :: a) (arg :: (~>) a b) :: b-      type Baz1 :: a+      type family Bar1 (arg :: a) (arg :: (~>) a b) :: b+      type family Baz1 :: a     type Bar2Sym0 :: forall a b. (~>) a ((~>) b b)     data Bar2Sym0 :: (~>) a ((~>) b b)       where@@ -120,38 +120,38 @@     type family Baz2Sym0 :: a where       Baz2Sym0 = Baz2     class PFoo2 a where-      type Bar2 (arg :: a) (arg :: b) :: b-      type Baz2 :: a+      type family Bar2 (arg :: a) (arg :: b) :: b+      type family Baz2 :: a     sQuux2 ::-      forall a (t :: a).-      SFoo2 a => Sing t -> Sing (Apply Quux2Sym0 t :: a)+      forall a (t :: a). SFoo2 a =>+                         Sing t -> Sing (Apply Quux2Sym0 t :: a)     sQuux1 ::-      forall a (t :: a).-      SFoo1 a => Sing t -> Sing (Apply Quux1Sym0 t :: a)+      forall a (t :: a). SFoo1 a =>+                         Sing t -> Sing (Apply Quux1Sym0 t :: a)     sQuux2 (sX :: Sing x)       = (applySing ((applySing ((singFun2 @Bar2Sym0) sBar2)) sX)) sBaz2     sQuux1 (sX :: Sing x)       = (applySing ((applySing ((singFun2 @Bar1Sym0) sBar1)) sX))           ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))              (\ sArg_0123456789876543210-                -> case sArg_0123456789876543210 of {+                -> case sArg_0123456789876543210 of                      (_ :: Sing arg_0123456789876543210)                        -> (id                              @(Sing (Case_0123456789876543210 arg_0123456789876543210 x arg_0123456789876543210)))-                            (case sArg_0123456789876543210 of { _ -> sBaz1 }) }))+                            (case sArg_0123456789876543210 of _ -> sBaz1)))     instance SFoo2 a => SingI (Quux2Sym0 :: (~>) a a) where       sing = (singFun1 @Quux2Sym0) sQuux2     instance SFoo1 a => SingI (Quux1Sym0 :: (~>) a a) where       sing = (singFun1 @Quux1Sym0) sQuux1     class SFoo1 a where       sBar1 ::-        forall b (t :: a) (t :: (~>) a b).-        Sing t -> Sing t -> Sing (Apply (Apply Bar1Sym0 t) t :: b)+        forall b (t :: a) (t :: (~>) a b). Sing t+                                           -> Sing t -> Sing (Apply (Apply Bar1Sym0 t) t :: b)       sBaz1 :: Sing (Baz1Sym0 :: a)     class SFoo2 a where       sBar2 ::-        forall b (t :: a) (t :: b).-        Sing t -> Sing t -> Sing (Apply (Apply Bar2Sym0 t) t :: b)+        forall b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Bar2Sym0 t) t :: b)       sBaz2 :: Sing (Baz2Sym0 :: a)     instance SFoo1 a =>              SingI (Bar1Sym0 :: (~>) a ((~>) ((~>) a b) b)) where@@ -159,8 +159,15 @@     instance (SFoo1 a, SingI d) =>              SingI (Bar1Sym1 (d :: a) :: (~>) ((~>) a b) b) where       sing = (singFun1 @(Bar1Sym1 (d :: a))) (sBar1 (sing @d))+    instance SFoo1 a =>+             SingI1 (Bar1Sym1 :: a -> (~>) ((~>) a b) b) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Bar1Sym1 (d :: a))) (sBar1 s)     instance SFoo2 a => SingI (Bar2Sym0 :: (~>) a ((~>) b b)) where       sing = (singFun2 @Bar2Sym0) sBar2     instance (SFoo2 a, SingI d) =>              SingI (Bar2Sym1 (d :: a) :: (~>) b b) where       sing = (singFun1 @(Bar2Sym1 (d :: a))) (sBar2 (sing @d))+    instance SFoo2 a => SingI1 (Bar2Sym1 :: a -> (~>) b b) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Bar2Sym1 (d :: a))) (sBar2 s)
tests/compile-and-dump/Singletons/T178.golden view
@@ -99,14 +99,14 @@       Compare_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210     instance POrd Occ where       type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a-    type ShowsPrec_0123456789876543210 :: Nat+    type ShowsPrec_0123456789876543210 :: Natural                                           -> Occ -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210 (a :: Nat) (a :: Occ) (a :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210 (a :: Natural) (a :: Occ) (a :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210 _ Str a_0123456789876543210 = Apply (Apply ShowStringSym0 "Str") a_0123456789876543210       ShowsPrec_0123456789876543210 _ Opt a_0123456789876543210 = Apply (Apply ShowStringSym0 "Opt") a_0123456789876543210       ShowsPrec_0123456789876543210 _ Many a_0123456789876543210 = Apply (Apply ShowStringSym0 "Many") a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) Nat ((~>) Occ ((~>) Symbol Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) Nat ((~>) Occ ((~>) Symbol Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) Natural ((~>) Occ ((~>) Symbol Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) Natural ((~>) Occ ((~>) Symbol Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -114,9 +114,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: Nat+    type ShowsPrec_0123456789876543210Sym1 :: Natural                                               -> (~>) Occ ((~>) Symbol Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Occ ((~>) Symbol Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: Natural) :: (~>) Occ ((~>) Symbol Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -124,9 +124,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: Nat+    type ShowsPrec_0123456789876543210Sym2 :: Natural                                               -> Occ -> (~>) Symbol Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Occ) :: (~>) Symbol Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: Natural) (a0123456789876543210 :: Occ) :: (~>) Symbol Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -134,9 +134,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: Nat+    type ShowsPrec_0123456789876543210Sym3 :: Natural                                               -> Occ -> Symbol -> Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Occ) (a0123456789876543210 :: Symbol) :: Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: Natural) (a0123456789876543210 :: Occ) (a0123456789876543210 :: Symbol) :: Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow Occ where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -158,11 +158,10 @@       toSing Many = SomeSing SMany     instance SEq Occ where       (%==) ::-        forall (t1 :: Occ) (t2 :: Occ).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun Occ ((~>) Occ Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: Occ) (t2 :: Occ). Sing t1+                                        -> Sing t2+                                           -> Sing (Apply (Apply ((==@#@$) :: TyFun Occ ((~>) Occ Bool)+                                                                              -> GHC.Types.Type) t1) t2)       (%==) SStr SStr = STrue       (%==) SStr SOpt = SFalse       (%==) SStr SMany = SFalse@@ -174,11 +173,10 @@       (%==) SMany SMany = STrue     instance SOrd Occ where       sCompare ::-        forall (t1 :: Occ) (t2 :: Occ).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun Occ ((~>) Occ Ordering)-                                                 -> GHC.Types.Type) t1) t2)+        forall (t1 :: Occ) (t2 :: Occ). Sing t1+                                        -> Sing t2+                                           -> Sing (Apply (Apply (CompareSym0 :: TyFun Occ ((~>) Occ Ordering)+                                                                                 -> GHC.Types.Type) t1) t2)       sCompare SStr SStr         = (applySing              ((applySing@@ -208,12 +206,11 @@       sCompare SMany SOpt = SGT     instance SShow Occ where       sShowsPrec ::-        forall (t1 :: Nat) (t2 :: Occ) (t3 :: Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun Nat ((~>) Occ ((~>) Symbol Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: Natural) (t2 :: Occ) (t3 :: Symbol). Sing t1+                                                           -> Sing t2+                                                              -> Sing t3+                                                                 -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun Natural ((~>) Occ ((~>) Symbol Symbol))+                                                                                                                -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         _         SStr@@ -240,13 +237,13 @@             sA_0123456789876543210     instance SDecide Occ where       (%~) SStr SStr = Proved Refl-      (%~) SStr SOpt = Disproved (\ x -> case x of)-      (%~) SStr SMany = Disproved (\ x -> case x of)-      (%~) SOpt SStr = Disproved (\ x -> case x of)+      (%~) SStr SOpt = Disproved (\ x -> case x of {})+      (%~) SStr SMany = Disproved (\ x -> case x of {})+      (%~) SOpt SStr = Disproved (\ x -> case x of {})       (%~) SOpt SOpt = Proved Refl-      (%~) SOpt SMany = Disproved (\ x -> case x of)-      (%~) SMany SStr = Disproved (\ x -> case x of)-      (%~) SMany SOpt = Disproved (\ x -> case x of)+      (%~) SOpt SMany = Disproved (\ x -> case x of {})+      (%~) SMany SStr = Disproved (\ x -> case x of {})+      (%~) SMany SOpt = Disproved (\ x -> case x of {})       (%~) SMany SMany = Proved Refl     instance Data.Type.Equality.TestEquality (SOcc :: Occ                                                       -> GHC.Types.Type) where
tests/compile-and-dump/Singletons/T183.golden view
@@ -3,7 +3,7 @@       [d| f1 (x :: Maybe Bool) = (x :: Maybe Bool)           f2 (x :: Maybe a) = (x :: Maybe a)           f3 (Just a :: Maybe Bool) = "hi"-          g x = case Just x of { (Just y :: Maybe Bool) -> (y :: Bool) }+          g x = case Just x of (Just y :: Maybe Bool) -> (y :: Bool)           foo1 :: Maybe a -> a           foo1 (Just x :: Maybe a) = (x :: a)           foo2, foo3 :: forall a. Maybe a -> a@@ -15,8 +15,8 @@           foo5 (Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a))             = Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a)           foo6 (Just x :: Maybe (Maybe a))-            = case x :: Maybe a of {-                (Just (y :: a) :: Maybe a) -> Just (Just (y :: a) :: Maybe a) }+            = case x :: Maybe a of+                (Just (y :: a) :: Maybe a) -> Just (Just (y :: a) :: Maybe a)           foo7 :: a -> b -> a           foo7 (x :: a) (_ :: b) = (x :: a)           foo8 :: forall a. Maybe a -> Maybe a@@ -32,7 +32,7 @@     f1 (x :: Maybe Bool) = x :: Maybe Bool     f2 (x :: Maybe a) = x :: Maybe a     f3 (Just a :: Maybe Bool) = "hi"-    g x = case Just x of { (Just y :: Maybe Bool) -> y :: Bool }+    g x = case Just x of (Just y :: Maybe Bool) -> y :: Bool     foo1 :: Maybe a -> a     foo1 (Just x :: Maybe a) = x :: a     foo2 :: forall a. Maybe a -> a@@ -46,8 +46,8 @@     foo5 (Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a))       = Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a)     foo6 (Just x :: Maybe (Maybe a))-      = case x :: Maybe a of {-          (Just (y :: a) :: Maybe a) -> Just (Just (y :: a) :: Maybe a) }+      = case x :: Maybe a of+          (Just (y :: a) :: Maybe a) -> Just (Just (y :: a) :: Maybe a)     foo7 :: a -> b -> a     foo7 (x :: a) (_ :: b) = x :: a     foo8 :: forall a. Maybe a -> Maybe a@@ -342,20 +342,20 @@       F1 (x :: Maybe Bool) = x :: Maybe Bool     sFoo9 :: forall a (t :: a). Sing t -> Sing (Apply Foo9Sym0 t :: a)     sFoo8 ::-      forall a (t :: Maybe a).-      Sing t -> Sing (Apply Foo8Sym0 t :: Maybe a)+      forall a (t :: Maybe a). Sing t+                               -> Sing (Apply Foo8Sym0 t :: Maybe a)     sFoo7 ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply Foo7Sym0 t) t :: a)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Foo7Sym0 t) t :: a)     sFoo6 ::-      forall a (t :: Maybe (Maybe a)).-      Sing t -> Sing (Apply Foo6Sym0 t :: Maybe (Maybe a))+      forall a (t :: Maybe (Maybe a)). Sing t+                                       -> Sing (Apply Foo6Sym0 t :: Maybe (Maybe a))     sFoo5 ::-      forall a (t :: Maybe (Maybe a)).-      Sing t -> Sing (Apply Foo5Sym0 t :: Maybe (Maybe a))+      forall a (t :: Maybe (Maybe a)). Sing t+                                       -> Sing (Apply Foo5Sym0 t :: Maybe (Maybe a))     sFoo4 ::-      forall a b (t :: (a, b)).-      Sing t -> Sing (Apply Foo4Sym0 t :: (b, a))+      forall a b (t :: (a, b)). Sing t+                                -> Sing (Apply Foo4Sym0 t :: (b, a))     sFoo3 ::       forall a (t :: Maybe a). Sing t -> Sing (Apply Foo3Sym0 t :: a)     sFoo2 ::@@ -367,26 +367,25 @@     sF2 :: forall arg. Sing arg -> Sing (Apply F2Sym0 arg)     sF1 :: forall arg. Sing arg -> Sing (Apply F1Sym0 arg)     sFoo9 (sX :: Sing x)-      = case sX :: Sing x of {+      = case sX :: Sing x of           (_ :: Sing (x :: a))             -> let                  sG ::-                   forall b (t :: a) (t :: b).-                   Sing t-                   -> Sing t-                      -> Sing (Apply (Apply (Let0123456789876543210GSym1 x) t) t :: a)+                   forall b (t :: a) (t :: b). Sing t+                                               -> Sing t+                                                  -> Sing (Apply (Apply (Let0123456789876543210GSym1 x) t) t :: a)                  sG (sY :: Sing y) _ = sY                in                  (applySing                     ((applySing ((singFun2 @(Let0123456789876543210GSym1 x)) sG)) sX))-                   STuple0 }+                   STuple0     sFoo8       (SJust (sWild_0123456789876543210 :: Sing wild_0123456789876543210))       = case             ((,) (sWild_0123456789876543210 :: Sing wild_0123456789876543210))               (SJust                  (sWild_0123456789876543210 :: Sing wild_0123456789876543210))-        of {+        of           (,) (_ :: Sing (wild_0123456789876543210 :: a))               (_ :: Sing ('Just (wild_0123456789876543210 :: a) :: Maybe a))             -> let@@ -397,26 +396,26 @@                        (sWild_0123456789876543210 ::                           Sing (wild_0123456789876543210 :: a)) ::                        Sing (Apply JustSym0 (wild_0123456789876543210 :: a) :: Maybe a)-               in sX }+               in sX     sFoo8 SNothing-      = case SNothing of {+      = case SNothing of           (_ :: Sing ('Nothing :: Maybe a))             -> let                  sX :: Sing @_ Let0123456789876543210XSym0                  sX = SNothing :: Sing (NothingSym0 :: Maybe a)-               in sX }+               in sX     sFoo7       (sX :: Sing x)       (sWild_0123456789876543210 :: Sing wild_0123456789876543210)       = case             ((,) (sX :: Sing x))               (sWild_0123456789876543210 :: Sing wild_0123456789876543210)-        of {+        of           (,) (_ :: Sing (x :: a))               (_ :: Sing (wild_0123456789876543210 :: b))-            -> sX :: Sing (x :: a) }+            -> sX :: Sing (x :: a)     sFoo6 (SJust (sX :: Sing x))-      = case SJust (sX :: Sing x) of {+      = case SJust (sX :: Sing x) of           (_ :: Sing ('Just x :: Maybe (Maybe a)))             -> let                  sScrutinee_0123456789876543210 ::@@ -425,50 +424,50 @@                in                  (id                     @(Sing (Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x) :: Maybe (Maybe a))))-                   (case sScrutinee_0123456789876543210 of {+                   (case sScrutinee_0123456789876543210 of                       SJust (sY :: Sing y)-                        -> case ((,) (sY :: Sing y)) (SJust (sY :: Sing y)) of {+                        -> case ((,) (sY :: Sing y)) (SJust (sY :: Sing y)) of                              (,) (_ :: Sing (y :: a)) (_ :: Sing ('Just (y :: a) :: Maybe a))                                -> (applySing ((singFun1 @JustSym0) SJust))                                     ((applySing ((singFun1 @JustSym0) SJust))                                        (sY :: Sing (y :: a)) ::-                                       Sing (Apply JustSym0 (y :: a) :: Maybe a)) } }) }+                                       Sing (Apply JustSym0 (y :: a) :: Maybe a)))     sFoo5 (SJust (SJust (sX :: Sing x)))       = case             (((,,) (sX :: Sing x)) (SJust (sX :: Sing x)))               (SJust (SJust (sX :: Sing x)))-        of {+        of           (,,) (_ :: Sing (x :: a)) (_ :: Sing ('Just (x :: a) :: Maybe a))                (_ :: Sing ('Just ('Just (x :: a) :: Maybe a) :: Maybe (Maybe a)))             -> (applySing ((singFun1 @JustSym0) SJust))                  ((applySing ((singFun1 @JustSym0) SJust)) (sX :: Sing (x :: a)) ::                     Sing (Apply JustSym0 (x :: a) :: Maybe a)) ::-                 Sing (Apply JustSym0 (Apply JustSym0 (x :: a) :: Maybe a) :: Maybe (Maybe a)) }+                 Sing (Apply JustSym0 (Apply JustSym0 (x :: a) :: Maybe a) :: Maybe (Maybe a))     sFoo4 (sA_0123456789876543210 :: Sing a_0123456789876543210)       = (applySing            ((singFun1                @(Apply Lambda_0123456789876543210Sym0 a_0123456789876543210))               (\ sArg_0123456789876543210-                 -> case sArg_0123456789876543210 of {+                 -> case sArg_0123456789876543210 of                       (_ :: Sing arg_0123456789876543210)                         -> (id                               @(Sing (Case_0123456789876543210 arg_0123456789876543210 a_0123456789876543210 arg_0123456789876543210)))-                             (case sArg_0123456789876543210 of {+                             (case sArg_0123456789876543210 of                                 STuple2 (sX :: Sing x) (sY :: Sing y)-                                  -> case ((,) (sX :: Sing x)) (sY :: Sing y) of {+                                  -> case ((,) (sX :: Sing x)) (sY :: Sing y) of                                        (,) (_ :: Sing (x :: a)) (_ :: Sing (y :: b))                                          -> (applySing                                                ((applySing ((singFun2 @Tuple2Sym0) STuple2))                                                   (sY :: Sing (y :: b))))-                                              (sX :: Sing (x :: a)) } }) })))+                                              (sX :: Sing (x :: a))))))           sA_0123456789876543210     sFoo3 (SJust (sX :: Sing x)) = sX :: Sing (x :: a)     sFoo2 (SJust (sX :: Sing x))-      = case SJust (sX :: Sing x) of {-          (_ :: Sing ('Just x :: Maybe a)) -> sX :: Sing (x :: a) }+      = case SJust (sX :: Sing x) of+          (_ :: Sing ('Just x :: Maybe a)) -> sX :: Sing (x :: a)     sFoo1 (SJust (sX :: Sing x))-      = case SJust (sX :: Sing x) of {-          (_ :: Sing ('Just x :: Maybe a)) -> sX :: Sing (x :: a) }+      = case SJust (sX :: Sing x) of+          (_ :: Sing ('Just x :: Maybe a)) -> sX :: Sing (x :: a)     sG (sX :: Sing x)       = let           sScrutinee_0123456789876543210 ::@@ -478,19 +477,19 @@         in           (id              @(Sing (Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x))))-            (case sScrutinee_0123456789876543210 of {+            (case sScrutinee_0123456789876543210 of                SJust (sY :: Sing y)-                 -> case SJust (sY :: Sing y) of {-                      (_ :: Sing ('Just y :: Maybe Bool)) -> sY :: Sing (y :: Bool) } })+                 -> case SJust (sY :: Sing y) of+                      (_ :: Sing ('Just y :: Maybe Bool)) -> sY :: Sing (y :: Bool))     sF3 (SJust (sA :: Sing a))-      = case SJust (sA :: Sing a) of {-          (_ :: Sing ('Just a :: Maybe Bool)) -> sing :: Sing "hi" }+      = case SJust (sA :: Sing a) of+          (_ :: Sing ('Just a :: Maybe Bool)) -> sing :: Sing "hi"     sF2 (sX :: Sing x)-      = case sX :: Sing x of {-          (_ :: Sing (x :: Maybe a)) -> sX :: Sing (x :: Maybe a) }+      = case sX :: Sing x of+          (_ :: Sing (x :: Maybe a)) -> sX :: Sing (x :: Maybe a)     sF1 (sX :: Sing x)-      = case sX :: Sing x of {-          (_ :: Sing (x :: Maybe Bool)) -> sX :: Sing (x :: Maybe Bool) }+      = case sX :: Sing x of+          (_ :: Sing (x :: Maybe Bool)) -> sX :: Sing (x :: Maybe Bool)     instance SingI (Foo9Sym0 :: (~>) a a) where       sing = (singFun1 @Foo9Sym0) sFoo9     instance SingI (Foo8Sym0 :: (~>) (Maybe a) (Maybe a)) where@@ -499,6 +498,9 @@       sing = (singFun2 @Foo7Sym0) sFoo7     instance SingI d => SingI (Foo7Sym1 (d :: a) :: (~>) b a) where       sing = (singFun1 @(Foo7Sym1 (d :: a))) (sFoo7 (sing @d))+    instance SingI1 (Foo7Sym1 :: a -> (~>) b a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Foo7Sym1 (d :: a))) (sFoo7 s)     instance SingI (Foo6Sym0 :: (~>) (Maybe (Maybe a)) (Maybe (Maybe a))) where       sing = (singFun1 @Foo6Sym0) sFoo6     instance SingI (Foo5Sym0 :: (~>) (Maybe (Maybe a)) (Maybe (Maybe a))) where
tests/compile-and-dump/Singletons/T184.golden view
@@ -346,41 +346,42 @@     sTrues ::       forall (t :: [Bool]). Sing t -> Sing (Apply TruesSym0 t :: [Bool])     sCartProd ::-      forall a b (t :: [a]) (t :: [b]).-      Sing t-      -> Sing t -> Sing (Apply (Apply CartProdSym0 t) t :: [(a, b)])+      forall a b (t :: [a]) (t :: [b]). Sing t+                                        -> Sing t+                                           -> Sing (Apply (Apply CartProdSym0 t) t :: [(a, b)])     sZip' ::-      forall a b (t :: [a]) (t :: [b]).-      Sing t -> Sing t -> Sing (Apply (Apply Zip'Sym0 t) t :: [(a, b)])+      forall a b (t :: [a]) (t :: [b]). Sing t+                                        -> Sing t -> Sing (Apply (Apply Zip'Sym0 t) t :: [(a, b)])     sBoogie ::-      forall a (t :: Maybe a) (t :: Maybe Bool).-      Sing t -> Sing t -> Sing (Apply (Apply BoogieSym0 t) t :: Maybe a)+      forall a (t :: Maybe a) (t :: Maybe Bool). Sing t+                                                 -> Sing t+                                                    -> Sing (Apply (Apply BoogieSym0 t) t :: Maybe a)     sTrues (sXs :: Sing xs)       = (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sXs))           ((singFun1 @(Apply Lambda_0123456789876543210Sym0 xs))              (\ sX-                -> case sX of {+                -> case sX of                      (_ :: Sing x)                        -> (applySing                              ((applySing ((singFun2 @(>>@#@$)) (%>>)))                                 ((applySing ((singFun1 @GuardSym0) sGuard)) sX)))-                            ((applySing ((singFun1 @ReturnSym0) sReturn)) sX) }))+                            ((applySing ((singFun1 @ReturnSym0) sReturn)) sX)))     sCartProd (sXs :: Sing xs) (sYs :: Sing ys)       = (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sXs))           ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))              (\ sX-                -> case sX of {+                -> case sX of                      (_ :: Sing x)                        -> (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sYs))                             ((singFun1                                 @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) xs) ys))                                (\ sY-                                  -> case sY of {+                                  -> case sY of                                        (_ :: Sing y)                                          -> (applySing ((singFun1 @ReturnSym0) sReturn))                                               ((applySing                                                   ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX))-                                                 sY) })) }))+                                                 sY)))))     sZip' (sXs :: Sing xs) (sYs :: Sing ys)       = (applySing            ((applySing ((singFun2 @(>>=@#@$)) (%>>=)))@@ -389,43 +390,42 @@                      ((applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sXs))                         ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))                            (\ sX-                              -> case sX of {+                              -> case sX of                                    (_ :: Sing x)-                                     -> (applySing ((singFun1 @ReturnSym0) sReturn)) sX })))))+                                     -> (applySing ((singFun1 @ReturnSym0) sReturn)) sX)))))                  ((applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sYs))                     ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))                        (\ sY-                          -> case sY of {+                          -> case sY of                                (_ :: Sing y)-                                 -> (applySing ((singFun1 @ReturnSym0) sReturn)) sY }))))))+                                 -> (applySing ((singFun1 @ReturnSym0) sReturn)) sY))))))           ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))              (\ sArg_0123456789876543210-                -> case sArg_0123456789876543210 of {+                -> case sArg_0123456789876543210 of                      (_ :: Sing arg_0123456789876543210)                        -> (id                              @(Sing (Case_0123456789876543210 arg_0123456789876543210 xs ys arg_0123456789876543210)))-                            (case sArg_0123456789876543210 of {+                            (case sArg_0123456789876543210 of                                STuple2 (sX :: Sing x) (sY :: Sing y)                                  -> (applySing ((singFun1 @ReturnSym0) sReturn))                                       ((applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX))-                                         sY) }) }))+                                         sY))))     sBoogie (sMa :: Sing ma) (sMb :: Sing mb)       = (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sMa))           ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 ma) mb))              (\ sA-                -> case sA of {+                -> case sA of                      (_ :: Sing a)                        -> (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sMb))                             ((singFun1                                 @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) ma) mb))                                (\ sB-                                  -> case sB of {+                                  -> case sB of                                        (_ :: Sing b)                                          -> (applySing                                                ((applySing ((singFun2 @(>>@#@$)) (%>>)))                                                   ((applySing ((singFun1 @GuardSym0) sGuard)) sB)))-                                              ((applySing ((singFun1 @ReturnSym0) sReturn))-                                                 sA) })) }))+                                              ((applySing ((singFun1 @ReturnSym0) sReturn)) sA)))))     instance SingI (TruesSym0 :: (~>) [Bool] [Bool]) where       sing = (singFun1 @TruesSym0) sTrues     instance SingI (CartProdSym0 :: (~>) [a] ((~>) [b] [(a, b)])) where@@ -433,13 +433,23 @@     instance SingI d =>              SingI (CartProdSym1 (d :: [a]) :: (~>) [b] [(a, b)]) where       sing = (singFun1 @(CartProdSym1 (d :: [a]))) (sCartProd (sing @d))+    instance SingI1 (CartProdSym1 :: [a] -> (~>) [b] [(a, b)]) where+      liftSing (s :: Sing (d :: [a]))+        = (singFun1 @(CartProdSym1 (d :: [a]))) (sCartProd s)     instance SingI (Zip'Sym0 :: (~>) [a] ((~>) [b] [(a, b)])) where       sing = (singFun2 @Zip'Sym0) sZip'     instance SingI d =>              SingI (Zip'Sym1 (d :: [a]) :: (~>) [b] [(a, b)]) where       sing = (singFun1 @(Zip'Sym1 (d :: [a]))) (sZip' (sing @d))+    instance SingI1 (Zip'Sym1 :: [a] -> (~>) [b] [(a, b)]) where+      liftSing (s :: Sing (d :: [a]))+        = (singFun1 @(Zip'Sym1 (d :: [a]))) (sZip' s)     instance SingI (BoogieSym0 :: (~>) (Maybe a) ((~>) (Maybe Bool) (Maybe a))) where       sing = (singFun2 @BoogieSym0) sBoogie     instance SingI d =>              SingI (BoogieSym1 (d :: Maybe a) :: (~>) (Maybe Bool) (Maybe a)) where       sing = (singFun1 @(BoogieSym1 (d :: Maybe a))) (sBoogie (sing @d))+    instance SingI1 (BoogieSym1 :: Maybe a+                                   -> (~>) (Maybe Bool) (Maybe a)) where+      liftSing (s :: Sing (d :: Maybe a))+        = (singFun1 @(BoogieSym1 (d :: Maybe a))) (sBoogie s)
tests/compile-and-dump/Singletons/T187.golden view
@@ -65,26 +65,24 @@     type instance Sing @Empty = SEmpty     instance SingKind Empty where       type Demote Empty = Empty-      fromSing x = case x of-      toSing x = SomeSing (case x of)+      fromSing x = case x of {}+      toSing x = SomeSing (case x of {})     instance SEq Empty where       (%==) ::-        forall (t1 :: Empty) (t2 :: Empty).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun Empty ((~>) Empty Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: Empty) (t2 :: Empty). Sing t1+                                            -> Sing t2+                                               -> Sing (Apply (Apply ((==@#@$) :: TyFun Empty ((~>) Empty Bool)+                                                                                  -> GHC.Types.Type) t1) t2)       (%==) _ _ = STrue     instance SOrd Empty where       sCompare ::-        forall (t1 :: Empty) (t2 :: Empty).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun Empty ((~>) Empty Ordering)-                                                 -> GHC.Types.Type) t1) t2)+        forall (t1 :: Empty) (t2 :: Empty). Sing t1+                                            -> Sing t2+                                               -> Sing (Apply (Apply (CompareSym0 :: TyFun Empty ((~>) Empty Ordering)+                                                                                     -> GHC.Types.Type) t1) t2)       sCompare _ _ = SEQ     instance SDecide Empty where-      (%~) x _ = Proved (case x of)+      (%~) x _ = Proved (case x of {})     instance Data.Type.Equality.TestEquality (SEmpty :: Empty                                                         -> GHC.Types.Type) where       Data.Type.Equality.testEquality
tests/compile-and-dump/Singletons/T190.golden view
@@ -65,11 +65,11 @@     type family Case_0123456789876543210 n t where       Case_0123456789876543210 n 'True = TSym0       Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"-    type ToEnum_0123456789876543210 :: GHC.Types.Nat -> T-    type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: T where+    type ToEnum_0123456789876543210 :: GHC.Num.Natural.Natural -> T+    type family ToEnum_0123456789876543210 (a :: GHC.Num.Natural.Natural) :: T where       ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0))-    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat T-    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat T+    type ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural T+    data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural T       where         ToEnum_0123456789876543210Sym0KindInference :: SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>                                                        ToEnum_0123456789876543210Sym0 a0123456789876543210@@ -77,14 +77,14 @@     instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())-    type ToEnum_0123456789876543210Sym1 :: GHC.Types.Nat -> T-    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: T where+    type ToEnum_0123456789876543210Sym1 :: GHC.Num.Natural.Natural -> T+    type family ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: T where       ToEnum_0123456789876543210Sym1 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210-    type FromEnum_0123456789876543210 :: T -> GHC.Types.Nat-    type family FromEnum_0123456789876543210 (a :: T) :: GHC.Types.Nat where+    type FromEnum_0123456789876543210 :: T -> GHC.Num.Natural.Natural+    type family FromEnum_0123456789876543210 (a :: T) :: GHC.Num.Natural.Natural where       FromEnum_0123456789876543210 T = FromInteger 0-    type FromEnum_0123456789876543210Sym0 :: (~>) T GHC.Types.Nat-    data FromEnum_0123456789876543210Sym0 :: (~>) T GHC.Types.Nat+    type FromEnum_0123456789876543210Sym0 :: (~>) T GHC.Num.Natural.Natural+    data FromEnum_0123456789876543210Sym0 :: (~>) T GHC.Num.Natural.Natural       where         FromEnum_0123456789876543210Sym0KindInference :: SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>                                                          FromEnum_0123456789876543210Sym0 a0123456789876543210@@ -92,8 +92,9 @@     instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())-    type FromEnum_0123456789876543210Sym1 :: T -> GHC.Types.Nat-    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: T) :: GHC.Types.Nat where+    type FromEnum_0123456789876543210Sym1 :: T+                                             -> GHC.Num.Natural.Natural+    type family FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: T) :: GHC.Num.Natural.Natural where       FromEnum_0123456789876543210Sym1 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210     instance PEnum T where       type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a@@ -113,12 +114,12 @@     instance PBounded T where       type MinBound = MinBound_0123456789876543210Sym0       type MaxBound = MaxBound_0123456789876543210Sym0-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> T -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: T) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: T) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210 _ T a_0123456789876543210 = Apply (Apply ShowStringSym0 "T") a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -126,9 +127,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -136,9 +137,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> T -> (~>) GHC.Types.Symbol GHC.Types.Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: T) :: (~>) GHC.Types.Symbol GHC.Types.Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -146,9 +147,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> T -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: T) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow T where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -160,19 +161,17 @@       toSing T = SomeSing ST     instance SEq T where       (%==) ::-        forall (t1 :: T) (t2 :: T).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun T ((~>) T Bool)-                                              -> GHC.Types.Type) t1) t2)+        forall (t1 :: T) (t2 :: T). Sing t1+                                    -> Sing t2+                                       -> Sing (Apply (Apply ((==@#@$) :: TyFun T ((~>) T Bool)+                                                                          -> GHC.Types.Type) t1) t2)       (%==) ST ST = STrue     instance SOrd T where       sCompare ::-        forall (t1 :: T) (t2 :: T).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun T ((~>) T Ordering)-                                                 -> GHC.Types.Type) t1) t2)+        forall (t1 :: T) (t2 :: T). Sing t1+                                    -> Sing t2+                                       -> Sing (Apply (Apply (CompareSym0 :: TyFun T ((~>) T Ordering)+                                                                             -> GHC.Types.Type) t1) t2)       sCompare ST ST         = (applySing              ((applySing@@ -182,15 +181,13 @@             SNil     instance SEnum T where       sToEnum ::-        forall (t :: GHC.Types.Nat).-        Sing t-        -> Sing (Apply (Data.Singletons.Base.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat T-                                                                -> GHC.Types.Type) t)+        forall (t :: GHC.Num.Natural.Natural). Sing t+                                               -> Sing (Apply (Data.Singletons.Base.Enum.ToEnumSym0 :: TyFun GHC.Num.Natural.Natural T+                                                                                                       -> GHC.Types.Type) t)       sFromEnum ::-        forall (t :: T).-        Sing t-        -> Sing (Apply (Data.Singletons.Base.Enum.FromEnumSym0 :: TyFun T GHC.Types.Nat-                                                                  -> GHC.Types.Type) t)+        forall (t :: T). Sing t+                         -> Sing (Apply (Data.Singletons.Base.Enum.FromEnumSym0 :: TyFun T GHC.Num.Natural.Natural+                                                                                   -> GHC.Types.Type) t)       sToEnum (sN :: Sing n)         = (id              @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0)))))@@ -208,12 +205,13 @@       sMaxBound = ST     instance SShow T where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: T) (t3 :: GHC.Types.Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol))-                                                             -> GHC.Types.Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: T)+               (t3 :: GHC.Types.Symbol). Sing t1+                                         -> Sing t2+                                            -> Sing t3+                                               -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol))+                                                                                              -> GHC.Types.Type) t1) t2) t3)       sShowsPrec         _         ST
tests/compile-and-dump/Singletons/T197.golden view
@@ -35,11 +35,14 @@       ($$:) _ _ = FalseSym0     infixl 5 %$$:     (%$$:) ::-      forall (t :: Bool) (t :: Bool).-      Sing t -> Sing t -> Sing (Apply (Apply ($$:@#@$) t) t :: Bool)+      forall (t :: Bool) (t :: Bool). Sing t+                                      -> Sing t -> Sing (Apply (Apply ($$:@#@$) t) t :: Bool)     (%$$:) _ _ = SFalse     instance SingI (($$:@#@$) :: (~>) Bool ((~>) Bool Bool)) where       sing = (singFun2 @($$:@#@$)) (%$$:)     instance SingI d =>              SingI (($$:@#@$$) (d :: Bool) :: (~>) Bool Bool) where       sing = (singFun1 @(($$:@#@$$) (d :: Bool))) ((%$$:) (sing @d))+    instance SingI1 (($$:@#@$$) :: Bool -> (~>) Bool Bool) where+      liftSing (s :: Sing (d :: Bool))+        = (singFun1 @(($$:@#@$$) (d :: Bool))) ((%$$:) s)
tests/compile-and-dump/Singletons/T197b.golden view
@@ -60,8 +60,8 @@       type Demote ((:*:) a b) = (:*:) (Demote a) (Demote b)       fromSing ((:%*:) b b) = ((:*:) (fromSing b)) (fromSing b)       toSing ((:*:) (b :: Demote a) (b :: Demote b))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c)     data SPair :: forall a b. Pair a b -> GHC.Types.Type       where         SMkPair :: forall a b (n :: a) (n :: b).@@ -71,21 +71,35 @@       type Demote (Pair a b) = Pair (Demote a) (Demote b)       fromSing (SMkPair b b) = (MkPair (fromSing b)) (fromSing b)       toSing (MkPair (b :: Demote a) (b :: Demote b))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkPair c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkPair c) c)     instance (SingI n, SingI n) =>              SingI ((:*:) (n :: a) (n :: b)) where       sing = ((:%*:) sing) sing+    instance SingI n => SingI1 ((:*:) (n :: a)) where+      liftSing = (:%*:) sing+    instance SingI2 (:*:) where+      liftSing2 = (:%*:)     instance SingI ((:*:@#@$) :: (~>) a ((~>) b ((:*:) a b))) where       sing = (singFun2 @(:*:@#@$)) (:%*:)     instance SingI d =>              SingI ((:*:@#@$$) (d :: a) :: (~>) b ((:*:) a b)) where       sing = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) (sing @d))+    instance SingI1 ((:*:@#@$$) :: a -> (~>) b ((:*:) a b)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) s)     instance (SingI n, SingI n) =>              SingI (MkPair (n :: a) (n :: b)) where       sing = (SMkPair sing) sing+    instance SingI n => SingI1 (MkPair (n :: a)) where+      liftSing = SMkPair sing+    instance SingI2 MkPair where+      liftSing2 = SMkPair     instance SingI (MkPairSym0 :: (~>) a ((~>) b (Pair a b))) where       sing = (singFun2 @MkPairSym0) SMkPair     instance SingI d =>              SingI (MkPairSym1 (d :: a) :: (~>) b (Pair a b)) where       sing = (singFun1 @(MkPairSym1 (d :: a))) (SMkPair (sing @d))+    instance SingI1 (MkPairSym1 :: a -> (~>) b (Pair a b)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(MkPairSym1 (d :: a))) (SMkPair s)
tests/compile-and-dump/Singletons/T200.golden view
@@ -112,13 +112,13 @@     type family ($$:) (a :: ErrorMessage) (a :: ErrorMessage) :: ErrorMessage where       ($$:) x y = Apply (Apply (:$$:@#@$) x) y     (%<>:) ::-      forall (t :: ErrorMessage) (t :: ErrorMessage).-      Sing t-      -> Sing t -> Sing (Apply (Apply (<>:@#@$) t) t :: ErrorMessage)+      forall (t :: ErrorMessage) (t :: ErrorMessage). Sing t+                                                      -> Sing t+                                                         -> Sing (Apply (Apply (<>:@#@$) t) t :: ErrorMessage)     (%$$:) ::-      forall (t :: ErrorMessage) (t :: ErrorMessage).-      Sing t-      -> Sing t -> Sing (Apply (Apply ($$:@#@$) t) t :: ErrorMessage)+      forall (t :: ErrorMessage) (t :: ErrorMessage). Sing t+                                                      -> Sing t+                                                         -> Sing (Apply (Apply ($$:@#@$) t) t :: ErrorMessage)     (%<>:) (sX :: Sing x) (sY :: Sing y)       = (applySing ((applySing ((singFun2 @(:<>:@#@$)) (:%<>:))) sX)) sY     (%$$:) (sX :: Sing x) (sY :: Sing y)@@ -129,12 +129,20 @@              SingI ((<>:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where       sing         = (singFun1 @((<>:@#@$$) (d :: ErrorMessage))) ((%<>:) (sing @d))+    instance SingI1 ((<>:@#@$$) :: ErrorMessage+                                   -> (~>) ErrorMessage ErrorMessage) where+      liftSing (s :: Sing (d :: ErrorMessage))+        = (singFun1 @((<>:@#@$$) (d :: ErrorMessage))) ((%<>:) s)     instance SingI (($$:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where       sing = (singFun2 @($$:@#@$)) (%$$:)     instance SingI d =>              SingI (($$:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where       sing         = (singFun1 @(($$:@#@$$) (d :: ErrorMessage))) ((%$$:) (sing @d))+    instance SingI1 (($$:@#@$$) :: ErrorMessage+                                   -> (~>) ErrorMessage ErrorMessage) where+      liftSing (s :: Sing (d :: ErrorMessage))+        = (singFun1 @(($$:@#@$$) (d :: ErrorMessage))) ((%$$:) s)     data SErrorMessage :: ErrorMessage -> GHC.Types.Type       where         (:%$$:) :: forall (n :: ErrorMessage) (n :: ErrorMessage).@@ -154,37 +162,55 @@         = case               ((,) (toSing b :: SomeSing ErrorMessage))                 (toSing b :: SomeSing ErrorMessage)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%$$:) c) c) }+          of+            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%$$:) c) c)       toSing         ((:<>:) (b :: Demote ErrorMessage) (b :: Demote ErrorMessage))         = case               ((,) (toSing b :: SomeSing ErrorMessage))                 (toSing b :: SomeSing ErrorMessage)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%<>:) c) c) }+          of+            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%<>:) c) c)       toSing (EM (b :: Demote [Bool]))-        = case toSing b :: SomeSing [Bool] of {-            SomeSing c -> SomeSing (SEM c) }+        = case toSing b :: SomeSing [Bool] of+            SomeSing c -> SomeSing (SEM c)     instance (SingI n, SingI n) =>              SingI ((:$$:) (n :: ErrorMessage) (n :: ErrorMessage)) where       sing = ((:%$$:) sing) sing+    instance SingI n => SingI1 ((:$$:) (n :: ErrorMessage)) where+      liftSing = (:%$$:) sing+    instance SingI2 (:$$:) where+      liftSing2 = (:%$$:)     instance SingI ((:$$:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where       sing = (singFun2 @(:$$:@#@$)) (:%$$:)     instance SingI d =>              SingI ((:$$:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where       sing         = (singFun1 @((:$$:@#@$$) (d :: ErrorMessage))) ((:%$$:) (sing @d))+    instance SingI1 ((:$$:@#@$$) :: ErrorMessage+                                    -> (~>) ErrorMessage ErrorMessage) where+      liftSing (s :: Sing (d :: ErrorMessage))+        = (singFun1 @((:$$:@#@$$) (d :: ErrorMessage))) ((:%$$:) s)     instance (SingI n, SingI n) =>              SingI ((:<>:) (n :: ErrorMessage) (n :: ErrorMessage)) where       sing = ((:%<>:) sing) sing+    instance SingI n => SingI1 ((:<>:) (n :: ErrorMessage)) where+      liftSing = (:%<>:) sing+    instance SingI2 (:<>:) where+      liftSing2 = (:%<>:)     instance SingI ((:<>:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where       sing = (singFun2 @(:<>:@#@$)) (:%<>:)     instance SingI d =>              SingI ((:<>:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where       sing         = (singFun1 @((:<>:@#@$$) (d :: ErrorMessage))) ((:%<>:) (sing @d))+    instance SingI1 ((:<>:@#@$$) :: ErrorMessage+                                    -> (~>) ErrorMessage ErrorMessage) where+      liftSing (s :: Sing (d :: ErrorMessage))+        = (singFun1 @((:<>:@#@$$) (d :: ErrorMessage))) ((:%<>:) s)     instance SingI n => SingI (EM (n :: [Bool])) where       sing = SEM sing+    instance SingI1 EM where+      liftSing = SEM     instance SingI (EMSym0 :: (~>) [Bool] ErrorMessage) where       sing = (singFun1 @EMSym0) SEM
tests/compile-and-dump/Singletons/T204.golden view
@@ -62,8 +62,8 @@       type Demote (Ratio1 a) = Ratio1 (Demote a)       fromSing ((:^%) b b) = ((:%) (fromSing b)) (fromSing b)       toSing ((:%) (b :: Demote a) (b :: Demote a))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:^%) c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:^%) c) c)     data SRatio2 :: forall a. Ratio2 a -> GHC.Types.Type       where         (:^%%) :: forall a (n :: a) (n :: a).@@ -73,20 +73,34 @@       type Demote (Ratio2 a) = Ratio2 (Demote a)       fromSing ((:^%%) b b) = ((:%%) (fromSing b)) (fromSing b)       toSing ((:%%) (b :: Demote a) (b :: Demote a))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:^%%) c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing (((:^%%) c) c)     instance (SingI n, SingI n) => SingI ((:%) (n :: a) (n :: a)) where       sing = ((:^%) sing) sing+    instance SingI n => SingI1 ((:%) (n :: a)) where+      liftSing = (:^%) sing+    instance SingI2 (:%) where+      liftSing2 = (:^%)     instance SingI ((:%@#@$) :: (~>) a ((~>) a (Ratio1 a))) where       sing = (singFun2 @(:%@#@$)) (:^%)     instance SingI d =>              SingI ((:%@#@$$) (d :: a) :: (~>) a (Ratio1 a)) where       sing = (singFun1 @((:%@#@$$) (d :: a))) ((:^%) (sing @d))+    instance SingI1 ((:%@#@$$) :: a -> (~>) a (Ratio1 a)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((:%@#@$$) (d :: a))) ((:^%) s)     instance (SingI n, SingI n) =>              SingI ((:%%) (n :: a) (n :: a)) where       sing = ((:^%%) sing) sing+    instance SingI n => SingI1 ((:%%) (n :: a)) where+      liftSing = (:^%%) sing+    instance SingI2 (:%%) where+      liftSing2 = (:^%%)     instance SingI ((:%%@#@$) :: (~>) a ((~>) a (Ratio2 a))) where       sing = (singFun2 @(:%%@#@$)) (:^%%)     instance SingI d =>              SingI ((:%%@#@$$) (d :: a) :: (~>) a (Ratio2 a)) where       sing = (singFun1 @((:%%@#@$$) (d :: a))) ((:^%%) (sing @d))+    instance SingI1 ((:%%@#@$$) :: a -> (~>) a (Ratio2 a)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((:%%@#@$$) (d :: a))) ((:^%%) s)
tests/compile-and-dump/Singletons/T209.golden view
@@ -54,20 +54,29 @@     instance PC Bool Hm     instance PC a (Maybe a)     sM ::-      forall a b (t :: a) (t :: b) (t :: Bool).-      Sing t-      -> Sing t-         -> Sing t -> Sing (Apply (Apply (Apply MSym0 t) t) t :: Bool)+      forall a b (t :: a) (t :: b) (t :: Bool). Sing t+                                                -> Sing t+                                                   -> Sing t+                                                      -> Sing (Apply (Apply (Apply MSym0 t) t) t :: Bool)     sM _ _ (sX :: Sing x) = sX     instance SingI (MSym0 :: (~>) a ((~>) b ((~>) Bool Bool))) where       sing = (singFun3 @MSym0) sM     instance SingI d =>              SingI (MSym1 (d :: a) :: (~>) b ((~>) Bool Bool)) where       sing = (singFun2 @(MSym1 (d :: a))) (sM (sing @d))+    instance SingI1 (MSym1 :: a -> (~>) b ((~>) Bool Bool)) where+      liftSing (s :: Sing (d :: a)) = (singFun2 @(MSym1 (d :: a))) (sM s)     instance (SingI d, SingI d) =>              SingI (MSym2 (d :: a) (d :: b) :: (~>) Bool Bool) where       sing         = (singFun1 @(MSym2 (d :: a) (d :: b))) ((sM (sing @d)) (sing @d))+    instance SingI d =>+             SingI1 (MSym2 (d :: a) :: b -> (~>) Bool Bool) where+      liftSing (s :: Sing (d :: b))+        = (singFun1 @(MSym2 (d :: a) (d :: b))) ((sM (sing @d)) s)+    instance SingI2 (MSym2 :: a -> b -> (~>) Bool Bool) where+      liftSing2 (s :: Sing (d :: a)) (s :: Sing (d :: b))+        = (singFun1 @(MSym2 (d :: a) (d :: b))) ((sM s) s)     data SHm :: Hm -> GHC.Types.Type where SHm :: SHm (Hm :: Hm)     type instance Sing @Hm = SHm     instance SingKind Hm where
tests/compile-and-dump/Singletons/T216.golden view
@@ -11,12 +11,12 @@     data MyProxySym1 (k0123456789876543210 :: Type) :: (~>) k0123456789876543210 Type       where         MyProxySym1KindInference :: SameKind (Apply (MyProxySym1 k0123456789876543210) arg) (MyProxySym2 k0123456789876543210 arg) =>-                                    MyProxySym1 k0123456789876543210 e-    type instance Apply (MyProxySym1 k0123456789876543210) e = MyProxy k0123456789876543210 e+                                    MyProxySym1 k0123456789876543210 e0123456789876543210+    type instance Apply (MyProxySym1 k0123456789876543210) e0123456789876543210 = MyProxy k0123456789876543210 e0123456789876543210     instance SuppressUnusedWarnings (MyProxySym1 k0123456789876543210) where       suppressUnusedWarnings = snd (((,) MyProxySym1KindInference) ())-    type family MyProxySym2 (k0123456789876543210 :: Type) (e :: k0123456789876543210) :: Type where-      MyProxySym2 k0123456789876543210 e = MyProxy k0123456789876543210 e+    type family MyProxySym2 (k0123456789876543210 :: Type) (e0123456789876543210 :: k0123456789876543210) :: Type where+      MyProxySym2 k0123456789876543210 e0123456789876543210 = MyProxy k0123456789876543210 e0123456789876543210     data SymmetrySym0 :: (~>) t0123456789876543210 ((~>) t0123456789876543210 ((~>) ((:~:) a0123456789876543210 y0123456789876543210) Type))       where         SymmetrySym0KindInference :: SameKind (Apply SymmetrySym0 arg) (SymmetrySym1 arg) =>@@ -34,9 +34,9 @@     data SymmetrySym2 (a0123456789876543210 :: t0123456789876543210) (y0123456789876543210 :: t0123456789876543210) :: (~>) ((:~:) a0123456789876543210 y0123456789876543210) Type       where         SymmetrySym2KindInference :: SameKind (Apply (SymmetrySym2 a0123456789876543210 y0123456789876543210) arg) (SymmetrySym3 a0123456789876543210 y0123456789876543210 arg) =>-                                     SymmetrySym2 a0123456789876543210 y0123456789876543210 e-    type instance Apply (SymmetrySym2 a0123456789876543210 y0123456789876543210) e = Symmetry a0123456789876543210 y0123456789876543210 e+                                     SymmetrySym2 a0123456789876543210 y0123456789876543210 e0123456789876543210+    type instance Apply (SymmetrySym2 a0123456789876543210 y0123456789876543210) e0123456789876543210 = Symmetry a0123456789876543210 y0123456789876543210 e0123456789876543210     instance SuppressUnusedWarnings (SymmetrySym2 a0123456789876543210 y0123456789876543210) where       suppressUnusedWarnings = snd (((,) SymmetrySym2KindInference) ())-    type family SymmetrySym3 (a0123456789876543210 :: t0123456789876543210) (y0123456789876543210 :: t0123456789876543210) (e :: (:~:) a0123456789876543210 y0123456789876543210) :: Type where-      SymmetrySym3 a0123456789876543210 y0123456789876543210 e = Symmetry a0123456789876543210 y0123456789876543210 e+    type family SymmetrySym3 (a0123456789876543210 :: t0123456789876543210) (y0123456789876543210 :: t0123456789876543210) (e0123456789876543210 :: (:~:) a0123456789876543210 y0123456789876543210) :: Type where+      SymmetrySym3 a0123456789876543210 y0123456789876543210 e0123456789876543210 = Symmetry a0123456789876543210 y0123456789876543210 e0123456789876543210
tests/compile-and-dump/Singletons/T249.golden view
@@ -49,8 +49,7 @@       type Demote (Foo1 a) = Foo1 (Demote a)       fromSing (SMkFoo1 b) = MkFoo1 (fromSing b)       toSing (MkFoo1 (b :: Demote a))-        = case toSing b :: SomeSing a of {-            SomeSing c -> SomeSing (SMkFoo1 c) }+        = case toSing b :: SomeSing a of SomeSing c -> SomeSing (SMkFoo1 c)     data SFoo2 :: forall a. Foo2 a -> Type       where         SMkFoo2 :: forall x (n :: x).@@ -60,8 +59,7 @@       type Demote (Foo2 a) = Foo2 (Demote a)       fromSing (SMkFoo2 b) = MkFoo2 (fromSing b)       toSing (MkFoo2 (b :: Demote x))-        = case toSing b :: SomeSing x of {-            SomeSing c -> SomeSing (SMkFoo2 c) }+        = case toSing b :: SomeSing x of SomeSing c -> SomeSing (SMkFoo2 c)     data SFoo3 :: forall a. Foo3 a -> Type       where         SMkFoo3 :: forall x (n :: x).@@ -71,17 +69,22 @@       type Demote (Foo3 a) = Foo3 (Demote a)       fromSing (SMkFoo3 b) = MkFoo3 (fromSing b)       toSing (MkFoo3 (b :: Demote x))-        = case toSing b :: SomeSing x of {-            SomeSing c -> SomeSing (SMkFoo3 c) }+        = case toSing b :: SomeSing x of SomeSing c -> SomeSing (SMkFoo3 c)     instance SingI n => SingI (MkFoo1 (n :: a)) where       sing = SMkFoo1 sing+    instance SingI1 MkFoo1 where+      liftSing = SMkFoo1     instance SingI (MkFoo1Sym0 :: (~>) a (Foo1 a)) where       sing = (singFun1 @MkFoo1Sym0) SMkFoo1     instance SingI n => SingI (MkFoo2 (n :: x)) where       sing = SMkFoo2 sing+    instance SingI1 MkFoo2 where+      liftSing = SMkFoo2     instance SingI (MkFoo2Sym0 :: (~>) x (Foo2 x)) where       sing = (singFun1 @MkFoo2Sym0) SMkFoo2     instance SingI n => SingI (MkFoo3 (n :: x)) where       sing = SMkFoo3 sing+    instance SingI1 MkFoo3 where+      liftSing = SMkFoo3     instance SingI (MkFoo3Sym0 :: (~>) x (Foo3 x)) where       sing = (singFun1 @MkFoo3Sym0) SMkFoo3
tests/compile-and-dump/Singletons/T271.golden view
@@ -13,8 +13,8 @@     data Identity :: Type -> Type       where Identity :: a -> Identity a       deriving (Eq, Ord)-    type ConstantSym0 :: forall (a :: Type) (b :: Type).-                         (~>) a (Constant (a :: Type) (b :: Type))+    type ConstantSym0 :: forall (a :: Type)+                                (b :: Type). (~>) a (Constant (a :: Type) (b :: Type))     data ConstantSym0 :: (~>) a (Constant (a :: Type) (b :: Type))       where         ConstantSym0KindInference :: SameKind (Apply ConstantSym0 arg) (ConstantSym1 arg) =>@@ -22,8 +22,8 @@     type instance Apply ConstantSym0 a0123456789876543210 = Constant a0123456789876543210     instance SuppressUnusedWarnings ConstantSym0 where       suppressUnusedWarnings = snd (((,) ConstantSym0KindInference) ())-    type ConstantSym1 :: forall (a :: Type) (b :: Type).-                         a -> Constant (a :: Type) (b :: Type)+    type ConstantSym1 :: forall (a :: Type) (b :: Type). a+                                                         -> Constant (a :: Type) (b :: Type)     type family ConstantSym1 (a0123456789876543210 :: a) :: Constant (a :: Type) (b :: Type) where       ConstantSym1 a0123456789876543210 = Constant a0123456789876543210     type IdentitySym0 :: (~>) a (Identity a)@@ -164,8 +164,8 @@       type Demote (Constant a b) = Constant (Demote a) (Demote b)       fromSing (SConstant b) = Constant (fromSing b)       toSing (Constant (b :: Demote a))-        = case toSing b :: SomeSing a of {-            SomeSing c -> SomeSing (SConstant c) }+        = case toSing b :: SomeSing a of+            SomeSing c -> SomeSing (SConstant c)     data SIdentity :: forall (a :: Type). Identity a -> Type       where         SIdentity :: forall a (n :: a).@@ -175,15 +175,14 @@       type Demote (Identity a) = Identity (Demote a)       fromSing (SIdentity b) = Identity (fromSing b)       toSing (Identity (b :: Demote a))-        = case toSing b :: SomeSing a of {-            SomeSing c -> SomeSing (SIdentity c) }+        = case toSing b :: SomeSing a of+            SomeSing c -> SomeSing (SIdentity c)     instance SEq a => SEq (Constant a b) where       (%==) ::-        forall (t1 :: Constant a b) (t2 :: Constant a b).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun (Constant a b) ((~>) (Constant a b) Bool)-                                              -> Type) t1) t2)+        forall (t1 :: Constant a b) (t2 :: Constant a b). Sing t1+                                                          -> Sing t2+                                                             -> Sing (Apply (Apply ((==@#@$) :: TyFun (Constant a b) ((~>) (Constant a b) Bool)+                                                                                                -> Type) t1) t2)       (%==)         (SConstant (sA_0123456789876543210 :: Sing a_0123456789876543210))         (SConstant (sB_0123456789876543210 :: Sing b_0123456789876543210))@@ -192,11 +191,10 @@             sB_0123456789876543210     instance SOrd a => SOrd (Constant a b) where       sCompare ::-        forall (t1 :: Constant a b) (t2 :: Constant a b).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun (Constant a b) ((~>) (Constant a b) Ordering)-                                                 -> Type) t1) t2)+        forall (t1 :: Constant a b) (t2 :: Constant a b). Sing t1+                                                          -> Sing t2+                                                             -> Sing (Apply (Apply (CompareSym0 :: TyFun (Constant a b) ((~>) (Constant a b) Ordering)+                                                                                                   -> Type) t1) t2)       sCompare         (SConstant (sA_0123456789876543210 :: Sing a_0123456789876543210))         (SConstant (sB_0123456789876543210 :: Sing b_0123456789876543210))@@ -214,11 +212,10 @@                SNil)     instance SEq a => SEq (Identity a) where       (%==) ::-        forall (t1 :: Identity a) (t2 :: Identity a).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply ((==@#@$) :: TyFun (Identity a) ((~>) (Identity a) Bool)-                                              -> Type) t1) t2)+        forall (t1 :: Identity a) (t2 :: Identity a). Sing t1+                                                      -> Sing t2+                                                         -> Sing (Apply (Apply ((==@#@$) :: TyFun (Identity a) ((~>) (Identity a) Bool)+                                                                                            -> Type) t1) t2)       (%==)         (SIdentity (sA_0123456789876543210 :: Sing a_0123456789876543210))         (SIdentity (sB_0123456789876543210 :: Sing b_0123456789876543210))@@ -227,11 +224,10 @@             sB_0123456789876543210     instance SOrd a => SOrd (Identity a) where       sCompare ::-        forall (t1 :: Identity a) (t2 :: Identity a).-        Sing t1-        -> Sing t2-           -> Sing (Apply (Apply (CompareSym0 :: TyFun (Identity a) ((~>) (Identity a) Ordering)-                                                 -> Type) t1) t2)+        forall (t1 :: Identity a) (t2 :: Identity a). Sing t1+                                                      -> Sing t2+                                                         -> Sing (Apply (Apply (CompareSym0 :: TyFun (Identity a) ((~>) (Identity a) Ordering)+                                                                                               -> Type) t1) t2)       sCompare         (SIdentity (sA_0123456789876543210 :: Sing a_0123456789876543210))         (SIdentity (sB_0123456789876543210 :: Sing b_0123456789876543210))@@ -252,7 +248,7 @@         = case ((%~) a) b of             Proved Refl -> Proved Refl             Disproved contra-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)     instance SDecide a =>              Data.Type.Equality.TestEquality (SConstant :: Constant a b                                                            -> Type) where@@ -268,7 +264,7 @@         = case ((%~) a) b of             Proved Refl -> Proved Refl             Disproved contra-              -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+              -> Disproved (\ refl -> case refl of Refl -> contra Refl)     instance SDecide a =>              Data.Type.Equality.TestEquality (SIdentity :: Identity a                                                            -> Type) where@@ -281,9 +277,13 @@         = Data.Singletons.Decide.decideCoercion     instance SingI n => SingI (Constant (n :: a)) where       sing = SConstant sing+    instance SingI1 Constant where+      liftSing = SConstant     instance SingI (ConstantSym0 :: (~>) a (Constant (a :: Type) (b :: Type))) where       sing = (singFun1 @ConstantSym0) SConstant     instance SingI n => SingI (Identity (n :: a)) where       sing = SIdentity sing+    instance SingI1 Identity where+      liftSing = SIdentity     instance SingI (IdentitySym0 :: (~>) a (Identity a)) where       sing = (singFun1 @IdentitySym0) SIdentity
tests/compile-and-dump/Singletons/T287.golden view
@@ -30,7 +30,7 @@     type family (<<>>@#@$$$) (a0123456789876543210 :: a) (a0123456789876543210 :: a) :: a where       (<<>>@#@$$$) a0123456789876543210 a0123456789876543210 = (<<>>) a0123456789876543210 a0123456789876543210     class PS a where-      type (<<>>) (arg :: a) (arg :: a) :: a+      type family (<<>>) (arg :: a) (arg :: a) :: a     type family Lambda_0123456789876543210 f g x where       Lambda_0123456789876543210 f g x = Apply (Apply (<<>>@#@$) (Apply f x)) (Apply g x)     data Lambda_0123456789876543210Sym0 f0123456789876543210@@ -90,22 +90,26 @@       type (<<>>) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a     class SS a where       (%<<>>) ::-        forall (t :: a) (t :: a).-        Sing t -> Sing t -> Sing (Apply (Apply (<<>>@#@$) t) t :: a)+        forall (t :: a) (t :: a). Sing t+                                  -> Sing t -> Sing (Apply (Apply (<<>>@#@$) t) t :: a)     instance SS b => SS ((~>) a b) where       (%<<>>) ::-        forall (t :: (~>) a b) (t :: (~>) a b).-        Sing t -> Sing t -> Sing (Apply (Apply (<<>>@#@$) t) t :: (~>) a b)+        forall (t :: (~>) a b) (t :: (~>) a b). Sing t+                                                -> Sing t+                                                   -> Sing (Apply (Apply (<<>>@#@$) t) t :: (~>) a b)       (%<<>>) (sF :: Sing f) (sG :: Sing g)         = (singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 f) g))             (\ sX-               -> case sX of {+               -> case sX of                     (_ :: Sing x)                       -> (applySing                             ((applySing ((singFun2 @(<<>>@#@$)) (%<<>>))) ((applySing sF) sX)))-                           ((applySing sG) sX) })+                           ((applySing sG) sX))     instance SS a => SingI ((<<>>@#@$) :: (~>) a ((~>) a a)) where       sing = (singFun2 @(<<>>@#@$)) (%<<>>)     instance (SS a, SingI d) =>              SingI ((<<>>@#@$$) (d :: a) :: (~>) a a) where       sing = (singFun1 @((<<>>@#@$$) (d :: a))) ((%<<>>) (sing @d))+    instance SS a => SingI1 ((<<>>@#@$$) :: a -> (~>) a a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((<<>>@#@$$) (d :: a))) ((%<<>>) s)
tests/compile-and-dump/Singletons/T296.golden view
@@ -48,8 +48,8 @@     type family F (a :: MyProxy a) :: MyProxy a where       F MyProxy = Let0123456789876543210XSym0     sF ::-      forall a (t :: MyProxy a).-      Sing t -> Sing (Apply FSym0 t :: MyProxy a)+      forall a (t :: MyProxy a). Sing t+                                 -> Sing (Apply FSym0 t :: MyProxy a)     sF SMyProxy       = let           sX :: Sing @_ Let0123456789876543210XSym0
tests/compile-and-dump/Singletons/T312.golden view
@@ -142,27 +142,27 @@     type family Baz_0123456789876543210Sym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: b where       Baz_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 = Baz_0123456789876543210 a0123456789876543210 a0123456789876543210     class PFoo a where-      type Bar (arg :: a) (arg :: b) :: b-      type Baz (arg :: a) (arg :: b) :: b+      type family Bar (arg :: a) (arg :: b) :: b+      type family Baz (arg :: a) (arg :: b) :: b       type Bar a a = Apply (Apply Bar_0123456789876543210Sym0 a) a       type Baz a a = Apply (Apply Baz_0123456789876543210Sym0 a) a     class SFoo a where       sBar ::-        forall b (t :: a) (t :: b).-        Sing t -> Sing t -> Sing (Apply (Apply BarSym0 t) t :: b)+        forall b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply BarSym0 t) t :: b)       sBaz ::-        forall b (t :: a) (t :: b).-        Sing t -> Sing t -> Sing (Apply (Apply BazSym0 t) t :: b)+        forall b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply BazSym0 t) t :: b)       default sBar ::-                forall b (t :: a) (t :: b).-                ((Apply (Apply BarSym0 t) t :: b)-                 ~ Apply (Apply Bar_0123456789876543210Sym0 t) t) =>-                Sing t -> Sing t -> Sing (Apply (Apply BarSym0 t) t :: b)+                forall b (t :: a) (t :: b). ((Apply (Apply BarSym0 t) t :: b)+                                             ~ Apply (Apply Bar_0123456789876543210Sym0 t) t) =>+                                            Sing t+                                            -> Sing t -> Sing (Apply (Apply BarSym0 t) t :: b)       default sBaz ::-                forall b (t :: a) (t :: b).-                ((Apply (Apply BazSym0 t) t :: b)-                 ~ Apply (Apply Baz_0123456789876543210Sym0 t) t) =>-                Sing t -> Sing t -> Sing (Apply (Apply BazSym0 t) t :: b)+                forall b (t :: a) (t :: b). ((Apply (Apply BazSym0 t) t :: b)+                                             ~ Apply (Apply Baz_0123456789876543210Sym0 t) t) =>+                                            Sing t+                                            -> Sing t -> Sing (Apply (Apply BazSym0 t) t :: b)       sBar _ (sX :: Sing x) = sX       sBaz         (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -171,10 +171,9 @@              ((applySing                  (let                     sH ::-                      forall c (t :: c) (t :: b).-                      Sing t-                      -> Sing t-                         -> Sing (Apply (Apply (Let0123456789876543210HSym2 a_0123456789876543210 a_0123456789876543210) t) t :: b)+                      forall c (t :: c) (t :: b). Sing t+                                                  -> Sing t+                                                     -> Sing (Apply (Apply (Let0123456789876543210HSym2 a_0123456789876543210 a_0123456789876543210) t) t :: b)                     sH _ (sX :: Sing x) = sX                   in                     (singFun2@@ -187,8 +186,14 @@     instance (SFoo a, SingI d) =>              SingI (BarSym1 (d :: a) :: (~>) b b) where       sing = (singFun1 @(BarSym1 (d :: a))) (sBar (sing @d))+    instance SFoo a => SingI1 (BarSym1 :: a -> (~>) b b) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(BarSym1 (d :: a))) (sBar s)     instance SFoo a => SingI (BazSym0 :: (~>) a ((~>) b b)) where       sing = (singFun2 @BazSym0) sBaz     instance (SFoo a, SingI d) =>              SingI (BazSym1 (d :: a) :: (~>) b b) where       sing = (singFun1 @(BazSym1 (d :: a))) (sBaz (sing @d))+    instance SFoo a => SingI1 (BazSym1 :: a -> (~>) b b) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(BazSym1 (d :: a))) (sBaz s)
tests/compile-and-dump/Singletons/T313.golden view
@@ -18,7 +18,7 @@     type family PFoo3 a where       PFoo3 a = Maybe a     class PC (a :: Type) where-      type PFoo4 a+      type family PFoo4 a       type PFoo4 a = Maybe a     instance PC a where       type PFoo4 a = Maybe a@@ -80,7 +80,7 @@     type family SFoo3 a where       SFoo3 a = Maybe a     class SC (a :: Type) where-      type SFoo4 a+      type family SFoo4 a       type SFoo4 a = Maybe a     instance SC a where       type SFoo4 a = Maybe a
tests/compile-and-dump/Singletons/T322.golden view
@@ -35,8 +35,8 @@       (!) a_0123456789876543210 a_0123456789876543210 = Apply (Apply (||@#@$) a_0123456789876543210) a_0123456789876543210     infixr 2 %!     (%!) ::-      forall (t :: Bool) (t :: Bool).-      Sing t -> Sing t -> Sing (Apply (Apply (!@#@$) t) t :: Bool)+      forall (t :: Bool) (t :: Bool). Sing t+                                      -> Sing t -> Sing (Apply (Apply (!@#@$) t) t :: Bool)     (%!)       (sA_0123456789876543210 :: Sing a_0123456789876543210)       (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -48,3 +48,6 @@     instance SingI d =>              SingI ((!@#@$$) (d :: Bool) :: (~>) Bool Bool) where       sing = (singFun1 @((!@#@$$) (d :: Bool))) ((%!) (sing @d))+    instance SingI1 ((!@#@$$) :: Bool -> (~>) Bool Bool) where+      liftSing (s :: Sing (d :: Bool))+        = (singFun1 @((!@#@$$) (d :: Bool))) ((%!) s)
tests/compile-and-dump/Singletons/T326.golden view
@@ -25,7 +25,7 @@     infixl 9 <%>@#@$$$     type PC1 :: GHC.Types.Type -> Constraint     class PC1 (a :: GHC.Types.Type) where-      type (<%>) (arg :: a) (arg :: a) :: a+      type family (<%>) (arg :: a) (arg :: a) :: a     infixl 9 <%> Singletons/T326.hs:0:0:: Splicing declarations     genSingletons [''C2]@@ -54,12 +54,12 @@     infixl 9 <%%>@#@$$$     type PC2 :: GHC.Types.Type -> Constraint     class PC2 (a :: GHC.Types.Type) where-      type (<%%>) (arg :: a) (arg :: a) :: a+      type family (<%%>) (arg :: a) (arg :: a) :: a     infixl 9 <%%>     class SC2 (a :: GHC.Types.Type) where       (%<%%>) ::-        forall (t :: a) (t :: a).-        Sing t -> Sing t -> Sing (Apply (Apply (<%%>@#@$) t) t :: a)+        forall (t :: a) (t :: a). Sing t+                                  -> Sing t -> Sing (Apply (Apply (<%%>@#@$) t) t :: a)     type SC2 :: GHC.Types.Type -> Constraint     infixl 9 %<%%>     instance SC2 a => SingI ((<%%>@#@$) :: (~>) a ((~>) a a)) where@@ -67,3 +67,6 @@     instance (SC2 a, SingI d) =>              SingI ((<%%>@#@$$) (d :: a) :: (~>) a a) where       sing = (singFun1 @((<%%>@#@$$) (d :: a))) ((%<%%>) (sing @d))+    instance SC2 a => SingI1 ((<%%>@#@$$) :: a -> (~>) a a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((<%%>@#@$$) (d :: a))) ((%<%%>) s)
tests/compile-and-dump/Singletons/T353.golden view
@@ -36,9 +36,8 @@     type MkProdSym0 :: forall k                               (f :: k -> Type)                               (g :: k -> Type)-                              (p :: k).-                       (~>) (f p) ((~>) (g p) (Prod (f :: k -> Type) (g :: k-                                                                           -> Type) (p :: k)))+                              (p :: k). (~>) (f p) ((~>) (g p) (Prod (f :: k -> Type) (g :: k+                                                                                            -> Type) (p :: k)))     data MkProdSym0 :: (~>) (f p) ((~>) (g p) (Prod (f :: k                                                           -> Type) (g :: k -> Type) (p :: k)))       where@@ -50,8 +49,9 @@     type MkProdSym1 :: forall k                               (f :: k -> Type)                               (g :: k -> Type)-                              (p :: k).-                       f p -> (~>) (g p) (Prod (f :: k -> Type) (g :: k -> Type) (p :: k))+                              (p :: k). f p+                                        -> (~>) (g p) (Prod (f :: k -> Type) (g :: k+                                                                                   -> Type) (p :: k))     data MkProdSym1 (a0123456789876543210 :: f p) :: (~>) (g p) (Prod (f :: k                                                                             -> Type) (g :: k                                                                                            -> Type) (p :: k))@@ -64,8 +64,8 @@     type MkProdSym2 :: forall k                               (f :: k -> Type)                               (g :: k -> Type)-                              (p :: k).-                       f p -> g p -> Prod (f :: k -> Type) (g :: k -> Type) (p :: k)+                              (p :: k). f p+                                        -> g p -> Prod (f :: k -> Type) (g :: k -> Type) (p :: k)     type family MkProdSym2 (a0123456789876543210 :: f p) (a0123456789876543210 :: g p) :: Prod (f :: k                                                                                                      -> Type) (g :: k                                                                                                                     -> Type) (p :: k) where@@ -73,8 +73,10 @@ Singletons/T353.hs:0:0:: Splicing declarations     genDefunSymbols [''Foo]   ======>-    type MkFooSym0 :: forall k k (a :: k) (b :: k).-                      (~>) (Proxy a) ((~>) (Proxy b) (Foo (a :: k) (b :: k)))+    type MkFooSym0 :: forall k+                             k+                             (a :: k)+                             (b :: k). (~>) (Proxy a) ((~>) (Proxy b) (Foo (a :: k) (b :: k)))     data MkFooSym0 :: (~>) (Proxy a) ((~>) (Proxy b) (Foo (a :: k) (b :: k)))       where         MkFooSym0KindInference :: SameKind (Apply MkFooSym0 arg) (MkFooSym1 arg) =>@@ -82,8 +84,8 @@     type instance Apply MkFooSym0 a0123456789876543210 = MkFooSym1 a0123456789876543210     instance SuppressUnusedWarnings MkFooSym0 where       suppressUnusedWarnings = snd (((,) MkFooSym0KindInference) ())-    type MkFooSym1 :: forall k k (a :: k) (b :: k).-                      Proxy a -> (~>) (Proxy b) (Foo (a :: k) (b :: k))+    type MkFooSym1 :: forall k k (a :: k) (b :: k). Proxy a+                                                    -> (~>) (Proxy b) (Foo (a :: k) (b :: k))     data MkFooSym1 (a0123456789876543210 :: Proxy a) :: (~>) (Proxy b) (Foo (a :: k) (b :: k))       where         MkFooSym1KindInference :: SameKind (Apply (MkFooSym1 a0123456789876543210) arg) (MkFooSym2 a0123456789876543210 arg) =>@@ -91,7 +93,7 @@     type instance Apply (MkFooSym1 a0123456789876543210) a0123456789876543210 = 'MkFoo a0123456789876543210 a0123456789876543210     instance SuppressUnusedWarnings (MkFooSym1 a0123456789876543210) where       suppressUnusedWarnings = snd (((,) MkFooSym1KindInference) ())-    type MkFooSym2 :: forall k k (a :: k) (b :: k).-                      Proxy a -> Proxy b -> Foo (a :: k) (b :: k)+    type MkFooSym2 :: forall k k (a :: k) (b :: k). Proxy a+                                                    -> Proxy b -> Foo (a :: k) (b :: k)     type family MkFooSym2 (a0123456789876543210 :: Proxy a) (a0123456789876543210 :: Proxy b) :: Foo (a :: k) (b :: k) where       MkFooSym2 a0123456789876543210 a0123456789876543210 = 'MkFoo a0123456789876543210 a0123456789876543210
tests/compile-and-dump/Singletons/T358.golden view
@@ -29,7 +29,7 @@     type family Method1Sym0 :: f a where       Method1Sym0 = Method1     class PC1 (f :: k -> Type) where-      type Method1 :: f a+      type family Method1 :: f a     type Method2aSym0 :: forall b a. (~>) b a     data Method2aSym0 :: (~>) b a       where@@ -53,8 +53,8 @@     type family Method2bSym1 (a0123456789876543210 :: b) :: a where       Method2bSym1 a0123456789876543210 = Method2b a0123456789876543210     class PC2 a where-      type Method2a (arg :: b) :: a-      type Method2b (arg :: b) :: a+      type family Method2a (arg :: b) :: a+      type family Method2b (arg :: b) :: a     type Method1_0123456789876543210 :: [a]     type family Method1_0123456789876543210 :: [a] where       Method1_0123456789876543210 = NilSym0
tests/compile-and-dump/Singletons/T367.golden view
@@ -28,10 +28,13 @@     type family Const' (a :: a) (a :: b) :: a where       Const' x _ = x     sConst' ::-      forall a b (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply Const'Sym0 t) t :: a)+      forall a b (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply Const'Sym0 t) t :: a)     sConst' (sX :: Sing x) _ = sX     instance SingI (Const'Sym0 :: (~>) a ((~>) b a)) where       sing = (singFun2 @Const'Sym0) sConst'     instance SingI d => SingI (Const'Sym1 (d :: a) :: (~>) b a) where       sing = (singFun1 @(Const'Sym1 (d :: a))) (sConst' (sing @d))+    instance SingI1 (Const'Sym1 :: a -> (~>) b a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(Const'Sym1 (d :: a))) (sConst' s)
tests/compile-and-dump/Singletons/T371.golden view
@@ -41,13 +41,13 @@     type Y2Sym1 :: forall (a :: Type). X a -> Y (a :: Type)     type family Y2Sym1 (a0123456789876543210 :: X a) :: Y (a :: Type) where       Y2Sym1 a0123456789876543210 = Y2 a0123456789876543210-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> X a -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: X a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: X a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210 _ X1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "X1") a_0123456789876543210       ShowsPrec_0123456789876543210 p_0123456789876543210 (X2 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "X2 ")) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -55,9 +55,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -65,9 +65,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> X a -> (~>) GHC.Types.Symbol GHC.Types.Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: X a) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: X a) :: (~>) GHC.Types.Symbol GHC.Types.Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -75,19 +75,19 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> X a -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: X a) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: X a) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow (X a) where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a-    type ShowsPrec_0123456789876543210 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210 :: GHC.Num.Natural.Natural                                           -> Y a -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Y a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210 (a :: GHC.Num.Natural.Natural) (a :: Y a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210 _ Y1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "Y1") a_0123456789876543210       ShowsPrec_0123456789876543210 p_0123456789876543210 (Y2 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Y2 ")) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210-    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))-    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    type ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+    data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Num.Natural.Natural ((~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))       where         ShowsPrec_0123456789876543210Sym0KindInference :: SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>                                                           ShowsPrec_0123456789876543210Sym0 a0123456789876543210@@ -95,9 +95,9 @@     instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())-    type ShowsPrec_0123456789876543210Sym1 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym1 :: GHC.Num.Natural.Natural                                               -> (~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol)-    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol)+    data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Num.Natural.Natural) :: (~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol)       where         ShowsPrec_0123456789876543210Sym1KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210@@ -105,9 +105,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())-    type ShowsPrec_0123456789876543210Sym2 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym2 :: GHC.Num.Natural.Natural                                               -> Y a -> (~>) GHC.Types.Symbol GHC.Types.Symbol-    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Y a) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+    data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Y a) :: (~>) GHC.Types.Symbol GHC.Types.Symbol       where         ShowsPrec_0123456789876543210Sym2KindInference :: SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>                                                           ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210@@ -115,9 +115,9 @@     instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where       suppressUnusedWarnings         = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())-    type ShowsPrec_0123456789876543210Sym3 :: GHC.Types.Nat+    type ShowsPrec_0123456789876543210Sym3 :: GHC.Num.Natural.Natural                                               -> Y a -> GHC.Types.Symbol -> GHC.Types.Symbol-    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Y a) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where+    type family ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Num.Natural.Natural) (a0123456789876543210 :: Y a) (a0123456789876543210 :: GHC.Types.Symbol) :: GHC.Types.Symbol where       ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210     instance PShow (Y a) where       type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a@@ -133,8 +133,7 @@       fromSing (SX2 b) = X2 (fromSing b)       toSing X1 = SomeSing SX1       toSing (X2 (b :: Demote (Y a)))-        = case toSing b :: SomeSing (Y a) of {-            SomeSing c -> SomeSing (SX2 c) }+        = case toSing b :: SomeSing (Y a) of SomeSing c -> SomeSing (SX2 c)     data SY :: forall (a :: Type). Y a -> Type       where         SY1 :: forall (a :: Type). SY (Y1 :: Y (a :: Type))@@ -147,16 +146,16 @@       fromSing (SY2 b) = Y2 (fromSing b)       toSing Y1 = SomeSing SY1       toSing (Y2 (b :: Demote (X a)))-        = case toSing b :: SomeSing (X a) of {-            SomeSing c -> SomeSing (SY2 c) }+        = case toSing b :: SomeSing (X a) of SomeSing c -> SomeSing (SY2 c)     instance SShow (Y a) => SShow (X a) where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: X a) (t3 :: GHC.Types.Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))-                                                             -> Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: X a)+               (t3 :: GHC.Types.Symbol). Sing t1+                                         -> Sing t2+                                            -> Sing t3+                                               -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+                                                                                              -> Type) t1) t2) t3)       sShowsPrec         _         SX1@@ -186,12 +185,13 @@             sA_0123456789876543210     instance SShow (X a) => SShow (Y a) where       sShowsPrec ::-        forall (t1 :: GHC.Types.Nat) (t2 :: Y a) (t3 :: GHC.Types.Symbol).-        Sing t1-        -> Sing t2-           -> Sing t3-              -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))-                                                             -> Type) t1) t2) t3)+        forall (t1 :: GHC.Num.Natural.Natural)+               (t2 :: Y a)+               (t3 :: GHC.Types.Symbol). Sing t1+                                         -> Sing t2+                                            -> Sing t3+                                               -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Num.Natural.Natural ((~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+                                                                                              -> Type) t1) t2) t3)       sShowsPrec         _         SY1@@ -227,11 +227,15 @@       sing = SX1     instance SingI n => SingI (X2 (n :: Y a)) where       sing = SX2 sing+    instance SingI1 X2 where+      liftSing = SX2     instance SingI (X2Sym0 :: (~>) (Y a) (X (a :: Type))) where       sing = (singFun1 @X2Sym0) SX2     instance SingI Y1 where       sing = SY1     instance SingI n => SingI (Y2 (n :: X a)) where       sing = SY2 sing+    instance SingI1 Y2 where+      liftSing = SY2     instance SingI (Y2Sym0 :: (~>) (X a) (Y (a :: Type))) where       sing = (singFun1 @Y2Sym0) SY2
tests/compile-and-dump/Singletons/T376.golden view
@@ -28,8 +28,8 @@     type family F (a :: (~>) () ()) (a :: ()) :: () where       F g a_0123456789876543210 = Apply (g :: (~>) () ()) a_0123456789876543210     sF ::-      forall (t :: (~>) () ()) (t :: ()).-      Sing t -> Sing t -> Sing (Apply (Apply FSym0 t) t :: ())+      forall (t :: (~>) () ()) (t :: ()). Sing t+                                          -> Sing t -> Sing (Apply (Apply FSym0 t) t :: ())     sF       (sG :: Sing g)       (sA_0123456789876543210 :: Sing a_0123456789876543210)@@ -39,3 +39,6 @@     instance SingI d =>              SingI (FSym1 (d :: (~>) () ()) :: (~>) () ()) where       sing = (singFun1 @(FSym1 (d :: (~>) () ()))) (sF (sing @d))+    instance SingI1 (FSym1 :: (~>) () () -> (~>) () ()) where+      liftSing (s :: Sing (d :: (~>) () ()))+        = (singFun1 @(FSym1 (d :: (~>) () ()))) (sF s)
tests/compile-and-dump/Singletons/T378a.golden view
@@ -53,13 +53,16 @@     type family ConstBA (a :: a) (a :: b) :: a where       ConstBA x _ = x     sConstBA ::-      forall b a (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply ConstBASym0 t) t :: a)+      forall b a (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply ConstBASym0 t) t :: a)     sConstBA (sX :: Sing x) _ = sX     instance SingI (ConstBASym0 :: (~>) a ((~>) b a)) where       sing = (singFun2 @ConstBASym0) sConstBA     instance SingI d => SingI (ConstBASym1 (d :: a) :: (~>) b a) where       sing = (singFun1 @(ConstBASym1 (d :: a))) (sConstBA (sing @d))+    instance SingI1 (ConstBASym1 :: a -> (~>) b a) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(ConstBASym1 (d :: a))) (sConstBA s)     data SProxy :: forall k (a :: k). Proxy a -> Type       where         SProxy1 :: forall a. SProxy (Proxy1 :: Proxy a)
tests/compile-and-dump/Singletons/T378b.golden view
@@ -84,11 +84,11 @@     type PC :: forall b a. a -> b -> Constraint     class PC x y     sNatMinus ::-      forall (t :: Nat) (t :: Nat).-      Sing t -> Sing t -> Sing (Apply (Apply NatMinusSym0 t) t :: Nat)+      forall (t :: Nat) (t :: Nat). Sing t+                                    -> Sing t -> Sing (Apply (Apply NatMinusSym0 t) t :: Nat)     sF ::-      forall b a (t :: a) (t :: b).-      Sing t -> Sing t -> Sing (Apply (Apply FSym0 t) t :: ())+      forall b a (t :: a) (t :: b). Sing t+                                    -> Sing t -> Sing (Apply (Apply FSym0 t) t :: ())     sNatMinus SZero _ = SZero     sNatMinus (SSucc (sA :: Sing a)) (SSucc (sB :: Sing b))       = (applySing ((applySing ((singFun2 @NatMinusSym0) sNatMinus)) sA))@@ -109,16 +109,21 @@     instance SingI d =>              SingI (NatMinusSym1 (d :: Nat) :: (~>) Nat Nat) where       sing = (singFun1 @(NatMinusSym1 (d :: Nat))) (sNatMinus (sing @d))+    instance SingI1 (NatMinusSym1 :: Nat -> (~>) Nat Nat) where+      liftSing (s :: Sing (d :: Nat))+        = (singFun1 @(NatMinusSym1 (d :: Nat))) (sNatMinus s)     instance SingI (FSym0 :: (~>) a ((~>) b ())) where       sing = (singFun2 @FSym0) sF     instance SingI d => SingI (FSym1 (d :: a) :: (~>) b ()) where       sing = (singFun1 @(FSym1 (d :: a))) (sF (sing @d))+    instance SingI1 (FSym1 :: a -> (~>) b ()) where+      liftSing (s :: Sing (d :: a)) = (singFun1 @(FSym1 (d :: a))) (sF s)     type SD :: forall b a (x :: a) (y :: b). D x y -> Type     data SD :: forall b a (x :: a) (y :: b). D x y -> Type     type instance Sing @(D x y) = SD     instance (SingKind x, SingKind y) => SingKind (D x y) where       type Demote (D x y) = D (Demote x) (Demote y)-      fromSing x = case x of-      toSing x = SomeSing (case x of)+      fromSing x = case x of {}+      toSing x = SomeSing (case x of {})     class SC x y     type SC :: forall b a. a -> b -> Constraint
tests/compile-and-dump/Singletons/T401.golden view
@@ -1,13 +1,13 @@ -Singletons/T401.hs:0:0: error:-    `singletons-th` does not support higher-rank `forall`s-In the type: (forall a_0 . a_0 -> a_0) -> b_1 -> b_1-+Singletons/T401.hs:0:0: error: Q monad failure   | 5 | $(singletons [d|   |  ^^^^^^^^^^^^^^^... -Singletons/T401.hs:0:0: error: Q monad failure+Singletons/T401.hs:0:0: error:+    `singletons-th` does not support higher-rank `forall`s+In the type: (forall a_0 . a_0 -> a_0) -> b_1 -> b_1+   | 5 | $(singletons [d|   |  ^^^^^^^^^^^^^^^...
tests/compile-and-dump/Singletons/T401b.golden view
@@ -1,13 +1,13 @@ -Singletons/T401b.hs:0:0: error:-    `singletons-th` does not support higher-rank `forall`s-In the type: (forall a_0 . a_0) -> T_1-+Singletons/T401b.hs:0:0: error: Q monad failure   | 5 | $(singletons [d|   |  ^^^^^^^^^^^^^^^... -Singletons/T401b.hs:0:0: error: Q monad failure+Singletons/T401b.hs:0:0: error:+    `singletons-th` does not support higher-rank `forall`s+In the type: (forall a_0 . a_0) -> T_1+   | 5 | $(singletons [d|   |  ^^^^^^^^^^^^^^^...
tests/compile-and-dump/Singletons/T410.golden view
@@ -32,7 +32,7 @@     type family EqualsSym2 (a0123456789876543210 :: a) (a0123456789876543210 :: a) :: Bool where       EqualsSym2 a0123456789876543210 a0123456789876543210 = Equals a0123456789876543210 a0123456789876543210     class PEq a where-      type Equals (arg :: a) (arg :: a) :: Bool+      type family Equals (arg :: a) (arg :: a) :: Bool     type Equals_0123456789876543210 :: () -> () -> Bool     type family Equals_0123456789876543210 (a :: ()) (a :: ()) :: Bool where       Equals_0123456789876543210 '() '() = TrueSym0
tests/compile-and-dump/Singletons/T412.golden view
@@ -144,7 +144,7 @@       M1Sym2 a0123456789876543210 a0123456789876543210 = M1 a0123456789876543210 a0123456789876543210     infix 6 `M1Sym2`     class PC1 a b where-      type M1 (arg :: a) (arg :: b) :: Bool+      type family M1 (arg :: a) (arg :: b) :: Bool       infix 6 `M1`     infixr 5 `sD1B`     infixr 5 `sD1A`@@ -169,25 +169,35 @@       type Demote (D1 a b) = D1 (Demote a) (Demote b)       fromSing (SMkD1 b b) = (MkD1 (fromSing b)) (fromSing b)       toSing (MkD1 (b :: Demote a) (b :: Demote b))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkD1 c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkD1 c) c)     class SC1 a b where       sM1 ::-        forall (t :: a) (t :: b).-        Sing t -> Sing t -> Sing (Apply (Apply M1Sym0 t) t :: Bool)+        forall (t :: a) (t :: b). Sing t+                                  -> Sing t -> Sing (Apply (Apply M1Sym0 t) t :: Bool)       infix 6 `sM1`     instance (SingI n, SingI n) => SingI (MkD1 (n :: a) (n :: b)) where       sing = (SMkD1 sing) sing+    instance SingI n => SingI1 (MkD1 (n :: a)) where+      liftSing = SMkD1 sing+    instance SingI2 MkD1 where+      liftSing2 = SMkD1     instance SingI (MkD1Sym0 :: (~>) a ((~>) b (D1 a b))) where       sing = (singFun2 @MkD1Sym0) SMkD1     instance SingI d =>              SingI (MkD1Sym1 (d :: a) :: (~>) b (D1 a b)) where       sing = (singFun1 @(MkD1Sym1 (d :: a))) (SMkD1 (sing @d))+    instance SingI1 (MkD1Sym1 :: a -> (~>) b (D1 a b)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(MkD1Sym1 (d :: a))) (SMkD1 s)     instance SC1 a b => SingI (M1Sym0 :: (~>) a ((~>) b Bool)) where       sing = (singFun2 @M1Sym0) sM1     instance (SC1 a b, SingI d) =>              SingI (M1Sym1 (d :: a) :: (~>) b Bool) where       sing = (singFun1 @(M1Sym1 (d :: a))) (sM1 (sing @d))+    instance SC1 a b => SingI1 (M1Sym1 :: a -> (~>) b Bool) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(M1Sym1 (d :: a))) (sM1 s) Singletons/T412.hs:0:0:: Splicing declarations     genSingletons [''C2, ''T2a, ''T2b, ''D2]   ======>@@ -215,13 +225,13 @@     infix 6 `M2Sym2`     type PC2 :: GHC.Types.Type -> GHC.Types.Type -> Constraint     class PC2 (a :: GHC.Types.Type) (b :: GHC.Types.Type) where-      type M2 (arg :: a) (arg :: b) :: Bool+      type family M2 (arg :: a) (arg :: b) :: Bool     infix 5 `PC2`     infix 6 `M2`     class SC2 (a :: GHC.Types.Type) (b :: GHC.Types.Type) where       sM2 ::-        forall (t :: a) (t :: b).-        Sing t -> Sing t -> Sing (Apply (Apply M2Sym0 t) t :: Bool)+        forall (t :: a) (t :: b). Sing t+                                  -> Sing t -> Sing (Apply (Apply M2Sym0 t) t :: Bool)     type SC2 :: GHC.Types.Type -> GHC.Types.Type -> Constraint     infix 5 `SC2`     infix 6 `sM2`@@ -230,6 +240,9 @@     instance (SC2 a b, SingI d) =>              SingI (M2Sym1 (d :: a) :: (~>) b Bool) where       sing = (singFun1 @(M2Sym1 (d :: a))) (sM2 (sing @d))+    instance SC2 a b => SingI1 (M2Sym1 :: a -> (~>) b Bool) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(M2Sym1 (d :: a))) (sM2 s)     type T2aSym0 :: (~>) GHC.Types.Type ((~>) GHC.Types.Type GHC.Types.Type)     data T2aSym0 :: (~>) GHC.Types.Type ((~>) GHC.Types.Type GHC.Types.Type)       where@@ -277,8 +290,7 @@       T2bSym2 a0123456789876543210 a0123456789876543210 = T2b a0123456789876543210 a0123456789876543210     infixl 5 `T2bSym2`     type MkD2Sym0 :: forall (a :: GHC.Types.Type)-                            (b :: GHC.Types.Type).-                     (~>) a ((~>) b (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)))+                            (b :: GHC.Types.Type). (~>) a ((~>) b (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)))     data MkD2Sym0 :: (~>) a ((~>) b (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)))       where         MkD2Sym0KindInference :: SameKind (Apply MkD2Sym0 arg) (MkD2Sym1 arg) =>@@ -288,8 +300,8 @@       suppressUnusedWarnings = snd (((,) MkD2Sym0KindInference) ())     infixr 5 `MkD2Sym0`     type MkD2Sym1 :: forall (a :: GHC.Types.Type)-                            (b :: GHC.Types.Type).-                     a -> (~>) b (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type))+                            (b :: GHC.Types.Type). a+                                                   -> (~>) b (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type))     data MkD2Sym1 (a0123456789876543210 :: a) :: (~>) b (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type))       where         MkD2Sym1KindInference :: SameKind (Apply (MkD2Sym1 a0123456789876543210) arg) (MkD2Sym2 a0123456789876543210 arg) =>@@ -299,15 +311,16 @@       suppressUnusedWarnings = snd (((,) MkD2Sym1KindInference) ())     infixr 5 `MkD2Sym1`     type MkD2Sym2 :: forall (a :: GHC.Types.Type)-                            (b :: GHC.Types.Type).-                     a -> b -> D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)+                            (b :: GHC.Types.Type). a+                                                   -> b+                                                      -> D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)     type family MkD2Sym2 (a0123456789876543210 :: a) (a0123456789876543210 :: b) :: D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type) where       MkD2Sym2 a0123456789876543210 a0123456789876543210 = 'MkD2 a0123456789876543210 a0123456789876543210     infixr 5 `MkD2Sym2`     infixr 5 `D2A`     infixr 5 `D2B`-    type D2BSym0 :: forall (a :: GHC.Types.Type) (b :: GHC.Types.Type).-                    (~>) (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) b+    type D2BSym0 :: forall (a :: GHC.Types.Type)+                           (b :: GHC.Types.Type). (~>) (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) b     data D2BSym0 :: (~>) (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) b       where         D2BSym0KindInference :: SameKind (Apply D2BSym0 arg) (D2BSym1 arg) =>@@ -315,12 +328,13 @@     type instance Apply D2BSym0 a0123456789876543210 = D2B a0123456789876543210     instance SuppressUnusedWarnings D2BSym0 where       suppressUnusedWarnings = snd (((,) D2BSym0KindInference) ())-    type D2BSym1 :: forall (a :: GHC.Types.Type) (b :: GHC.Types.Type).-                    D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type) -> b+    type D2BSym1 :: forall (a :: GHC.Types.Type)+                           (b :: GHC.Types.Type). D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)+                                                  -> b     type family D2BSym1 (a0123456789876543210 :: D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) :: b where       D2BSym1 a0123456789876543210 = D2B a0123456789876543210-    type D2ASym0 :: forall (a :: GHC.Types.Type) (b :: GHC.Types.Type).-                    (~>) (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) a+    type D2ASym0 :: forall (a :: GHC.Types.Type)+                           (b :: GHC.Types.Type). (~>) (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) a     data D2ASym0 :: (~>) (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) a       where         D2ASym0KindInference :: SameKind (Apply D2ASym0 arg) (D2ASym1 arg) =>@@ -328,36 +342,39 @@     type instance Apply D2ASym0 a0123456789876543210 = D2A a0123456789876543210     instance SuppressUnusedWarnings D2ASym0 where       suppressUnusedWarnings = snd (((,) D2ASym0KindInference) ())-    type D2ASym1 :: forall (a :: GHC.Types.Type) (b :: GHC.Types.Type).-                    D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type) -> a+    type D2ASym1 :: forall (a :: GHC.Types.Type)+                           (b :: GHC.Types.Type). D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)+                                                  -> a     type family D2ASym1 (a0123456789876543210 :: D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) :: a where       D2ASym1 a0123456789876543210 = D2A a0123456789876543210-    type D2B :: forall (a :: GHC.Types.Type) (b :: GHC.Types.Type).-                D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type) -> b+    type D2B :: forall (a :: GHC.Types.Type)+                       (b :: GHC.Types.Type). D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)+                                              -> b     type family D2B (a :: D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) :: b where       D2B ('MkD2 _ field) = field-    type D2A :: forall (a :: GHC.Types.Type) (b :: GHC.Types.Type).-                D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type) -> a+    type D2A :: forall (a :: GHC.Types.Type)+                       (b :: GHC.Types.Type). D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)+                                              -> a     type family D2A (a :: D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) :: a where       D2A ('MkD2 field _) = field     sD2B ::       forall (a :: GHC.Types.Type)              (b :: GHC.Types.Type)-             (t :: D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)).-      Sing t -> Sing (Apply D2BSym0 t :: b)+             (t :: D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)). Sing t+                                                                    -> Sing (Apply D2BSym0 t :: b)     sD2A ::       forall (a :: GHC.Types.Type)              (b :: GHC.Types.Type)-             (t :: D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)).-      Sing t -> Sing (Apply D2ASym0 t :: a)+             (t :: D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)). Sing t+                                                                    -> Sing (Apply D2ASym0 t :: a)     sD2B (SMkD2 _ (sField :: Sing field)) = sField     sD2A (SMkD2 (sField :: Sing field) _) = sField     instance SingI (D2BSym0 :: (~>) (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) b) where       sing = (singFun1 @D2BSym0) sD2B     instance SingI (D2ASym0 :: (~>) (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)) a) where       sing = (singFun1 @D2ASym0) sD2A-    type SD2 :: forall (a :: GHC.Types.Type) (b :: GHC.Types.Type).-                D2 a b -> GHC.Types.Type+    type SD2 :: forall (a :: GHC.Types.Type)+                       (b :: GHC.Types.Type). D2 a b -> GHC.Types.Type     data SD2 :: forall (a :: GHC.Types.Type) (b :: GHC.Types.Type).                 D2 a b -> GHC.Types.Type       where@@ -373,16 +390,24 @@       type Demote (D2 a b) = D2 (Demote a) (Demote b)       fromSing (SMkD2 b b) = (MkD2 (fromSing b)) (fromSing b)       toSing (MkD2 (b :: Demote a) (b :: Demote b))-        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkD2 c) c) }+        = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkD2 c) c)     infixr 5 `SMkD2`     infixr 5 `sD2A`     infixr 5 `sD2B`     instance (SingI n, SingI n) =>              SingI ('MkD2 (n :: a) (n :: b)) where       sing = (SMkD2 sing) sing+    instance SingI n => SingI1 ('MkD2 (n :: a)) where+      liftSing = SMkD2 sing+    instance SingI2 'MkD2 where+      liftSing2 = SMkD2     instance SingI (MkD2Sym0 :: (~>) a ((~>) b (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type)))) where       sing = (singFun2 @MkD2Sym0) SMkD2     instance SingI d =>              SingI (MkD2Sym1 (d :: a) :: (~>) b (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type))) where       sing = (singFun1 @(MkD2Sym1 (d :: a))) (SMkD2 (sing @d))+    instance SingI1 (MkD2Sym1 :: a+                                 -> (~>) b (D2 (a :: GHC.Types.Type) (b :: GHC.Types.Type))) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @(MkD2Sym1 (d :: a))) (SMkD2 s)
tests/compile-and-dump/Singletons/T414.golden view
@@ -10,12 +10,12 @@             type T3 a b |]   ======>     class C1 (a :: Bool) where-      type T1 a b+      type family T1 a b     class C2 a where-      type T2 a b+      type family T2 a b     type C3 :: Bool -> Constraint     class C3 a where-      type T3 a b+      type family T3 a b     data T1Sym0 a0123456789876543210       where         T1Sym0KindInference :: SameKind (Apply T1Sym0 arg) (T1Sym1 arg) =>
tests/compile-and-dump/Singletons/T443.golden view
@@ -77,11 +77,11 @@     type family Head (a :: Vec (S n) a) :: a where       Head ((:>) field _) = field     sTail ::-      forall n a (t :: Vec (S n) a).-      Sing t -> Sing (Apply TailSym0 t :: Vec n a)+      forall n a (t :: Vec (S n) a). Sing t+                                     -> Sing (Apply TailSym0 t :: Vec n a)     sHead ::-      forall n a (t :: Vec (S n) a).-      Sing t -> Sing (Apply HeadSym0 t :: a)+      forall n a (t :: Vec (S n) a). Sing t+                                     -> Sing (Apply HeadSym0 t :: a)     sTail ((:%>) _ (sField :: Sing field)) = sField     sHead ((:%>) (sField :: Sing field) _) = sField     instance SingI (TailSym0 :: (~>) (Vec (S n) a) (Vec n a)) where@@ -103,6 +103,8 @@       sing = SZ     instance SingI n => SingI (S (n :: Nat)) where       sing = SS sing+    instance SingI1 S where+      liftSing = SS     instance SingI (SSym0 :: (~>) Nat Nat) where       sing = (singFun1 @SSym0) SS     instance SingI VNil where@@ -110,8 +112,16 @@     instance (SingI n, SingI n) =>              SingI ((:>) (n :: a) (n :: Vec n a)) where       sing = ((:%>) sing) sing+    instance SingI n => SingI1 ((:>) (n :: a)) where+      liftSing = (:%>) sing+    instance SingI2 (:>) where+      liftSing2 = (:%>)     instance SingI ((:>@#@$) :: (~>) a ((~>) (Vec n a) (Vec (S n) a))) where       sing = (singFun2 @(:>@#@$)) (:%>)     instance SingI d =>              SingI ((:>@#@$$) (d :: a) :: (~>) (Vec n a) (Vec (S n) a)) where       sing = (singFun1 @((:>@#@$$) (d :: a))) ((:%>) (sing @d))+    instance SingI1 ((:>@#@$$) :: a+                                  -> (~>) (Vec n a) (Vec (S n) a)) where+      liftSing (s :: Sing (d :: a))+        = (singFun1 @((:>@#@$$) (d :: a))) ((:%>) s)
tests/compile-and-dump/Singletons/T445.golden view
@@ -1,16 +1,16 @@ Singletons/T445.hs:0:0:: Splicing declarations     genDefunSymbols [''Lit]   ======>-    type LitSym0 :: (~>) Lit.Nat Nat-    data LitSym0 :: (~>) Lit.Nat Nat+    type LitSym0 :: (~>) Natural Nat+    data LitSym0 :: (~>) Natural Nat       where         LitSym0KindInference :: SameKind (Apply LitSym0 arg) (LitSym1 arg) =>                                 LitSym0 a0123456789876543210     type instance Apply LitSym0 a0123456789876543210 = Lit a0123456789876543210     instance SuppressUnusedWarnings LitSym0 where       suppressUnusedWarnings = snd (((,) LitSym0KindInference) ())-    type LitSym1 :: Lit.Nat -> Nat-    type family LitSym1 (a0123456789876543210 :: Lit.Nat) :: Nat where+    type LitSym1 :: Natural -> Nat+    type family LitSym1 (a0123456789876543210 :: Natural) :: Nat where       LitSym1 a0123456789876543210 = Lit a0123456789876543210 Singletons/T445.hs:(0,0)-(0,0): Splicing declarations     promoteOnly
tests/compile-and-dump/Singletons/T445.hs view
@@ -2,10 +2,11 @@  import Data.Singletons.TH import qualified GHC.TypeLits as Lit+import Numeric.Natural (Natural) import Prelude.Singletons import Singletons.Nat -type Lit :: Lit.Nat -> Nat+type Lit :: Natural -> Nat type family Lit n where   Lit 0 = Zero   Lit n = Succ (Lit (n Lit.- 1))
tests/compile-and-dump/Singletons/T450.golden view
@@ -10,15 +10,6 @@                   defunctionalizedName = \ n sat                                            -> defunctionalizedName                                                 defaultOptions (customPromote customs n) sat}-       ageDecs <- withOptions-                    (customOptions-                       [(''Age, ''PAge), ('MkAge, 'PMkAge), (''Natural, ''Nat)])-                    $ do ageDecs1 <- genSingletons [''Age]-                         ageDecs2 <- singletons-                                       [d| addAge :: Age -> Age -> Age-                                           addAge (MkAge (x :: Natural)) (MkAge (y :: Natural))-                                             = MkAge (x + y :: Natural) |]-                         pure $ ageDecs1 ++ ageDecs2        messageDecs <- withOptions                         (customOptions                            [(''Message, ''PMessage), ('MkMessage, 'PMkMessage),@@ -43,73 +34,8 @@                                                        (MkFunction (g :: a -> b))                                                        = MkFunction (f . g :: a -> c) |]                               pure $ functionDecs1 ++ functionDecs2-       pure $ ageDecs ++ messageDecs ++ functionDecs+       pure $ messageDecs ++ functionDecs   ======>-    type PMkAgeSym0 :: (~>) Nat PAge-    data PMkAgeSym0 :: (~>) Nat PAge-      where-        PMkAgeSym0KindInference :: SameKind (Apply PMkAgeSym0 arg) (PMkAgeSym1 arg) =>-                                   PMkAgeSym0 a0123456789876543210-    type instance Apply PMkAgeSym0 a0123456789876543210 = 'PMkAge a0123456789876543210-    instance SuppressUnusedWarnings PMkAgeSym0 where-      suppressUnusedWarnings = snd (((,) PMkAgeSym0KindInference) ())-    type PMkAgeSym1 :: Nat -> PAge-    type family PMkAgeSym1 (a0123456789876543210 :: Nat) :: PAge where-      PMkAgeSym1 a0123456789876543210 = 'PMkAge a0123456789876543210-    type SAge :: PAge -> GHC.Types.Type-    data SAge :: PAge -> GHC.Types.Type-      where-        SMkAge :: forall (n :: Nat). (Sing n) -> SAge ('PMkAge n :: PAge)-    type instance Sing @PAge = SAge-    instance SingKind PAge where-      type Demote PAge = Age-      fromSing (SMkAge b) = MkAge (fromSing b)-      toSing (MkAge (b :: Demote Nat))-        = case toSing b :: SomeSing Nat of {-            SomeSing c -> SomeSing (SMkAge c) }-    instance SingI n => SingI ('PMkAge (n :: Nat)) where-      sing = SMkAge sing-    instance SingI (PMkAgeSym0 :: (~>) Nat PAge) where-      sing = (singFun1 @PMkAgeSym0) SMkAge-    addAge :: Age -> Age -> Age-    addAge (MkAge (x :: Natural)) (MkAge (y :: Natural))-      = MkAge ((x + y) :: Natural)-    type AddAgeSym0 :: (~>) PAge ((~>) PAge PAge)-    data AddAgeSym0 :: (~>) PAge ((~>) PAge PAge)-      where-        AddAgeSym0KindInference :: SameKind (Apply AddAgeSym0 arg) (AddAgeSym1 arg) =>-                                   AddAgeSym0 a0123456789876543210-    type instance Apply AddAgeSym0 a0123456789876543210 = AddAgeSym1 a0123456789876543210-    instance SuppressUnusedWarnings AddAgeSym0 where-      suppressUnusedWarnings = snd (((,) AddAgeSym0KindInference) ())-    type AddAgeSym1 :: PAge -> (~>) PAge PAge-    data AddAgeSym1 (a0123456789876543210 :: PAge) :: (~>) PAge PAge-      where-        AddAgeSym1KindInference :: SameKind (Apply (AddAgeSym1 a0123456789876543210) arg) (AddAgeSym2 a0123456789876543210 arg) =>-                                   AddAgeSym1 a0123456789876543210 a0123456789876543210-    type instance Apply (AddAgeSym1 a0123456789876543210) a0123456789876543210 = AddAge a0123456789876543210 a0123456789876543210-    instance SuppressUnusedWarnings (AddAgeSym1 a0123456789876543210) where-      suppressUnusedWarnings = snd (((,) AddAgeSym1KindInference) ())-    type AddAgeSym2 :: PAge -> PAge -> PAge-    type family AddAgeSym2 (a0123456789876543210 :: PAge) (a0123456789876543210 :: PAge) :: PAge where-      AddAgeSym2 a0123456789876543210 a0123456789876543210 = AddAge a0123456789876543210 a0123456789876543210-    type AddAge :: PAge -> PAge -> PAge-    type family AddAge (a :: PAge) (a :: PAge) :: PAge where-      AddAge ('PMkAge (x :: Nat)) ('PMkAge (y :: Nat)) = Apply PMkAgeSym0 (Apply (Apply (+@#@$) x) y :: Nat)-    sAddAge ::-      forall (t :: PAge) (t :: PAge).-      Sing t -> Sing t -> Sing (Apply (Apply AddAgeSym0 t) t :: PAge)-    sAddAge (SMkAge (sX :: Sing x)) (SMkAge (sY :: Sing y))-      = case ((,) (sX :: Sing x)) (sY :: Sing y) of {-          (,) (_ :: Sing (x :: Nat)) (_ :: Sing (y :: Nat))-            -> (applySing ((singFun1 @PMkAgeSym0) SMkAge))-                 ((applySing ((applySing ((singFun2 @(+@#@$)) (%+))) sX)) sY ::-                    Sing (Apply (Apply (+@#@$) x) y :: Nat)) }-    instance SingI (AddAgeSym0 :: (~>) PAge ((~>) PAge PAge)) where-      sing = (singFun2 @AddAgeSym0) sAddAge-    instance SingI d =>-             SingI (AddAgeSym1 (d :: PAge) :: (~>) PAge PAge) where-      sing = (singFun1 @(AddAgeSym1 (d :: PAge))) (sAddAge (sing @d))     type PMkMessageSym0 :: (~>) Symbol PMessage     data PMkMessageSym0 :: (~>) Symbol PMessage       where@@ -131,10 +57,12 @@       type Demote PMessage = Message       fromSing (SMkMessage b) = MkMessage (fromSing b)       toSing (MkMessage (b :: Demote Symbol))-        = case toSing b :: SomeSing Symbol of {-            SomeSing c -> SomeSing (SMkMessage c) }+        = case toSing b :: SomeSing Symbol of+            SomeSing c -> SomeSing (SMkMessage c)     instance SingI n => SingI ('PMkMessage (n :: Symbol)) where       sing = SMkMessage sing+    instance SingI1 'PMkMessage where+      liftSing = SMkMessage     instance SingI (PMkMessageSym0 :: (~>) Symbol PMessage) where       sing = (singFun1 @PMkMessageSym0) SMkMessage     appendMessage :: Message -> Message -> Message@@ -165,17 +93,17 @@     type family AppendMessage (a :: PMessage) (a :: PMessage) :: PMessage where       AppendMessage ('PMkMessage (x :: Symbol)) ('PMkMessage (y :: Symbol)) = Apply PMkMessageSym0 (Apply (Apply (<>@#@$) x) y :: Symbol)     sAppendMessage ::-      forall (t :: PMessage) (t :: PMessage).-      Sing t-      -> Sing t -> Sing (Apply (Apply AppendMessageSym0 t) t :: PMessage)+      forall (t :: PMessage) (t :: PMessage). Sing t+                                              -> Sing t+                                                 -> Sing (Apply (Apply AppendMessageSym0 t) t :: PMessage)     sAppendMessage       (SMkMessage (sX :: Sing x))       (SMkMessage (sY :: Sing y))-      = case ((,) (sX :: Sing x)) (sY :: Sing y) of {+      = case ((,) (sX :: Sing x)) (sY :: Sing y) of           (,) (_ :: Sing (x :: Symbol)) (_ :: Sing (y :: Symbol))             -> (applySing ((singFun1 @PMkMessageSym0) SMkMessage))                  ((applySing ((applySing ((singFun2 @(<>@#@$)) (%<>))) sX)) sY ::-                    Sing (Apply (Apply (<>@#@$) x) y :: Symbol)) }+                    Sing (Apply (Apply (<>@#@$) x) y :: Symbol))     instance SingI (AppendMessageSym0 :: (~>) PMessage ((~>) PMessage PMessage)) where       sing = (singFun2 @AppendMessageSym0) sAppendMessage     instance SingI d =>@@ -183,9 +111,13 @@       sing         = (singFun1 @(AppendMessageSym1 (d :: PMessage)))             (sAppendMessage (sing @d))+    instance SingI1 (AppendMessageSym1 :: PMessage+                                          -> (~>) PMessage PMessage) where+      liftSing (s :: Sing (d :: PMessage))+        = (singFun1 @(AppendMessageSym1 (d :: PMessage)))+            (sAppendMessage s)     type PMkFunctionSym0 :: forall (a :: GHC.Types.Type)-                                   (b :: GHC.Types.Type).-                            (~>) ((~>) a b) (PFunction (a :: GHC.Types.Type) (b :: GHC.Types.Type))+                                   (b :: GHC.Types.Type). (~>) ((~>) a b) (PFunction (a :: GHC.Types.Type) (b :: GHC.Types.Type))     data PMkFunctionSym0 :: (~>) ((~>) a b) (PFunction (a :: GHC.Types.Type) (b :: GHC.Types.Type))       where         PMkFunctionSym0KindInference :: SameKind (Apply PMkFunctionSym0 arg) (PMkFunctionSym1 arg) =>@@ -195,13 +127,12 @@       suppressUnusedWarnings         = snd (((,) PMkFunctionSym0KindInference) ())     type PMkFunctionSym1 :: forall (a :: GHC.Types.Type)-                                   (b :: GHC.Types.Type).-                            (~>) a b -> PFunction (a :: GHC.Types.Type) (b :: GHC.Types.Type)+                                   (b :: GHC.Types.Type). (~>) a b+                                                          -> PFunction (a :: GHC.Types.Type) (b :: GHC.Types.Type)     type family PMkFunctionSym1 (a0123456789876543210 :: (~>) a b) :: PFunction (a :: GHC.Types.Type) (b :: GHC.Types.Type) where       PMkFunctionSym1 a0123456789876543210 = 'PMkFunction a0123456789876543210     type SFunction :: forall (a :: GHC.Types.Type)-                             (b :: GHC.Types.Type).-                      PFunction a b -> GHC.Types.Type+                             (b :: GHC.Types.Type). PFunction a b -> GHC.Types.Type     data SFunction :: forall (a :: GHC.Types.Type)                              (b :: GHC.Types.Type).                       PFunction a b -> GHC.Types.Type@@ -216,10 +147,12 @@       type Demote (PFunction a b) = Function (Demote a) (Demote b)       fromSing (SMkFunction b) = MkFunction (fromSing b)       toSing (MkFunction (b :: Demote ((~>) a b)))-        = case toSing b :: SomeSing ((~>) a b) of {-            SomeSing c -> SomeSing (SMkFunction c) }+        = case toSing b :: SomeSing ((~>) a b) of+            SomeSing c -> SomeSing (SMkFunction c)     instance SingI n => SingI ('PMkFunction (n :: (~>) a b)) where       sing = SMkFunction sing+    instance SingI1 'PMkFunction where+      liftSing = SMkFunction     instance SingI (PMkFunctionSym0 :: (~>) ((~>) a b) (PFunction (a :: GHC.Types.Type) (b :: GHC.Types.Type))) where       sing = (singFun1 @PMkFunctionSym0) SMkFunction     composeFunction :: Function b c -> Function a b -> Function a c@@ -255,18 +188,17 @@     type family ComposeFunction (a :: PFunction b c) (a :: PFunction a b) :: PFunction a c where       ComposeFunction ('PMkFunction (f :: (~>) b c)) ('PMkFunction (g :: (~>) a b)) = Apply PMkFunctionSym0 (Apply (Apply (.@#@$) f) g :: (~>) a c)     sComposeFunction ::-      forall b c a (t :: PFunction b c) (t :: PFunction a b).-      Sing t-      -> Sing t-         -> Sing (Apply (Apply ComposeFunctionSym0 t) t :: PFunction a c)+      forall b c a (t :: PFunction b c) (t :: PFunction a b). Sing t+                                                              -> Sing t+                                                                 -> Sing (Apply (Apply ComposeFunctionSym0 t) t :: PFunction a c)     sComposeFunction       (SMkFunction (sF :: Sing f))       (SMkFunction (sG :: Sing g))-      = case ((,) (sF :: Sing f)) (sG :: Sing g) of {+      = case ((,) (sF :: Sing f)) (sG :: Sing g) of           (,) (_ :: Sing (f :: (~>) b c)) (_ :: Sing (g :: (~>) a b))             -> (applySing ((singFun1 @PMkFunctionSym0) SMkFunction))                  ((applySing ((applySing ((singFun3 @(.@#@$)) (%.))) sF)) sG ::-                    Sing (Apply (Apply (.@#@$) f) g :: (~>) a c)) }+                    Sing (Apply (Apply (.@#@$) f) g :: (~>) a c))     instance SingI (ComposeFunctionSym0 :: (~>) (PFunction b c) ((~>) (PFunction a b) (PFunction a c))) where       sing = (singFun2 @ComposeFunctionSym0) sComposeFunction     instance SingI d =>@@ -274,3 +206,8 @@       sing         = (singFun1 @(ComposeFunctionSym1 (d :: PFunction b c)))             (sComposeFunction (sing @d))+    instance SingI1 (ComposeFunctionSym1 :: PFunction b c+                                            -> (~>) (PFunction a b) (PFunction a c)) where+      liftSing (s :: Sing (d :: PFunction b c))+        = (singFun1 @(ComposeFunctionSym1 (d :: PFunction b c)))+            (sComposeFunction s)
tests/compile-and-dump/Singletons/T450.hs view
@@ -6,12 +6,7 @@ import Data.Text (Text) import Language.Haskell.TH (Name) import Prelude.Singletons-import GHC.TypeNats (Nat)-import Numeric.Natural (Natural) -newtype  Age =  MkAge Natural-newtype PAge = PMkAge Nat- newtype  Message =  MkMessage Text newtype PMessage = PMkMessage Symbol @@ -31,19 +26,6 @@                                (customPromote customs n) sat                          } -     ageDecs <--       withOptions (customOptions [ (''Age, ''PAge)-                                  , ('MkAge, 'PMkAge)-                                  , (''Natural, ''Nat)-                                  ]) $ do-         ageDecs1 <- genSingletons [''Age]-         ageDecs2 <- singletons [d|-           addAge :: Age -> Age -> Age-           addAge (MkAge (x :: Natural)) (MkAge (y :: Natural)) =-             MkAge (x + y :: Natural)-           |]-         pure $ ageDecs1 ++ ageDecs2-      messageDecs <-        withOptions (customOptions [ (''Message, ''PMessage)                                   , ('MkMessage, 'PMkMessage)@@ -68,4 +50,4 @@              MkFunction (f . g :: a -> c)            |]          pure $ functionDecs1 ++ functionDecs2-     pure $ ageDecs ++ messageDecs ++ functionDecs)+     pure $ messageDecs ++ functionDecs)
tests/compile-and-dump/Singletons/T470.golden view
@@ -58,11 +58,10 @@       fromSing (SMkT1 b) = MkT1 (fromSing b)       fromSing (SMkT2 b) = MkT2 (fromSing b)       toSing (MkT1 (b :: Demote a))-        = case toSing b :: SomeSing a of {-            SomeSing c -> SomeSing (SMkT1 c) }+        = case toSing b :: SomeSing a of SomeSing c -> SomeSing (SMkT1 c)       toSing (MkT2 (b :: Demote Void))-        = case toSing b :: SomeSing Void of {-            SomeSing c -> SomeSing (SMkT2 c) }+        = case toSing b :: SomeSing Void of+            SomeSing c -> SomeSing (SMkT2 c)     data SS :: S -> Type       where SMkS :: forall (n :: Bool). !(Sing n) -> SS (MkS n :: S)     type instance Sing @S = SS@@ -70,18 +69,23 @@       type Demote S = S       fromSing (SMkS b) = MkS (fromSing b)       toSing (MkS (b :: Demote Bool))-        = case toSing b :: SomeSing Bool of {-            SomeSing c -> SomeSing (SMkS c) }+        = case toSing b :: SomeSing Bool of SomeSing c -> SomeSing (SMkS c)     instance SingI n => SingI (MkT1 (n :: a)) where       sing = SMkT1 sing+    instance SingI1 MkT1 where+      liftSing = SMkT1     instance SingI (MkT1Sym0 :: (~>) a (T a)) where       sing = (singFun1 @MkT1Sym0) SMkT1     instance SingI n => SingI (MkT2 (n :: Void)) where       sing = SMkT2 sing+    instance SingI1 MkT2 where+      liftSing = SMkT2     instance SingI (MkT2Sym0 :: (~>) Void (T a)) where       sing = (singFun1 @MkT2Sym0) SMkT2     instance SingI n => SingI (MkS (n :: Bool)) where       sing = SMkS sing+    instance SingI1 MkS where+      liftSing = SMkS     instance SingI (MkSSym0 :: (~>) Bool S) where       sing = (singFun1 @MkSSym0) SMkS 
+ tests/compile-and-dump/Singletons/T480.golden view
@@ -0,0 +1,14 @@++Singletons/T480.hs:0:0: error: Q monad failure+  |+5 | $(singletons+  |  ^^^^^^^^^^^...++Singletons/T480.hs:0:0: error:+    `singletons-th` does not support wildcard types+	unless they appear in visible type patterns of data constructors+	In the type: _++  |+5 | $(singletons+  |  ^^^^^^^^^^^...
+ tests/compile-and-dump/Singletons/T480.hs view
@@ -0,0 +1,8 @@+module T480 where++import Data.Singletons.TH++$(singletons+  [d| f :: _ -> _+      f x = x+  |])
+ tests/compile-and-dump/Singletons/T487.golden view
@@ -0,0 +1,73 @@+Singletons/T487.hs:(0,0)-(0,0): Splicing declarations+    singletonsOnly+      [d| exprEx :: Char+          exprEx = 'a'+          consEx :: Char -> Symbol+          consEx x = consSymbol x "bc"+          unconsEx :: Maybe (Char, Symbol)+          unconsEx = unconsSymbol "abc"+          natToCharEx :: Char+          natToCharEx = natToChar 97+          charToNatEx :: Natural+          charToNatEx = charToNat 'a' |]+  ======>+    type CharToNatExSym0 :: Natural+    type family CharToNatExSym0 :: Natural where+      CharToNatExSym0 = CharToNatEx+    type NatToCharExSym0 :: Char+    type family NatToCharExSym0 :: Char where+      NatToCharExSym0 = NatToCharEx+    type UnconsExSym0 :: Maybe (Char, Symbol)+    type family UnconsExSym0 :: Maybe (Char, Symbol) where+      UnconsExSym0 = UnconsEx+    type ConsExSym0 :: (~>) Char Symbol+    data ConsExSym0 :: (~>) Char Symbol+      where+        ConsExSym0KindInference :: SameKind (Apply ConsExSym0 arg) (ConsExSym1 arg) =>+                                   ConsExSym0 a0123456789876543210+    type instance Apply ConsExSym0 a0123456789876543210 = ConsEx a0123456789876543210+    instance SuppressUnusedWarnings ConsExSym0 where+      suppressUnusedWarnings = snd (((,) ConsExSym0KindInference) ())+    type ConsExSym1 :: Char -> Symbol+    type family ConsExSym1 (a0123456789876543210 :: Char) :: Symbol where+      ConsExSym1 a0123456789876543210 = ConsEx a0123456789876543210+    type ExprExSym0 :: Char+    type family ExprExSym0 :: Char where+      ExprExSym0 = ExprEx+    type CharToNatEx :: Natural+    type family CharToNatEx :: Natural where+      CharToNatEx = Apply CharToNatSym0 'a'+    type NatToCharEx :: Char+    type family NatToCharEx :: Char where+      NatToCharEx = Apply NatToCharSym0 (FromInteger 97)+    type UnconsEx :: Maybe (Char, Symbol)+    type family UnconsEx :: Maybe (Char, Symbol) where+      UnconsEx = Apply UnconsSymbolSym0 "abc"+    type ConsEx :: Char -> Symbol+    type family ConsEx (a :: Char) :: Symbol where+      ConsEx x = Apply (Apply ConsSymbolSym0 x) "bc"+    type ExprEx :: Char+    type family ExprEx :: Char where+      ExprEx = 'a'+    sCharToNatEx :: Sing (CharToNatExSym0 :: Natural)+    sNatToCharEx :: Sing (NatToCharExSym0 :: Char)+    sUnconsEx :: Sing (UnconsExSym0 :: Maybe (Char, Symbol))+    sConsEx ::+      forall (t :: Char). Sing t -> Sing (Apply ConsExSym0 t :: Symbol)+    sExprEx :: Sing (ExprExSym0 :: Char)+    sCharToNatEx+      = (applySing ((singFun1 @CharToNatSym0) sCharToNat))+          (sing :: Sing 'a')+    sNatToCharEx+      = (applySing ((singFun1 @NatToCharSym0) sNatToChar))+          (sFromInteger (sing :: Sing 97))+    sUnconsEx+      = (applySing ((singFun1 @UnconsSymbolSym0) sUnconsSymbol))+          (sing :: Sing "abc")+    sConsEx (sX :: Sing x)+      = (applySing+           ((applySing ((singFun2 @ConsSymbolSym0) sConsSymbol)) sX))+          (sing :: Sing "bc")+    sExprEx = sing :: Sing 'a'+    instance SingI (ConsExSym0 :: (~>) Char Symbol) where+      sing = (singFun1 @ConsExSym0) sConsEx
+ tests/compile-and-dump/Singletons/T487.hs view
@@ -0,0 +1,40 @@+module T487 where++import Data.Singletons.Base.TH+import GHC.TypeLits.Singletons+import Text.Show.Singletons++$(singletonsOnly [d|+  exprEx :: Char+  exprEx = 'a'++  consEx :: Char -> Symbol+  consEx x = consSymbol x "bc"++  unconsEx :: Maybe (Char, Symbol)+  unconsEx = unconsSymbol "abc"++  natToCharEx :: Char+  natToCharEx = natToChar 97++  charToNatEx :: Natural+  charToNatEx = charToNat 'a'+  |])++showCharTest :: Show_ ExprEx :~: "'a'"+showCharTest = Refl++showSymbolTest :: Show_ "Hello, World!" :~: "\"Hello, World!\""+showSymbolTest = Refl++consSymbolTest :: ConsEx 'a' :~: "abc"+consSymbolTest = Refl++unconsSymbolTest :: UnconsEx :~: Just '( 'a', "bc" )+unconsSymbolTest = Refl++natToCharTest :: NatToCharEx :~: 'a'+natToCharTest = Refl++charToNatTest :: CharToNatEx :~: 97+charToNatTest = Refl
+ tests/compile-and-dump/Singletons/T489.golden view
@@ -0,0 +1,60 @@+Singletons/T489.hs:(0,0)-(0,0): Splicing declarations+    singletons+      [d| blah :: Maybe a -> [a]+          blah (Just @a x) = [x :: a]+          blah (Nothing @a) = [] :: [a]+          flurmp :: Maybe () -> ()+          flurmp (Nothing @_) = ()+          flurmp (Just ()) = () |]+  ======>+    blah :: Maybe a -> [a]+    blah (Just @a x) = [x :: a]+    blah (Nothing @a) = [] :: [a]+    flurmp :: Maybe () -> ()+    flurmp (Nothing @_) = ()+    flurmp (Just ()) = ()+    type FlurmpSym0 :: (~>) (Maybe ()) ()+    data FlurmpSym0 :: (~>) (Maybe ()) ()+      where+        FlurmpSym0KindInference :: SameKind (Apply FlurmpSym0 arg) (FlurmpSym1 arg) =>+                                   FlurmpSym0 a0123456789876543210+    type instance Apply FlurmpSym0 a0123456789876543210 = Flurmp a0123456789876543210+    instance SuppressUnusedWarnings FlurmpSym0 where+      suppressUnusedWarnings = snd (((,) FlurmpSym0KindInference) ())+    type FlurmpSym1 :: Maybe () -> ()+    type family FlurmpSym1 (a0123456789876543210 :: Maybe ()) :: () where+      FlurmpSym1 a0123456789876543210 = Flurmp a0123456789876543210+    type BlahSym0 :: (~>) (Maybe a) [a]+    data BlahSym0 :: (~>) (Maybe a) [a]+      where+        BlahSym0KindInference :: SameKind (Apply BlahSym0 arg) (BlahSym1 arg) =>+                                 BlahSym0 a0123456789876543210+    type instance Apply BlahSym0 a0123456789876543210 = Blah a0123456789876543210+    instance SuppressUnusedWarnings BlahSym0 where+      suppressUnusedWarnings = snd (((,) BlahSym0KindInference) ())+    type BlahSym1 :: Maybe a -> [a]+    type family BlahSym1 (a0123456789876543210 :: Maybe a) :: [a] where+      BlahSym1 a0123456789876543210 = Blah a0123456789876543210+    type Flurmp :: Maybe () -> ()+    type family Flurmp (a :: Maybe ()) :: () where+      Flurmp ('Nothing @_) = Tuple0Sym0+      Flurmp ('Just '()) = Tuple0Sym0+    type Blah :: Maybe a -> [a]+    type family Blah (a :: Maybe a) :: [a] where+      Blah ('Just @a x) = Apply (Apply (:@#@$) (x :: a)) NilSym0+      Blah ('Nothing @a) = NilSym0 :: [a]+    sFlurmp ::+      forall (t :: Maybe ()). Sing t -> Sing (Apply FlurmpSym0 t :: ())+    sBlah ::+      forall a (t :: Maybe a). Sing t -> Sing (Apply BlahSym0 t :: [a])+    sFlurmp (SNothing @_) = STuple0+    sFlurmp (SJust STuple0) = STuple0+    sBlah (SJust @a (sX :: Sing x))+      = (applySing+           ((applySing ((singFun2 @(:@#@$)) SCons)) (sX :: Sing (x :: a))))+          SNil+    sBlah (SNothing @a) = SNil :: Sing (NilSym0 :: [a])+    instance SingI (FlurmpSym0 :: (~>) (Maybe ()) ()) where+      sing = (singFun1 @FlurmpSym0) sFlurmp+    instance SingI (BlahSym0 :: (~>) (Maybe a) [a]) where+      sing = (singFun1 @BlahSym0) sBlah
+ tests/compile-and-dump/Singletons/T489.hs view
@@ -0,0 +1,14 @@+module T489 where++import Data.Singletons.Base.TH+import Prelude.Singletons++$(singletons [d|+  blah :: Maybe a -> [a]+  blah (Just @a x)  = [x :: a]+  blah (Nothing @a) = [] :: [a]++  flurmp :: Maybe () -> ()+  flurmp (Nothing @_) = ()+  flurmp (Just ())    = ()+  |])
+ tests/compile-and-dump/Singletons/T492.golden view
+ tests/compile-and-dump/Singletons/T492.hs view
@@ -0,0 +1,25 @@+module T492 where++import Data.Functor.Const+import Data.Functor.Const.Singletons+import Data.Proxy+import Data.Proxy.Singletons+import Prelude.Singletons hiding (Const, ConstSym0, ConstSym1)++f :: Const Bool Ordering+f = Const @Bool @Ordering True++sF1 :: SConst ('Const @Bool @Ordering True)+sF1 = SConst @Bool @Ordering STrue++sF2 :: SConst (ConstSym0 @Bool @Ordering @@ True)+sF2 = singFun1 @(ConstSym0 @Bool @Ordering) SConst @@ STrue++sF3 :: SConst (ConstSym1 @Bool @Ordering True)+sF3 = SConst @Bool @Ordering STrue++sP1 :: SProxy ('Proxy @Bool)+sP1 = SProxy @Bool++sP2 :: SProxy (ProxySym0 @Bool)+sP2 = SProxy @Bool
tests/compile-and-dump/Singletons/T54.golden view
@@ -1,10 +1,10 @@ Singletons/T54.hs:(0,0)-(0,0): Splicing declarations     singletons       [d| g :: Bool -> Bool-          g e = (case [not] of { [_] -> not }) e |]+          g e = (case [not] of [_] -> not) e |]   ======>     g :: Bool -> Bool-    g e = (case [not] of { [_] -> not }) e+    g e = (case [not] of [_] -> not) e     data Let0123456789876543210Scrutinee_0123456789876543210Sym0 e0123456789876543210       where         Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>@@ -50,8 +50,8 @@             in               (id                  @(Sing (Case_0123456789876543210 e (Let0123456789876543210Scrutinee_0123456789876543210Sym1 e))))-                (case sScrutinee_0123456789876543210 of {-                   SCons _ SNil -> (singFun1 @NotSym0) sNot })))+                (case sScrutinee_0123456789876543210 of+                   SCons _ SNil -> (singFun1 @NotSym0) sNot)))           sE     instance SingI (GSym0 :: (~>) Bool Bool) where       sing = (singFun1 @GSym0) sG
tests/compile-and-dump/Singletons/TopLevelPatterns.golden view
@@ -54,8 +54,8 @@       toSing (Bar (b :: Demote Bool) (b :: Demote Bool))         = case               ((,) (toSing b :: SomeSing Bool)) (toSing b :: SomeSing Bool)-          of {-            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SBar c) c) }+          of+            (,) (SomeSing c) (SomeSing c) -> SomeSing ((SBar c) c)     instance SingI False where       sing = SFalse     instance SingI True where@@ -63,11 +63,18 @@     instance (SingI n, SingI n) =>              SingI (Bar (n :: Bool) (n :: Bool)) where       sing = (SBar sing) sing+    instance SingI n => SingI1 (Bar (n :: Bool)) where+      liftSing = SBar sing+    instance SingI2 Bar where+      liftSing2 = SBar     instance SingI (BarSym0 :: (~>) Bool ((~>) Bool Foo)) where       sing = (singFun2 @BarSym0) SBar     instance SingI d =>              SingI (BarSym1 (d :: Bool) :: (~>) Bool Foo) where       sing = (singFun1 @(BarSym1 (d :: Bool))) (SBar (sing @d))+    instance SingI1 (BarSym1 :: Bool -> (~>) Bool Foo) where+      liftSing (s :: Sing (d :: Bool))+        = (singFun1 @(BarSym1 (d :: Bool))) (SBar s) Singletons/TopLevelPatterns.hs:(0,0)-(0,0): Splicing declarations     singletons       [d| otherwise :: Bool@@ -290,17 +297,17 @@     sM       = (GHC.Base.id            @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SCons _                    (SCons (sY_0123456789876543210 :: Sing y_0123456789876543210) SNil)-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sL       = (GHC.Base.id            @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)                    (SCons _ SNil)-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sX_0123456789876543210       = (applySing            ((applySing ((singFun2 @(:@#@$)) SCons))@@ -312,15 +319,15 @@     sK       = (GHC.Base.id            @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SBar _ (sY_0123456789876543210 :: Sing y_0123456789876543210)-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sJ       = (GHC.Base.id            @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))-          (case sX_0123456789876543210 of {+          (case sX_0123456789876543210 of              SBar (sY_0123456789876543210 :: Sing y_0123456789876543210) _-               -> sY_0123456789876543210 })+               -> sY_0123456789876543210)     sX_0123456789876543210       = (applySing ((applySing ((singFun2 @BarSym0) SBar)) STrue))           ((applySing ((singFun1 @HSym0) sH)) SFalse)@@ -328,17 +335,17 @@       = (applySing            ((GHC.Base.id                @(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))-              (case sX_0123456789876543210 of {+              (case sX_0123456789876543210 of                  STuple2 _ (sY_0123456789876543210 :: Sing y_0123456789876543210)-                   -> sY_0123456789876543210 })))+                   -> sY_0123456789876543210)))           sA_0123456789876543210     sH (sA_0123456789876543210 :: Sing a_0123456789876543210)       = (applySing            ((GHC.Base.id                @(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))-              (case sX_0123456789876543210 of {+              (case sX_0123456789876543210 of                  STuple2 (sY_0123456789876543210 :: Sing y_0123456789876543210) _-                   -> sY_0123456789876543210 })))+                   -> sY_0123456789876543210)))           sA_0123456789876543210     sX_0123456789876543210       = (applySing@@ -349,19 +356,19 @@       = (applySing            ((GHC.Base.id                @(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))-              (case sX_0123456789876543210 of {+              (case sX_0123456789876543210 of                  SCons _                        (SCons (sY_0123456789876543210 :: Sing y_0123456789876543210) SNil)-                   -> sY_0123456789876543210 })))+                   -> sY_0123456789876543210)))           sA_0123456789876543210     sF (sA_0123456789876543210 :: Sing a_0123456789876543210)       = (applySing            ((GHC.Base.id                @(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))-              (case sX_0123456789876543210 of {+              (case sX_0123456789876543210 of                  SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)                        (SCons _ SNil)-                   -> sY_0123456789876543210 })))+                   -> sY_0123456789876543210)))           sA_0123456789876543210     sX_0123456789876543210       = (applySing