packages feed

typelet (empty) → 0.1.0.0

raw patch · 86 files changed

+7656/−0 lines, 86 filesdep +basedep +containersdep +doctestbuild-type:Customsetup-changed

Dependencies added: base, containers, doctest, ghc, ghc-tcplugin-api, tasty, tasty-hunit, tasty-quickcheck, typelet

Files

+ CHANGELOG.md view
@@ -0,0 +1,5 @@+# Revision history for typelet++## 0.1.0.0 -- 2021-12-17 ++* First version.
+ Setup.hs view
@@ -0,0 +1,9 @@+-- | Custom setup to support doctest+--+-- Taken directly from <https://hackage.haskell.org/package/cabal-doctest>.+module Main where++import Distribution.Extra.Doctest (defaultMainWithDoctests)++main :: IO ()+main = defaultMainWithDoctests "doctest-typelet"
+ doctest-examples/DoctestExamplesTypeLet.hs view
@@ -0,0 +1,168 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}+{-# LANGUAGE ScopedTypeVariables #-}++-- | Doctests to verify the plugin's custom type errors+--+-- Testing ghc type errors is a bit of a quagmire. For some use cases,+-- deferred type errors can be used to turn the compile time errors into+-- runtime errors which can then be tested in the usual way. However, this does+-- not work terribly well for constraints. There are various tickets open about+-- this, which (frustratingly) pull in opposite directions:+--+-- * <https://gitlab.haskell.org/ghc/ghc/-/issues/11197>+-- * <https://gitlab.haskell.org/ghc/ghc/-/issues/16249>+--+-- So instead we use docstring to do so, but that too is not that easy to get+-- working. The first problem is the right parameters must be passed to doctest,+-- in particular, the package flags. There are multiple ways to achieve this:+--+-- * <https://github.com/sol/doctest#running-doctest-for-a-cabal-package>+--+--   The readme on github suggests to run+--+--   > cabal repl --with-ghc=doctest+--+--   but this doesn't work terribly well with cabal's dependency resolution.+--+-- * <https://hackage.haskell.org/package/doctest>+--+--   The readme of the released package suggests simply constructing arguments+--   by hand+--+--   > main = doctest ["-isrc", "src/Main.hs"]+--+--   but this is painful; a realistic set of arguments, especially package+--   dependencies, is hard to construct manually in such a way that it+--   correctly integrates with dependency resolution.+--+-- * <https://github.com/phadej/cabal-extras/blob/master/cabal-docspec/MANUAL.md>+--+--   @cabal-docspec@ is an entirely alternative solution, but is not released.+--   It might warrant a closer look though; in particular, the fact that it+--   avoids interpreted code might help with the "self-dependency" issue listed+--   below (see also <https://github.com/sol/doctest/pull/217>).+--+-- * <https://hackage.haskell.org/package/cabal-doctest>+--+--   Technically deprecated, although it seems that it's being maintained still+--   and Oleg informs me that Andres Abel "undeprecated" it, whatever that means.+--+-- The last option seems to be the best, at present, but here two there are some+-- hurdles, some minor, some more significant.+--+-- * The setup instructions are pretty good, but the documentation is a little+--   confusing. In particular, the argument to @defaultMainWithDoctests@+--+--   <https://hackage.haskell.org/package/cabal-doctest-1.0.9/docs/Distribution-Extra-Doctest.html#v:defaultMainWithDoctests>+--+--   /must/ be the name of the /cabal component/ that is the test-suite+--   that is meant to run doctest; if that is wrong, simply nothing happens+--   (no @Build_doctests@ module is built, but nor is there an error message).+--+-- * cabal-doctest supports running doctest on the main library in a cabal file+--   as well as on executables, /but not on test suites/ (though it would be a+--   minor patch to address this). This matters because of the next problem:+--+-- * It seems to be impossible to load the @TypeLet@ plugin defined /in/ the+--   library while doctesting that same library. Using+--+--   > >>> :set -fplugin=TypeLet+--   > >>> (castEqual :: Int -> Int) 1+--+--   is accepted in the sense that ghc doesn't complain about TypeLet being an+--   unknown plugin (unlike when that name is changed to a non-existent+--   plugin), but the plugin nonetheless doesn't actually seem to load:+--   this examples leads to error about a missing @Equal Int Int@ instance.+--   I still do not understand what's happening here.+--+-- * We therefore have the doctests in this regular (non test-suite) module.+--   Of course, users would not need that executable, so both this example+--   executable as well as the doctest test suite that runs doctest /on/+--   this example executable as only built if with @+build-doctest-examples@.+module Main where++import TypeLet++-- $setup+-- >>> :set -fplugin=TypeLet+-- >>> :set -XScopedTypeVariables++{-------------------------------------------------------------------------------+  Tests proper+-------------------------------------------------------------------------------}++-- | Examples of casts between simple different types+--+-- >>> (castEqual :: Int -> Bool) 1+-- ...+-- ...Couldn't match...Int...Bool...+-- ...+--+-- >>> (castEqual :: Int -> Char) 1+-- ...+-- ...Couldn't match...Int...Char...+-- ...+simpleMismatch :: ()+simpleMismatch = ()++-- | Let with non-variable left-hand side+--+-- NOTE: We see this error multiple times, but that seems to be a doctest thing+-- rather than anything the plugin does: the more doctest test cases I add, the+-- more often I see the error repeated. In regular (non-doctest) code I don't+-- see those repeats.+--+-- >>> let aux :: Let Int Int => () ; aux = castEqual () in aux+-- ...+-- ...Let with non-variable LHS: Int := Int+-- ...+letWithNonVarLHS :: ()+letWithNonVarLHS = ()++-- | Recursive let bindings+--+-- I'm not actually sure how these could arise in practice, especially when we+-- have the skolem check in place as well. But perhaps it's possible with some+-- cunning scheme where we introduce regular (unification) variables that then+-- unify to skolem variables? For now we err on the side of caution and detect+-- this explicitly; we /may/ want to reconsider that at some point if the check+-- turns out to be expensive in practice.+--+-- >>> :{+--   let cycle :: (Let a b, Let b a) => (a, b) -> (a, b)+--       cycle (a, b) = (castEqual b, castEqual a)+--   in cycle ('a', 'b')+-- :}+-- ...+-- ...Cycle in type-level let bindings: a := b, b := a+-- ...+letCycle :: ()+letCycle = ()++-- | Non-skolem LHS+--+-- See 'NonSkolemLHS' for details.+--+-- >>> :{+--   \(x :: a) ->+--     let+--       y :: Let a Integer => a+--       y = castEqual (1 :: Integer)+--     in y+-- :}+-- ...+-- ...Let with non-skolem LHS: a := Integer+-- ...+letWithNonSkolemLHS :: ()+letWithNonSkolemLHS = ()++{-------------------------------------------------------------------------------+  Sanity check+-------------------------------------------------------------------------------}++-- | Make sure the plugin works (independent of doctest)+sanityCheck :: Int+sanityCheck = castEqual (1 :: Int)++main :: IO ()+main = print sanityCheck
+ doctest/DoctestTypeLet.hs view
@@ -0,0 +1,19 @@+-- | Doctest driver+--+-- This entire module is taken directly from+-- <https://hackage.haskell.org/package/cabal-doctest>.+module Main where++import Build_doctests (Component (..), components)+import Data.Foldable (for_)+import System.Environment (unsetEnv)+import Test.DocTest (doctest)++main :: IO ()+main = do+    for_ components $ \(Component name flags pkgs sources) -> do+      print name+      putStrLn "----------------------------------------"+      let args = flags ++ pkgs ++ sources+      unsetEnv "GHC_ENVIRONMENT"+      doctest args
+ src/TypeLet.hs view
@@ -0,0 +1,4 @@+module TypeLet (module X) where++import TypeLet.Plugin  as X+import TypeLet.UserAPI as X
+ src/TypeLet/Plugin.hs view
@@ -0,0 +1,111 @@+module TypeLet.Plugin (plugin) where++import Prelude hiding (cycle)++import Data.Traversable (forM)++import GHC.Plugins (Plugin(..), defaultPlugin, purePlugin)++import TypeLet.Plugin.Constraints+import TypeLet.Plugin.GhcTcPluginAPI+import TypeLet.Plugin.NameResolution+import TypeLet.Plugin.Substitution++{-------------------------------------------------------------------------------+  Top-level plumbing+-------------------------------------------------------------------------------}++plugin :: Plugin+plugin = defaultPlugin {+      pluginRecompile  = purePlugin+    , tcPlugin         = \_cmdline -> Just . mkTcPlugin $ TcPlugin {+                               tcPluginInit    = resolveNames+                             , tcPluginSolve   = solve+                             , tcPluginRewrite = \_st -> emptyUFM+                             , tcPluginStop    = \_st -> return ()+                             }+    }++{-------------------------------------------------------------------------------+  Constraint resolution++  General approach: regard @Let@ constraints as defining a substitution, and+  then resolve @Equal@ constraints by /applying/ that substitution and+  simplifying to a derived equality constraint (derived instead of a new wanted+  constraint, because we don't actually need the evidence).+-------------------------------------------------------------------------------}++-- | Main interface to constraint resolution+--+-- NOTE: For now we are completely ignoring the derived constraints.+solve :: ResolvedNames -> TcPluginSolver+solve rn given wanted+  | null wanted = simplifyGivens rn given+  | otherwise   = simplifyWanteds rn given wanted++-- | Simplify givens+--+-- We (currently?) never simplify any givens, so we just two empty lists,+-- indicating that there no constraints were removed and none got added.+simplifyGivens ::+     ResolvedNames  -- ^ Result of name resolution (during init)+  -> [Ct]           -- ^ Given constraints+  -> TcPluginM 'Solve TcPluginSolveResult+simplifyGivens _st _given = return $ TcPluginOk [] []++-- | Simplify wanteds+--+-- This function provides the key functionality of the plugin.+--+-- We resolve 'Equal' constraints to /nominal/ equality constraints: we want+-- 'cast' to resolve @Let@ bindings, but not additionally work as 'coerce'.+simplifyWanteds ::+     ResolvedNames  -- ^ Result of name resolution (during init)+  -> [Ct]           -- ^ Given constraints+  -> [Ct]           -- ^ Wanted constraints+  -> TcPluginM 'Solve TcPluginSolveResult+simplifyWanteds rn given wanted = do+    case parseAll (parseLet rn) given of+      Left err ->+        errWith $ formatInvalidLet <$> err+      Right lets -> do+        case letsToSubst lets of+          Left cycle ->+            errWith $ formatLetCycle cycle+          Right subst -> do+            (solved, new) <- fmap unzip $+              forM (parseAll' (withOrig (parseEqual rn)) wanted) $+                uncurry (solveEqual subst)+            return $ TcPluginOk solved new+  where+    -- Work-around bug in ghc, making sure the location is set correctly+    newWanted' :: CtLoc -> PredType -> TcPluginM 'Solve CtEvidence+    newWanted' l w = setCtLocM l $ newWanted l w++    errWith ::+         GenLocated CtLoc TcPluginErrorMessage+      -> TcPluginM 'Solve TcPluginSolveResult+    errWith (L l err) = do+        errAsTyp <- mkTcPluginErrorTy err+        mkErr <$> newWanted' l errAsTyp+      where+        mkErr :: CtEvidence -> TcPluginSolveResult+        mkErr = TcPluginContradiction . (:[]) . mkNonCanonical++    -- Solve an Equal constraint by applying the substitution and turning it+    -- into a nominal equality constraint+    solveEqual ::+         TCvSubst+      -> Ct                       -- Original Equal constraint+      -> GenLocated CtLoc CEqual  -- Parsed Equal constraint+      -> TcPluginM 'Solve ((EvTerm, Ct), Ct)+    solveEqual subst orig (L l parsed) = do+        ev <- newWanted' l $+                mkPrimEqPredRole+                  Nominal+                  (substTy subst (equalLHS parsed))+                  (substTy subst (equalRHS parsed))+        return (+            (evidenceEqual rn parsed, orig)+          , mkNonCanonical ev+          )
+ src/TypeLet/Plugin/Constraints.hs view
@@ -0,0 +1,172 @@+module TypeLet.Plugin.Constraints (+    -- * Constraints recognized by the plugin+    CEqual(..)+  , CLet(..)+    -- * Parsing+    -- ** Infrastructure+  , ParseResult(..)+  , parseAll+  , parseAll'+  , withOrig+    -- ** SPecific parsers+  , InvalidLet(..)+  , parseEqual+  , parseLet+    -- * Evidence construction+  , evidenceEqual+    -- * Formatting errors+  , formatCLet+  , formatInvalidLet+  ) where++import Data.Bifunctor+import Data.Void++import TypeLet.Plugin.GhcTcPluginAPI+import TypeLet.Plugin.NameResolution++{-------------------------------------------------------------------------------+  Constraints recognized by the plugin+-------------------------------------------------------------------------------}++data CLet = CLet {+      letKind :: Type+    , letLHS  :: TyVar+    , letRHS  :: Type+    }++data CEqual = CEqual {+      equalKind :: Type+    , equalLHS  :: Type+    , equalRHS  :: Type+    }++instance Outputable CLet where+  ppr (CLet k a b) = parens $ text "Let" <+> ppr k <+> ppr a <+> ppr b++instance Outputable CEqual where+  ppr (CEqual k a b) = parens $ text "Equal" <+> ppr k <+> ppr a <+> ppr b++{-------------------------------------------------------------------------------+  Parsing infrastructure+-------------------------------------------------------------------------------}++data ParseResult e a =+    -- | Parse successful+    ParseOk a++    -- | Different constraint than we're looking for (does not imply an error)+  | ParseNoMatch++    -- | Constraint of the shape we're looking for, but something is wrong+  | ParseError e+  deriving (Functor)++instance Bifunctor ParseResult where+  bimap _ g (ParseOk a)    = ParseOk (g a)+  bimap _ _ ParseNoMatch   = ParseNoMatch+  bimap f _ (ParseError e) = ParseError (f e)++-- | Apply parser to each value in turn, bailing at the first error+parseAll :: forall e a b. (a -> ParseResult e b) -> [a] -> Either e [b]+parseAll f = go []+  where+    go :: [b] -> [a] -> Either e [b]+    go acc []     = Right (reverse acc)+    go acc (a:as) = case f a of+                      ParseOk b    -> go (b:acc) as+                      ParseNoMatch -> go    acc  as+                      ParseError e -> Left e++-- | Variation on 'parseAll' which rules out the error case+parseAll' :: (a -> ParseResult Void b) -> [a] -> [b]+parseAll' f = aux . parseAll f+  where+    aux :: Either Void [b] -> [b]+    aux (Left  v)  = absurd v+    aux (Right bs) = bs++-- | Bundle the parse result with the original value+withOrig :: (a -> ParseResult e b) -> (a -> ParseResult e (a, b))+withOrig f x = fmap (x, ) $ f x++{-------------------------------------------------------------------------------+  Parser for specific constraints++  We can assume here that the constraint is kind correct, so if the class+  matches, we know how many arguments+-------------------------------------------------------------------------------}++data InvalidLet =+    -- | LHS should always be a variable+    NonVariableLHS Type Type Type++    -- | The LHS should be a /skolem/ variable+    --+    -- As for as ghc is concerned, the LHS should be an opaque type variable+    -- with unknown value (only the plugin knows); certainly, ghc should not+    -- try to unify it with anything.+  | NonSkolemLHS Type TyVar Type++parseLet ::+     ResolvedNames+  -> Ct+  -> ParseResult (GenLocated CtLoc InvalidLet) (GenLocated CtLoc CLet)+parseLet ResolvedNames{..} ct = bimap (L $ ctLoc ct) (L $ ctLoc ct) $+    case classifyPredType (ctPred ct) of+      ClassPred cls [k, a, b] | cls == clsLet ->+        case getTyVar_maybe a of+          Nothing ->+            ParseError $ NonVariableLHS k a b+          Just x  ->+            if isSkolemTyVar x+              then ParseOk    $ CLet         k x b+              else ParseError $ NonSkolemLHS k x b+      _otherwise ->+        ParseNoMatch++-- | Parse 'Equal' constraints+--+-- Kind-correct 'Equal' constraints of any form are ok, so this cannot return+-- errors.+parseEqual :: ResolvedNames -> Ct -> ParseResult Void (GenLocated CtLoc CEqual)+parseEqual ResolvedNames{..} ct = fmap (L $ ctLoc ct) $+    case classifyPredType (ctPred ct) of+      ClassPred cls [k, a, b] | cls == clsEqual ->+        ParseOk $ CEqual k a b+      _otherwise ->+        ParseNoMatch++{-------------------------------------------------------------------------------+  Evidence construction+-------------------------------------------------------------------------------}++-- | Evidence for an 'Equal' constraint+--+-- TODO: should we worry about producing an evidence term that prevents floating+-- stuff out of scope...? (the whole "coercions cannot simply be zapped" thing)+-- See also https://gitlab.haskell.org/ghc/ghc/-/issues/8095#note_108189 .+evidenceEqual :: ResolvedNames -> CEqual -> EvTerm+evidenceEqual ResolvedNames{..} (CEqual k a b) =+    evDataConApp+      (classDataCon clsEqual)+      [k, a, b]+      []++{-------------------------------------------------------------------------------+  Formatting errors+-------------------------------------------------------------------------------}++formatCLet :: CLet -> TcPluginErrorMessage+formatCLet (CLet _ a b) =+        PrintType (mkTyVarTy a)+    :|: Txt " := "+    :|: PrintType b++formatInvalidLet :: InvalidLet -> TcPluginErrorMessage+formatInvalidLet (NonVariableLHS _k a b) =+        Txt "Let with non-variable LHS: "+    :|: PrintType a :|: Txt " := " :|: PrintType b+formatInvalidLet (NonSkolemLHS _k a b) =+        Txt "Let with non-skolem LHS: "+    :|: PrintType (mkTyVarTy a) :|: Txt " := " :|: PrintType b
+ src/TypeLet/Plugin/GhcTcPluginAPI.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE CPP #-}++-- | Thin layer around ghc-tcplugin-api+module TypeLet.Plugin.GhcTcPluginAPI (+    -- * Standard exports+    module GHC.TcPlugin.API+  , module GHC.Utils.Outputable++    -- * Additional re-exports+    -- ** Type variables+  , TyVar+  , isSkolemTyVar+    -- ** Substitutions+  , TCvSubst+  , Subst.substTy+  , Subst.substTyWith+  , Subst.zipTvSubst+  , elemVarSet+  , tyCoVarsOfType+    -- ** Location information+  , GenLocated(L)+    -- ** Errors+  , Panic.panic+  ) where++import GHC.TcPlugin.API++#if MIN_VERSION_ghc(9,0,0)+import GHC.Core.TyCo.FVs (tyCoVarsOfType)+import GHC.Core.TyCo.Subst (TCvSubst)+import GHC.Tc.Utils.TcType (isSkolemTyVar)+import GHC.Types.SrcLoc (GenLocated(L))+import GHC.Types.Var (TyVar)+import GHC.Types.Var.Set (elemVarSet)++import qualified GHC.Core.TyCo.Subst as Subst+#endif++#if MIN_VERSION_ghc(9,2,0)+import GHC.Utils.Outputable+import qualified GHC.Utils.Panic as Panic+#else+-- for ghc < 9.0, needs ghc-tcplugin-api's re-export of GHC.Utils.Outputable+import GHC.Utils.Outputable hiding (panic)+import qualified GHC.Utils.Outputable as Panic+#endif++#if !MIN_VERSION_ghc(9,0,0)++import SrcLoc (GenLocated(L))+import Type (TyVar)+import VarSet (elemVarSet)+import TcType (TCvSubst, tyCoVarsOfType, isSkolemTyVar)++import qualified TcType as Subst++#endif+
+ src/TypeLet/Plugin/NameResolution.hs view
@@ -0,0 +1,43 @@+module TypeLet.Plugin.NameResolution (+    ResolvedNames(..)+  , resolveNames+  ) where++import TypeLet.Plugin.GhcTcPluginAPI++data ResolvedNames = ResolvedNames {+      clsEqual :: Class+    , clsLet   :: Class+    }++instance Outputable ResolvedNames where+  ppr ResolvedNames{..} = vcat [+        text "ResolvedNames {"+      , nest 2 $ vcat [+            text "clsEqual =" <+> ppr clsEqual+          , text "clsLet   =" <+> ppr clsLet+          ]+      , text "}"+      ]++resolveNames :: TcPluginM 'Init ResolvedNames+resolveNames = do+    m <- do r <- findImportedModule typeletMod (Just typeletPkg)+            case r of+              Found _ m  -> return m+              _otherwise -> panic $ "Could not find "+                                 ++ showSDocUnsafe (ppr typeletMod)++    -- Constraints handled by the plugin++    clsEqual <- tcLookupClass =<< lookupOrig m (mkTcOcc "Equal")+    clsLet   <- tcLookupClass =<< lookupOrig m (mkTcOcc "Let")++    return ResolvedNames{..}+  where+    typeletMod :: ModuleName+    typeletMod = mkModuleName "TypeLet.UserAPI"++    typeletPkg :: FastString+    typeletPkg = fsLit "typelet"+
+ src/TypeLet/Plugin/Substitution.hs view
@@ -0,0 +1,114 @@+module TypeLet.Plugin.Substitution (+    letsToSubst+  , Cycle(..)+  , formatLetCycle+  ) where++import Data.Bifunctor+import Data.Foldable (toList)+import Data.List (intersperse)+import Data.List.NonEmpty (NonEmpty(..))+import Data.Maybe (mapMaybe)++import qualified Data.Graph as G++import TypeLet.Plugin.Constraints+import TypeLet.Plugin.GhcTcPluginAPI++-- | Construct idempotent substitution+--+-- TODO: Not entirely sure if this is correct, might be too simplistic and/or an+-- abuse of the ghc API; it is a /whole/ lot simpler than @niFixTCvSubst@, which+-- is disconcerning. However, it seems to work for the examples so far; perhaps+-- our use case is simpler? Needs more thought.+letsToSubst ::+     [GenLocated CtLoc CLet]+  -> Either (Cycle (GenLocated CtLoc CLet)) TCvSubst+letsToSubst = fmap (uncurry zipTvSubst . unzip . go []) . inorder+  where+    go :: [(TyVar, Type)] -> [(TyVar, Type)] -> [(TyVar, Type)]+    go acc []         = acc+    go acc ((x, t):s) = go ((x, t) : map (second (subst1 x t)) acc) s++    subst1 :: TyVar -> Type -> Type -> Type+    subst1 x t = substTyWith [x] [t]++-- | Order the assignments+--+-- Suppose we have two assignments+--+-- > x := xT+-- > y := yT    where  x in (freevars yT)+--+-- Then the substitution should map @y@ to @(x := xT) yT@. We do this by+-- constructing the substitution in order, adding assignments one by one,+-- applying them to all assignments already in the accumulated substitution+-- as we go. In this example, this means adding @y := yT@ /first/, so that+-- we can apply @x := xT@ later (note that recursive definitions are+-- impossible in our use case).+--+-- In order to find the right order, we construct a graph of assignments. To+-- continue with our example, this graph will contain an edge+--+-- > (y := yT) -----> (x := xT)+--+-- The required assignment ordering is then obtained by topological sort.+inorder ::+     [GenLocated CtLoc CLet]+  -> Either (Cycle (GenLocated CtLoc CLet)) [(TyVar, Type)]+inorder lets =+    case cycles edges of+      c:_ -> Left c+      []  -> Right $ [+          (x, t)+        | (L _ (CLet _ x t), _, _) <- map nodeFromVertex $ G.topSort graph+        ]+  where+    graph          :: G.Graph+    nodeFromVertex :: G.Vertex -> (GenLocated CtLoc CLet, TyVar, [TyVar])+    _vertexFromKey :: TyVar -> Maybe G.Vertex+    (graph, nodeFromVertex, _vertexFromKey) = G.graphFromEdges edges++    edges :: [(GenLocated CtLoc CLet, TyVar, [TyVar])]+    edges = [+        ( l+        , y+        , [ x+          | L _ (CLet _ x _) <- lets+          , x `elemVarSet` (tyCoVarsOfType yT)+          ]+        )+      | l@(L _ (CLet _ y yT)) <- lets -- variables name match description above+      ]++-- | Format a cycle+--+-- We (arbitrarily) pick the first 'CLet' in the cycle for the location of the+-- error.+formatLetCycle ::+     Cycle (GenLocated CtLoc CLet)+  -> GenLocated CtLoc TcPluginErrorMessage+formatLetCycle (Cycle vs@(L l _ :| _)) = L l $+          Txt "Cycle in type-level let bindings: "+      :|: ( foldr1 (:|:)+          . intersperse (Txt ", ")+          . map (\(L _ l') -> formatCLet l')+          $ toList vs+          )++{-------------------------------------------------------------------------------+  Auxiliary+-------------------------------------------------------------------------------}++-- | Cycle in a graph+data Cycle a = Cycle (NonEmpty a)++cycles :: Ord key => [(node, key, [key])] -> [Cycle node]+cycles = mapMaybe aux . G.stronglyConnComp+  where+    aux :: G.SCC a -> Maybe (Cycle a)+    aux (G.AcyclicSCC _) = Nothing+    aux (G.CyclicSCC vs) =+        case vs of+          v:vs'      -> Just $ Cycle (v :| vs')+          _otherwise -> Nothing
+ src/TypeLet/UserAPI.hs view
@@ -0,0 +1,131 @@+module TypeLet.UserAPI (+    -- * Main classes+    Let+  , Equal+  , castEqual+    -- * Introduction forms+  , LetT(..)+  , letT+  , letT'+  , LetAs(..)+  , letAs+  , letAs'+    -- * Re-exports+  , Proxy(..)+  ) where++import Data.Proxy+import Unsafe.Coerce (unsafeCoerce)++{-------------------------------------------------------------------------------+  Main classes+-------------------------------------------------------------------------------}++-- | Type-level @let@+--+-- A constraint @Let x t@ where @x@ is an (existential) type variable and @t@+-- is an arbitrary type represents a type-level let binding @let x = t@.+--+-- o Introduction form+--+--   Type-level let bindings should be introduced using 'letT' or its slightly+--   higher level cousin, 'letAs'.+--+-- o Elimination form+--+--   To eliminate type-level let, use 'castEqual'.+class Let (a :: k) (b :: k)++-- | Reflexivity+--+-- A constraint @Let x t@, where @x@ is an existential (skolem) type variable+-- and @t@ is an arbitrary type, models a type-level @let x = t@. There is only+-- a single instance for @Let@: reflexivity (a type is equal to itself).+--+-- User code normally does not work with @Let@ directly, but instead uses one of+-- the introduction forms ('letT' and 'letAs') which take care to introduce+-- @Let@ constraints of the right shape. When @Let@ constraints are introduced+-- manually, the plugin will report a type error if+--+-- * The left-hand side is not a skolem type variable+-- * The set of let-bindings in scope are cyclic.+instance Let a a++-- | (Nominal) type equality, up to type-level let+--+-- This is a class without any definitions; 'Equal a b' is instead proved by+-- the plugin. Suppose we have a bunch of type-level let constraints in scope+--+-- > Let x1 t1+-- > Let x2 t2+-- > ...+--+-- Then if σ is the corresponding idempotent substitution, two types @a@ and @b@+-- are considered 'Equal' if @σ(a)@ and @σ(b)@ are nominally equal.+class Equal (a :: k) (b :: k)++-- | Type-safe cast, using 'Equal' as the notion of equality+--+-- See comments for 'Equal'.+castEqual :: Equal a b => a -> b+-- Implementation note: marking this as NOINLINE in an attempt to make sure that+-- @unsafeCoerce@ does not escape the scope of the evidence for @Equal@ (which,+-- even though trivial, at least records the full time of the LHS and RHS).+{-# NOINLINE castEqual #-}+castEqual = unsafeCoerce++{-------------------------------------------------------------------------------+  Introduction forms+-------------------------------------------------------------------------------}++-- | 'LetT' is used along with 'letT' to introduce type-level let bindings.+--+-- See 'letT' for more information.+data LetT (a :: k) where+  LetT :: Let b a => Proxy b -> LetT a++-- | Primitive way to introduce type-level let binding.+--+-- Usage:+--+-- > case letT (Proxy @t) of LetT (_ :: Proxy x) ->+--+-- This introduces a type-level let binding @x = t@.+letT :: Proxy a -> LetT a+{-# NOINLINE letT #-}+letT p = LetT p++-- | CPS form of 'letT'+--+-- While this is more convenient to use, the @r@ parameter itself requires+-- careful thought.+letT' :: forall r a. Proxy a -> (forall b. Let b a => Proxy b -> r) -> r+{-# NOINLINE letT' #-}+letT' pa k = case letT pa of LetT pb -> k pb++-- | Used together with 'letAs' to pair a type-level let binding with a cast+--+-- See 'letAs' for details.+data LetAs f (a :: k) where+  LetAs :: Let b a => f b -> LetAs f a++-- | Pair a type-level let binding with a cast+--+-- Often when we introduce a type-level let @x = t@, we then want to cast some+-- term @e :: t@ to a term @e :: x@; function 'letAs' does these two things in+-- one operation.+--+-- If we did the above as written, however, we would have a term @e :: x@ where+-- we know nothing about @x@ at all (unless we cast again). This is typically+-- not useful; instead, we go from a term @e :: f t@ to a term @e :: f x@,+-- let-binding the type index @t@ but not the functor @f@.+letAs :: f a -> LetAs f a+{-# NOINLINE letAs #-}+letAs x = LetAs x++-- | CPS form of 'letAs'+--+-- See also comments for 'letT''.+letAs' :: forall r f a. f a -> (forall b. Let b a => f b -> r) -> r+{-# NOINLINE letAs' #-}+letAs' fa k = case letAs fa of LetAs fb -> k fb
+ test/Test/Infra.hs view
@@ -0,0 +1,36 @@+module Test.Infra (+    HList(..)+  , T(..)+  , A(..)+  , B(..)+  , C(..)+  ) where++import Data.Kind+import GHC.TypeLits++data HList :: [Type] -> Type where+    HNil  :: HList '[]+    HCons :: x -> HList xs -> HList (x : xs)++data T :: Symbol -> Type where+    MkT :: T s+  deriving (Show, Eq)++data A = A deriving (Show, Eq)+data B = B deriving (Show, Eq)+data C = C deriving (Show, Eq)++{-------------------------------------------------------------------------------+  Infrastructure for testing++  These are standard definitions, and will definitely lead to quadratic core.+-------------------------------------------------------------------------------}++type family All (c :: k -> Constraint) (xs :: [k]) :: Constraint where+  All c '[]       = ()+  All c (x ': xs) = (c x, All c xs)++deriving instance All Show xs => Show (HList xs)+deriving instance All Eq   xs => Eq   (HList xs)+
+ test/Test/Sanity.hs view
@@ -0,0 +1,162 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}+-- {-# OPTIONS_GHC -ddump-ds-preopt -ddump-ds -ddump-simpl -ddump-to-file #-}++module Test.Sanity (tests) where++import Data.Functor.Identity++import TypeLet++import Test.Tasty+import Test.Tasty.HUnit+import Test.Tasty.QuickCheck++import Test.Infra++tests :: TestTree+tests = testGroup "Test.Sanity" [+      testGroup "simple" [+          testProperty  "reflexive"   $ castIsId castReflexive+        , testProperty  "singleLet"   $ castIsId castSingleLet+        , testProperty  "singleLetAs" $ castIsId castSingleLetAs+        ]+    , testGroup "HList" [+          testCase "Let"          $ testHList hlistLet+        , testCase "LetAs"        $ testHList hlistLetAs+        , testCase "LetAsCPS_bad" $ testHList hlistLetAsCPS_bad+        , testCase "LetAsCPS"     $ testHList hlistLetAsCPS+        ]+    , testGroup "Ap" [+          testCase "Let" $ testAp apLet+        ]+    ]++castIsId :: (Eq a, Show a, Arbitrary a) => (a -> a) -> a -> Property+castIsId f x = x === f x++testHList :: HList '[A, B, C] -> Assertion+testHList =+    assertEqual "" hlistBaseline++testAp ::+     (forall f r. Applicative f => (A -> B -> C -> r) -> f r)+  -> Assertion+testAp apTest =+    assertEqual "" (runIdentity $ apBaseline f) (runIdentity $ apTest f)+  where+    f :: A -> B -> C -> HList '[A, B, C]+    f x y z = HCons x $ HCons y $ HCons z $ HNil++{-------------------------------------------------------------------------------+  Simple casts+-------------------------------------------------------------------------------}++-- | Trivial test: no let-bounds+--+-- TODO: We should also make sure that non-type correct functions are rejected+-- (they are, just don't have a test for them currently)+castReflexive :: Int -> Int+castReflexive = castEqual++-- | Introduce single let binding, then cast there and back+castSingleLet :: Int -> Int+castSingleLet x =+    case letT (Proxy @Int) of+      LetT (_ :: Proxy t1) ->+        let y :: t1+            y = castEqual x+        in castEqual y++-- | Single let-as+castSingleLetAs :: Identity Int -> Identity Int+castSingleLetAs x =+    case letAs x of+      LetAs (x' :: Identity t1) ->+        castEqual x'++{-------------------------------------------------------------------------------+  Small versions of the 'HList' tests that we use for size measurements++  Since these work with only 3 indices, they are a bit more manageable for+  easy experimentation.+-------------------------------------------------------------------------------}++{-# NOINLINE hlistBaseline #-}+hlistBaseline :: HList '[A, B, C]+hlistBaseline =+      HCons A+    $ HCons B+    $ HCons C+    $ HNil++hlistLet :: HList '[A, B, C]+hlistLet =+    case letT (Proxy @(C : '[])) of { LetT (_ :: Proxy r2) ->+    case letT (Proxy @(B : r2))  of { LetT (_ :: Proxy r1) ->+    case letT (Proxy @(A : r1))  of { LetT (_ :: Proxy r0) ->++     let xs2 :: HList r2+         xs1 :: HList r1+         xs0 :: HList r0++         xs2 = castEqual (HCons C HNil)+         xs1 = castEqual (HCons B xs2)+         xs0 = castEqual (HCons A xs1)++     in castEqual xs0+    }}}++hlistLetAs :: HList '[A, B, C]+hlistLetAs =+    case letAs (HCons C HNil) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons B xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons A xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}++hlistLetAsCPS_bad :: HList '[A, B, C]+hlistLetAsCPS_bad =+    letAs' (HCons C HNil) $ \(xs02 :: HList t02) ->+    letAs' (HCons B xs02) $ \(xs01 :: HList t01) ->+    letAs' (HCons A xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00++hlistLetAsCPS :: HList '[A, B, C]+hlistLetAsCPS =+    letT' (Proxy @'[A, B, C]) $ \(_ :: Proxy r) -> castEqual $+      letAs' @(HList r) (HCons C HNil) $ \(xs02 :: HList t02) ->+      letAs' @(HList r) (HCons B xs02) $ \(xs01 :: HList t01) ->+      letAs' @(HList r) (HCons A xs01) $ \(xs00 :: HList t00) ->+        castEqual xs00++{-------------------------------------------------------------------------------+  Similarly, small versions of the @<*>@ tests.+-------------------------------------------------------------------------------}++apBaseline :: Applicative f => (A -> B -> C -> r) -> f r+apBaseline f =+        pure f+    <*> pure A+    <*> pure B+    <*> pure C++apLet :: forall f r. Applicative f => (A -> B -> C -> r) -> f r+apLet f =+    case letT (Proxy @(C -> r))   of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(B -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(A -> l01)) of { LetT (_ :: Proxy l00) ->++      let f00 :: f l00+          f01 :: f l01+          f02 :: f l02++          res :: f r++          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure A+          f02 = castEqual f01 <*> pure B+          res = castEqual f02 <*> pure C++      in res++    }}}
+ test/Test/Size/Ap/Baseline/Baseline010.hs view
@@ -0,0 +1,19 @@+module Test.Size.Ap.Baseline.Baseline010 where++import Test.Infra+import Test.Size.Ap.Index.Ix010++applyF :: Applicative f => F r -> f r+applyF f =+        pure f+        -- 00 .. 09+    <*> pure (MkT @"i00")+    <*> pure (MkT @"i01")+    <*> pure (MkT @"i02")+    <*> pure (MkT @"i03")+    <*> pure (MkT @"i04")+    <*> pure (MkT @"i05")+    <*> pure (MkT @"i06")+    <*> pure (MkT @"i07")+    <*> pure (MkT @"i08")+    <*> pure (MkT @"i09")
+ test/Test/Size/Ap/Baseline/Baseline020.hs view
@@ -0,0 +1,30 @@+module Test.Size.Ap.Baseline.Baseline020 where++import Test.Infra+import Test.Size.Ap.Index.Ix020++applyF :: Applicative f => F r -> f r+applyF f =+        pure f+        -- 00 .. 09+    <*> pure (MkT @"i00")+    <*> pure (MkT @"i01")+    <*> pure (MkT @"i02")+    <*> pure (MkT @"i03")+    <*> pure (MkT @"i04")+    <*> pure (MkT @"i05")+    <*> pure (MkT @"i06")+    <*> pure (MkT @"i07")+    <*> pure (MkT @"i08")+    <*> pure (MkT @"i09")+        -- 10 .. 19+    <*> pure (MkT @"i10")+    <*> pure (MkT @"i11")+    <*> pure (MkT @"i12")+    <*> pure (MkT @"i13")+    <*> pure (MkT @"i14")+    <*> pure (MkT @"i15")+    <*> pure (MkT @"i16")+    <*> pure (MkT @"i17")+    <*> pure (MkT @"i18")+    <*> pure (MkT @"i19")
+ test/Test/Size/Ap/Baseline/Baseline030.hs view
@@ -0,0 +1,41 @@+module Test.Size.Ap.Baseline.Baseline030 where++import Test.Infra+import Test.Size.Ap.Index.Ix030++applyF :: Applicative f => F r -> f r+applyF f =+        pure f+        -- 00 .. 09+    <*> pure (MkT @"i00")+    <*> pure (MkT @"i01")+    <*> pure (MkT @"i02")+    <*> pure (MkT @"i03")+    <*> pure (MkT @"i04")+    <*> pure (MkT @"i05")+    <*> pure (MkT @"i06")+    <*> pure (MkT @"i07")+    <*> pure (MkT @"i08")+    <*> pure (MkT @"i09")+        -- 10 .. 19+    <*> pure (MkT @"i10")+    <*> pure (MkT @"i11")+    <*> pure (MkT @"i12")+    <*> pure (MkT @"i13")+    <*> pure (MkT @"i14")+    <*> pure (MkT @"i15")+    <*> pure (MkT @"i16")+    <*> pure (MkT @"i17")+    <*> pure (MkT @"i18")+    <*> pure (MkT @"i19")+        -- 20 .. 29+    <*> pure (MkT @"i20")+    <*> pure (MkT @"i21")+    <*> pure (MkT @"i22")+    <*> pure (MkT @"i23")+    <*> pure (MkT @"i24")+    <*> pure (MkT @"i25")+    <*> pure (MkT @"i26")+    <*> pure (MkT @"i27")+    <*> pure (MkT @"i28")+    <*> pure (MkT @"i29")
+ test/Test/Size/Ap/Baseline/Baseline040.hs view
@@ -0,0 +1,52 @@+module Test.Size.Ap.Baseline.Baseline040 where++import Test.Infra+import Test.Size.Ap.Index.Ix040++applyF :: Applicative f => F r -> f r+applyF f =+        pure f+        -- 00 .. 09+    <*> pure (MkT @"i00")+    <*> pure (MkT @"i01")+    <*> pure (MkT @"i02")+    <*> pure (MkT @"i03")+    <*> pure (MkT @"i04")+    <*> pure (MkT @"i05")+    <*> pure (MkT @"i06")+    <*> pure (MkT @"i07")+    <*> pure (MkT @"i08")+    <*> pure (MkT @"i09")+        -- 10 .. 19+    <*> pure (MkT @"i10")+    <*> pure (MkT @"i11")+    <*> pure (MkT @"i12")+    <*> pure (MkT @"i13")+    <*> pure (MkT @"i14")+    <*> pure (MkT @"i15")+    <*> pure (MkT @"i16")+    <*> pure (MkT @"i17")+    <*> pure (MkT @"i18")+    <*> pure (MkT @"i19")+        -- 20 .. 29+    <*> pure (MkT @"i20")+    <*> pure (MkT @"i21")+    <*> pure (MkT @"i22")+    <*> pure (MkT @"i23")+    <*> pure (MkT @"i24")+    <*> pure (MkT @"i25")+    <*> pure (MkT @"i26")+    <*> pure (MkT @"i27")+    <*> pure (MkT @"i28")+    <*> pure (MkT @"i29")+        -- 30 .. 39+    <*> pure (MkT @"i30")+    <*> pure (MkT @"i31")+    <*> pure (MkT @"i32")+    <*> pure (MkT @"i33")+    <*> pure (MkT @"i34")+    <*> pure (MkT @"i35")+    <*> pure (MkT @"i36")+    <*> pure (MkT @"i37")+    <*> pure (MkT @"i38")+    <*> pure (MkT @"i39")
+ test/Test/Size/Ap/Baseline/Baseline050.hs view
@@ -0,0 +1,63 @@+module Test.Size.Ap.Baseline.Baseline050 where++import Test.Infra+import Test.Size.Ap.Index.Ix050++applyF :: Applicative f => F r -> f r+applyF f =+        pure f+        -- 00 .. 09+    <*> pure (MkT @"i00")+    <*> pure (MkT @"i01")+    <*> pure (MkT @"i02")+    <*> pure (MkT @"i03")+    <*> pure (MkT @"i04")+    <*> pure (MkT @"i05")+    <*> pure (MkT @"i06")+    <*> pure (MkT @"i07")+    <*> pure (MkT @"i08")+    <*> pure (MkT @"i09")+        -- 10 .. 19+    <*> pure (MkT @"i10")+    <*> pure (MkT @"i11")+    <*> pure (MkT @"i12")+    <*> pure (MkT @"i13")+    <*> pure (MkT @"i14")+    <*> pure (MkT @"i15")+    <*> pure (MkT @"i16")+    <*> pure (MkT @"i17")+    <*> pure (MkT @"i18")+    <*> pure (MkT @"i19")+        -- 20 .. 29+    <*> pure (MkT @"i20")+    <*> pure (MkT @"i21")+    <*> pure (MkT @"i22")+    <*> pure (MkT @"i23")+    <*> pure (MkT @"i24")+    <*> pure (MkT @"i25")+    <*> pure (MkT @"i26")+    <*> pure (MkT @"i27")+    <*> pure (MkT @"i28")+    <*> pure (MkT @"i29")+        -- 30 .. 39+    <*> pure (MkT @"i30")+    <*> pure (MkT @"i31")+    <*> pure (MkT @"i32")+    <*> pure (MkT @"i33")+    <*> pure (MkT @"i34")+    <*> pure (MkT @"i35")+    <*> pure (MkT @"i36")+    <*> pure (MkT @"i37")+    <*> pure (MkT @"i38")+    <*> pure (MkT @"i39")+        -- 40 .. 49+    <*> pure (MkT @"i40")+    <*> pure (MkT @"i41")+    <*> pure (MkT @"i42")+    <*> pure (MkT @"i43")+    <*> pure (MkT @"i44")+    <*> pure (MkT @"i45")+    <*> pure (MkT @"i46")+    <*> pure (MkT @"i47")+    <*> pure (MkT @"i48")+    <*> pure (MkT @"i49")
+ test/Test/Size/Ap/Baseline/Baseline060.hs view
@@ -0,0 +1,74 @@+module Test.Size.Ap.Baseline.Baseline060 where++import Test.Infra+import Test.Size.Ap.Index.Ix060++applyF :: Applicative f => F r -> f r+applyF f =+        pure f+        -- 00 .. 09+    <*> pure (MkT @"i00")+    <*> pure (MkT @"i01")+    <*> pure (MkT @"i02")+    <*> pure (MkT @"i03")+    <*> pure (MkT @"i04")+    <*> pure (MkT @"i05")+    <*> pure (MkT @"i06")+    <*> pure (MkT @"i07")+    <*> pure (MkT @"i08")+    <*> pure (MkT @"i09")+        -- 10 .. 19+    <*> pure (MkT @"i10")+    <*> pure (MkT @"i11")+    <*> pure (MkT @"i12")+    <*> pure (MkT @"i13")+    <*> pure (MkT @"i14")+    <*> pure (MkT @"i15")+    <*> pure (MkT @"i16")+    <*> pure (MkT @"i17")+    <*> pure (MkT @"i18")+    <*> pure (MkT @"i19")+        -- 20 .. 29+    <*> pure (MkT @"i20")+    <*> pure (MkT @"i21")+    <*> pure (MkT @"i22")+    <*> pure (MkT @"i23")+    <*> pure (MkT @"i24")+    <*> pure (MkT @"i25")+    <*> pure (MkT @"i26")+    <*> pure (MkT @"i27")+    <*> pure (MkT @"i28")+    <*> pure (MkT @"i29")+        -- 30 .. 39+    <*> pure (MkT @"i30")+    <*> pure (MkT @"i31")+    <*> pure (MkT @"i32")+    <*> pure (MkT @"i33")+    <*> pure (MkT @"i34")+    <*> pure (MkT @"i35")+    <*> pure (MkT @"i36")+    <*> pure (MkT @"i37")+    <*> pure (MkT @"i38")+    <*> pure (MkT @"i39")+        -- 40 .. 49+    <*> pure (MkT @"i40")+    <*> pure (MkT @"i41")+    <*> pure (MkT @"i42")+    <*> pure (MkT @"i43")+    <*> pure (MkT @"i44")+    <*> pure (MkT @"i45")+    <*> pure (MkT @"i46")+    <*> pure (MkT @"i47")+    <*> pure (MkT @"i48")+    <*> pure (MkT @"i49")+        -- 50 .. 59+    <*> pure (MkT @"i50")+    <*> pure (MkT @"i51")+    <*> pure (MkT @"i52")+    <*> pure (MkT @"i53")+    <*> pure (MkT @"i54")+    <*> pure (MkT @"i55")+    <*> pure (MkT @"i56")+    <*> pure (MkT @"i57")+    <*> pure (MkT @"i58")+    <*> pure (MkT @"i59")
+ test/Test/Size/Ap/Baseline/Baseline070.hs view
@@ -0,0 +1,85 @@+module Test.Size.Ap.Baseline.Baseline070 where++import Test.Infra+import Test.Size.Ap.Index.Ix070++applyF :: Applicative f => F r -> f r+applyF f =+        pure f+        -- 00 .. 09+    <*> pure (MkT @"i00")+    <*> pure (MkT @"i01")+    <*> pure (MkT @"i02")+    <*> pure (MkT @"i03")+    <*> pure (MkT @"i04")+    <*> pure (MkT @"i05")+    <*> pure (MkT @"i06")+    <*> pure (MkT @"i07")+    <*> pure (MkT @"i08")+    <*> pure (MkT @"i09")+        -- 10 .. 19+    <*> pure (MkT @"i10")+    <*> pure (MkT @"i11")+    <*> pure (MkT @"i12")+    <*> pure (MkT @"i13")+    <*> pure (MkT @"i14")+    <*> pure (MkT @"i15")+    <*> pure (MkT @"i16")+    <*> pure (MkT @"i17")+    <*> pure (MkT @"i18")+    <*> pure (MkT @"i19")+        -- 20 .. 29+    <*> pure (MkT @"i20")+    <*> pure (MkT @"i21")+    <*> pure (MkT @"i22")+    <*> pure (MkT @"i23")+    <*> pure (MkT @"i24")+    <*> pure (MkT @"i25")+    <*> pure (MkT @"i26")+    <*> pure (MkT @"i27")+    <*> pure (MkT @"i28")+    <*> pure (MkT @"i29")+        -- 30 .. 39+    <*> pure (MkT @"i30")+    <*> pure (MkT @"i31")+    <*> pure (MkT @"i32")+    <*> pure (MkT @"i33")+    <*> pure (MkT @"i34")+    <*> pure (MkT @"i35")+    <*> pure (MkT @"i36")+    <*> pure (MkT @"i37")+    <*> pure (MkT @"i38")+    <*> pure (MkT @"i39")+        -- 40 .. 49+    <*> pure (MkT @"i40")+    <*> pure (MkT @"i41")+    <*> pure (MkT @"i42")+    <*> pure (MkT @"i43")+    <*> pure (MkT @"i44")+    <*> pure (MkT @"i45")+    <*> pure (MkT @"i46")+    <*> pure (MkT @"i47")+    <*> pure (MkT @"i48")+    <*> pure (MkT @"i49")+        -- 50 .. 59+    <*> pure (MkT @"i50")+    <*> pure (MkT @"i51")+    <*> pure (MkT @"i52")+    <*> pure (MkT @"i53")+    <*> pure (MkT @"i54")+    <*> pure (MkT @"i55")+    <*> pure (MkT @"i56")+    <*> pure (MkT @"i57")+    <*> pure (MkT @"i58")+    <*> pure (MkT @"i59")+        -- 60 .. 69+    <*> pure (MkT @"i60")+    <*> pure (MkT @"i61")+    <*> pure (MkT @"i62")+    <*> pure (MkT @"i63")+    <*> pure (MkT @"i64")+    <*> pure (MkT @"i65")+    <*> pure (MkT @"i66")+    <*> pure (MkT @"i67")+    <*> pure (MkT @"i68")+    <*> pure (MkT @"i69")
+ test/Test/Size/Ap/Baseline/Baseline080.hs view
@@ -0,0 +1,96 @@+module Test.Size.Ap.Baseline.Baseline080 where++import Test.Infra+import Test.Size.Ap.Index.Ix080++applyF :: Applicative f => F r -> f r+applyF f =+        pure f+        -- 00 .. 09+    <*> pure (MkT @"i00")+    <*> pure (MkT @"i01")+    <*> pure (MkT @"i02")+    <*> pure (MkT @"i03")+    <*> pure (MkT @"i04")+    <*> pure (MkT @"i05")+    <*> pure (MkT @"i06")+    <*> pure (MkT @"i07")+    <*> pure (MkT @"i08")+    <*> pure (MkT @"i09")+        -- 10 .. 19+    <*> pure (MkT @"i10")+    <*> pure (MkT @"i11")+    <*> pure (MkT @"i12")+    <*> pure (MkT @"i13")+    <*> pure (MkT @"i14")+    <*> pure (MkT @"i15")+    <*> pure (MkT @"i16")+    <*> pure (MkT @"i17")+    <*> pure (MkT @"i18")+    <*> pure (MkT @"i19")+        -- 20 .. 29+    <*> pure (MkT @"i20")+    <*> pure (MkT @"i21")+    <*> pure (MkT @"i22")+    <*> pure (MkT @"i23")+    <*> pure (MkT @"i24")+    <*> pure (MkT @"i25")+    <*> pure (MkT @"i26")+    <*> pure (MkT @"i27")+    <*> pure (MkT @"i28")+    <*> pure (MkT @"i29")+        -- 30 .. 39+    <*> pure (MkT @"i30")+    <*> pure (MkT @"i31")+    <*> pure (MkT @"i32")+    <*> pure (MkT @"i33")+    <*> pure (MkT @"i34")+    <*> pure (MkT @"i35")+    <*> pure (MkT @"i36")+    <*> pure (MkT @"i37")+    <*> pure (MkT @"i38")+    <*> pure (MkT @"i39")+        -- 40 .. 49+    <*> pure (MkT @"i40")+    <*> pure (MkT @"i41")+    <*> pure (MkT @"i42")+    <*> pure (MkT @"i43")+    <*> pure (MkT @"i44")+    <*> pure (MkT @"i45")+    <*> pure (MkT @"i46")+    <*> pure (MkT @"i47")+    <*> pure (MkT @"i48")+    <*> pure (MkT @"i49")+        -- 50 .. 59+    <*> pure (MkT @"i50")+    <*> pure (MkT @"i51")+    <*> pure (MkT @"i52")+    <*> pure (MkT @"i53")+    <*> pure (MkT @"i54")+    <*> pure (MkT @"i55")+    <*> pure (MkT @"i56")+    <*> pure (MkT @"i57")+    <*> pure (MkT @"i58")+    <*> pure (MkT @"i59")+        -- 60 .. 69+    <*> pure (MkT @"i60")+    <*> pure (MkT @"i61")+    <*> pure (MkT @"i62")+    <*> pure (MkT @"i63")+    <*> pure (MkT @"i64")+    <*> pure (MkT @"i65")+    <*> pure (MkT @"i66")+    <*> pure (MkT @"i67")+    <*> pure (MkT @"i68")+    <*> pure (MkT @"i69")+        -- 70 .. 79+    <*> pure (MkT @"i70")+    <*> pure (MkT @"i71")+    <*> pure (MkT @"i72")+    <*> pure (MkT @"i73")+    <*> pure (MkT @"i74")+    <*> pure (MkT @"i75")+    <*> pure (MkT @"i76")+    <*> pure (MkT @"i77")+    <*> pure (MkT @"i78")+    <*> pure (MkT @"i79")
+ test/Test/Size/Ap/Baseline/Baseline090.hs view
@@ -0,0 +1,107 @@+module Test.Size.Ap.Baseline.Baseline090 where++import Test.Infra+import Test.Size.Ap.Index.Ix090++applyF :: Applicative f => F r -> f r+applyF f =+        pure f+        -- 00 .. 09+    <*> pure (MkT @"i00")+    <*> pure (MkT @"i01")+    <*> pure (MkT @"i02")+    <*> pure (MkT @"i03")+    <*> pure (MkT @"i04")+    <*> pure (MkT @"i05")+    <*> pure (MkT @"i06")+    <*> pure (MkT @"i07")+    <*> pure (MkT @"i08")+    <*> pure (MkT @"i09")+        -- 10 .. 19+    <*> pure (MkT @"i10")+    <*> pure (MkT @"i11")+    <*> pure (MkT @"i12")+    <*> pure (MkT @"i13")+    <*> pure (MkT @"i14")+    <*> pure (MkT @"i15")+    <*> pure (MkT @"i16")+    <*> pure (MkT @"i17")+    <*> pure (MkT @"i18")+    <*> pure (MkT @"i19")+        -- 20 .. 29+    <*> pure (MkT @"i20")+    <*> pure (MkT @"i21")+    <*> pure (MkT @"i22")+    <*> pure (MkT @"i23")+    <*> pure (MkT @"i24")+    <*> pure (MkT @"i25")+    <*> pure (MkT @"i26")+    <*> pure (MkT @"i27")+    <*> pure (MkT @"i28")+    <*> pure (MkT @"i29")+        -- 30 .. 39+    <*> pure (MkT @"i30")+    <*> pure (MkT @"i31")+    <*> pure (MkT @"i32")+    <*> pure (MkT @"i33")+    <*> pure (MkT @"i34")+    <*> pure (MkT @"i35")+    <*> pure (MkT @"i36")+    <*> pure (MkT @"i37")+    <*> pure (MkT @"i38")+    <*> pure (MkT @"i39")+        -- 40 .. 49+    <*> pure (MkT @"i40")+    <*> pure (MkT @"i41")+    <*> pure (MkT @"i42")+    <*> pure (MkT @"i43")+    <*> pure (MkT @"i44")+    <*> pure (MkT @"i45")+    <*> pure (MkT @"i46")+    <*> pure (MkT @"i47")+    <*> pure (MkT @"i48")+    <*> pure (MkT @"i49")+        -- 50 .. 59+    <*> pure (MkT @"i50")+    <*> pure (MkT @"i51")+    <*> pure (MkT @"i52")+    <*> pure (MkT @"i53")+    <*> pure (MkT @"i54")+    <*> pure (MkT @"i55")+    <*> pure (MkT @"i56")+    <*> pure (MkT @"i57")+    <*> pure (MkT @"i58")+    <*> pure (MkT @"i59")+        -- 60 .. 69+    <*> pure (MkT @"i60")+    <*> pure (MkT @"i61")+    <*> pure (MkT @"i62")+    <*> pure (MkT @"i63")+    <*> pure (MkT @"i64")+    <*> pure (MkT @"i65")+    <*> pure (MkT @"i66")+    <*> pure (MkT @"i67")+    <*> pure (MkT @"i68")+    <*> pure (MkT @"i69")+        -- 70 .. 79+    <*> pure (MkT @"i70")+    <*> pure (MkT @"i71")+    <*> pure (MkT @"i72")+    <*> pure (MkT @"i73")+    <*> pure (MkT @"i74")+    <*> pure (MkT @"i75")+    <*> pure (MkT @"i76")+    <*> pure (MkT @"i77")+    <*> pure (MkT @"i78")+    <*> pure (MkT @"i79")+        -- 80 .. 89+    <*> pure (MkT @"i80")+    <*> pure (MkT @"i81")+    <*> pure (MkT @"i82")+    <*> pure (MkT @"i83")+    <*> pure (MkT @"i84")+    <*> pure (MkT @"i85")+    <*> pure (MkT @"i86")+    <*> pure (MkT @"i87")+    <*> pure (MkT @"i88")+    <*> pure (MkT @"i89")
+ test/Test/Size/Ap/Baseline/Baseline100.hs view
@@ -0,0 +1,120 @@+module Test.Size.Ap.Baseline.Baseline100 where++import Test.Infra+import Test.Size.Ap.Index.Ix100++applyF :: Applicative f => F r -> f r+applyF f =+        pure f+        -- 00 .. 09+    <*> pure (MkT @"i00")+    <*> pure (MkT @"i01")+    <*> pure (MkT @"i02")+    <*> pure (MkT @"i03")+    <*> pure (MkT @"i04")+    <*> pure (MkT @"i05")+    <*> pure (MkT @"i06")+    <*> pure (MkT @"i07")+    <*> pure (MkT @"i08")+    <*> pure (MkT @"i09")+        -- 10 .. 19+    <*> pure (MkT @"i10")+    <*> pure (MkT @"i11")+    <*> pure (MkT @"i12")+    <*> pure (MkT @"i13")+    <*> pure (MkT @"i14")+    <*> pure (MkT @"i15")+    <*> pure (MkT @"i16")+    <*> pure (MkT @"i17")+    <*> pure (MkT @"i18")+    <*> pure (MkT @"i19")+        -- 20 .. 29+    <*> pure (MkT @"i20")+    <*> pure (MkT @"i21")+    <*> pure (MkT @"i22")+    <*> pure (MkT @"i23")+    <*> pure (MkT @"i24")+    <*> pure (MkT @"i25")+    <*> pure (MkT @"i26")+    <*> pure (MkT @"i27")+    <*> pure (MkT @"i28")+    <*> pure (MkT @"i29")+        -- 30 .. 39+    <*> pure (MkT @"i30")+    <*> pure (MkT @"i31")+    <*> pure (MkT @"i32")+    <*> pure (MkT @"i33")+    <*> pure (MkT @"i34")+    <*> pure (MkT @"i35")+    <*> pure (MkT @"i36")+    <*> pure (MkT @"i37")+    <*> pure (MkT @"i38")+    <*> pure (MkT @"i39")+        -- 40 .. 49+    <*> pure (MkT @"i40")+    <*> pure (MkT @"i41")+    <*> pure (MkT @"i42")+    <*> pure (MkT @"i43")+    <*> pure (MkT @"i44")+    <*> pure (MkT @"i45")+    <*> pure (MkT @"i46")+    <*> pure (MkT @"i47")+    <*> pure (MkT @"i48")+    <*> pure (MkT @"i49")+        -- 50 .. 59+    <*> pure (MkT @"i50")+    <*> pure (MkT @"i51")+    <*> pure (MkT @"i52")+    <*> pure (MkT @"i53")+    <*> pure (MkT @"i54")+    <*> pure (MkT @"i55")+    <*> pure (MkT @"i56")+    <*> pure (MkT @"i57")+    <*> pure (MkT @"i58")+    <*> pure (MkT @"i59")+        -- 60 .. 69+    <*> pure (MkT @"i60")+    <*> pure (MkT @"i61")+    <*> pure (MkT @"i62")+    <*> pure (MkT @"i63")+    <*> pure (MkT @"i64")+    <*> pure (MkT @"i65")+    <*> pure (MkT @"i66")+    <*> pure (MkT @"i67")+    <*> pure (MkT @"i68")+    <*> pure (MkT @"i69")+        -- 70 .. 79+    <*> pure (MkT @"i70")+    <*> pure (MkT @"i71")+    <*> pure (MkT @"i72")+    <*> pure (MkT @"i73")+    <*> pure (MkT @"i74")+    <*> pure (MkT @"i75")+    <*> pure (MkT @"i76")+    <*> pure (MkT @"i77")+    <*> pure (MkT @"i78")+    <*> pure (MkT @"i79")+        -- 80 .. 89+    <*> pure (MkT @"i80")+    <*> pure (MkT @"i81")+    <*> pure (MkT @"i82")+    <*> pure (MkT @"i83")+    <*> pure (MkT @"i84")+    <*> pure (MkT @"i85")+    <*> pure (MkT @"i86")+    <*> pure (MkT @"i87")+    <*> pure (MkT @"i88")+    <*> pure (MkT @"i89")+        -- 90 .. 99+    <*> pure (MkT @"i90")+    <*> pure (MkT @"i91")+    <*> pure (MkT @"i92")+    <*> pure (MkT @"i93")+    <*> pure (MkT @"i94")+    <*> pure (MkT @"i95")+    <*> pure (MkT @"i96")+    <*> pure (MkT @"i97")+    <*> pure (MkT @"i98")+    <*> pure (MkT @"i99")++
+ test/Test/Size/Ap/Index/Ix010.hs view
@@ -0,0 +1,17 @@+module Test.Size.Ap.Index.Ix010 (F) where++import Test.Infra++type F r =+       -- 00 .. 09+       T "i00"+    -> T "i01"+    -> T "i02"+    -> T "i03"+    -> T "i04"+    -> T "i05"+    -> T "i06"+    -> T "i07"+    -> T "i08"+    -> T "i09"+    -> r
+ test/Test/Size/Ap/Index/Ix020.hs view
@@ -0,0 +1,28 @@+module Test.Size.Ap.Index.Ix020 (F) where++import Test.Infra++type F r =+       -- 00 .. 09+       T "i00"+    -> T "i01"+    -> T "i02"+    -> T "i03"+    -> T "i04"+    -> T "i05"+    -> T "i06"+    -> T "i07"+    -> T "i08"+    -> T "i09"+       -- 10 .. 19+    -> T "i10"+    -> T "i11"+    -> T "i12"+    -> T "i13"+    -> T "i14"+    -> T "i15"+    -> T "i16"+    -> T "i17"+    -> T "i18"+    -> T "i19"+    -> r
+ test/Test/Size/Ap/Index/Ix030.hs view
@@ -0,0 +1,39 @@+module Test.Size.Ap.Index.Ix030 (F) where++import Test.Infra++type F r =+       -- 00 .. 09+       T "i00"+    -> T "i01"+    -> T "i02"+    -> T "i03"+    -> T "i04"+    -> T "i05"+    -> T "i06"+    -> T "i07"+    -> T "i08"+    -> T "i09"+       -- 10 .. 19+    -> T "i10"+    -> T "i11"+    -> T "i12"+    -> T "i13"+    -> T "i14"+    -> T "i15"+    -> T "i16"+    -> T "i17"+    -> T "i18"+    -> T "i19"+       -- 20 .. 29+    -> T "i20"+    -> T "i21"+    -> T "i22"+    -> T "i23"+    -> T "i24"+    -> T "i25"+    -> T "i26"+    -> T "i27"+    -> T "i28"+    -> T "i29"+    -> r
+ test/Test/Size/Ap/Index/Ix040.hs view
@@ -0,0 +1,50 @@+module Test.Size.Ap.Index.Ix040 (F) where++import Test.Infra++type F r =+       -- 00 .. 09+       T "i00"+    -> T "i01"+    -> T "i02"+    -> T "i03"+    -> T "i04"+    -> T "i05"+    -> T "i06"+    -> T "i07"+    -> T "i08"+    -> T "i09"+       -- 10 .. 19+    -> T "i10"+    -> T "i11"+    -> T "i12"+    -> T "i13"+    -> T "i14"+    -> T "i15"+    -> T "i16"+    -> T "i17"+    -> T "i18"+    -> T "i19"+       -- 20 .. 29+    -> T "i20"+    -> T "i21"+    -> T "i22"+    -> T "i23"+    -> T "i24"+    -> T "i25"+    -> T "i26"+    -> T "i27"+    -> T "i28"+    -> T "i29"+       -- 30 .. 39+    -> T "i30"+    -> T "i31"+    -> T "i32"+    -> T "i33"+    -> T "i34"+    -> T "i35"+    -> T "i36"+    -> T "i37"+    -> T "i38"+    -> T "i39"+    -> r
+ test/Test/Size/Ap/Index/Ix050.hs view
@@ -0,0 +1,61 @@+module Test.Size.Ap.Index.Ix050 (F) where++import Test.Infra++type F r =+       -- 00 .. 09+       T "i00"+    -> T "i01"+    -> T "i02"+    -> T "i03"+    -> T "i04"+    -> T "i05"+    -> T "i06"+    -> T "i07"+    -> T "i08"+    -> T "i09"+       -- 10 .. 19+    -> T "i10"+    -> T "i11"+    -> T "i12"+    -> T "i13"+    -> T "i14"+    -> T "i15"+    -> T "i16"+    -> T "i17"+    -> T "i18"+    -> T "i19"+       -- 20 .. 29+    -> T "i20"+    -> T "i21"+    -> T "i22"+    -> T "i23"+    -> T "i24"+    -> T "i25"+    -> T "i26"+    -> T "i27"+    -> T "i28"+    -> T "i29"+       -- 30 .. 39+    -> T "i30"+    -> T "i31"+    -> T "i32"+    -> T "i33"+    -> T "i34"+    -> T "i35"+    -> T "i36"+    -> T "i37"+    -> T "i38"+    -> T "i39"+       -- 40 .. 49+    -> T "i40"+    -> T "i41"+    -> T "i42"+    -> T "i43"+    -> T "i44"+    -> T "i45"+    -> T "i46"+    -> T "i47"+    -> T "i48"+    -> T "i49"+    -> r
+ test/Test/Size/Ap/Index/Ix060.hs view
@@ -0,0 +1,72 @@+module Test.Size.Ap.Index.Ix060 (F) where++import Test.Infra++type F r =+       -- 00 .. 09+       T "i00"+    -> T "i01"+    -> T "i02"+    -> T "i03"+    -> T "i04"+    -> T "i05"+    -> T "i06"+    -> T "i07"+    -> T "i08"+    -> T "i09"+       -- 10 .. 19+    -> T "i10"+    -> T "i11"+    -> T "i12"+    -> T "i13"+    -> T "i14"+    -> T "i15"+    -> T "i16"+    -> T "i17"+    -> T "i18"+    -> T "i19"+       -- 20 .. 29+    -> T "i20"+    -> T "i21"+    -> T "i22"+    -> T "i23"+    -> T "i24"+    -> T "i25"+    -> T "i26"+    -> T "i27"+    -> T "i28"+    -> T "i29"+       -- 30 .. 39+    -> T "i30"+    -> T "i31"+    -> T "i32"+    -> T "i33"+    -> T "i34"+    -> T "i35"+    -> T "i36"+    -> T "i37"+    -> T "i38"+    -> T "i39"+       -- 40 .. 49+    -> T "i40"+    -> T "i41"+    -> T "i42"+    -> T "i43"+    -> T "i44"+    -> T "i45"+    -> T "i46"+    -> T "i47"+    -> T "i48"+    -> T "i49"+       -- 50 .. 59+    -> T "i50"+    -> T "i51"+    -> T "i52"+    -> T "i53"+    -> T "i54"+    -> T "i55"+    -> T "i56"+    -> T "i57"+    -> T "i58"+    -> T "i59"+    -> r
+ test/Test/Size/Ap/Index/Ix070.hs view
@@ -0,0 +1,83 @@+module Test.Size.Ap.Index.Ix070 (F) where++import Test.Infra++type F r =+       -- 00 .. 09+       T "i00"+    -> T "i01"+    -> T "i02"+    -> T "i03"+    -> T "i04"+    -> T "i05"+    -> T "i06"+    -> T "i07"+    -> T "i08"+    -> T "i09"+       -- 10 .. 19+    -> T "i10"+    -> T "i11"+    -> T "i12"+    -> T "i13"+    -> T "i14"+    -> T "i15"+    -> T "i16"+    -> T "i17"+    -> T "i18"+    -> T "i19"+       -- 20 .. 29+    -> T "i20"+    -> T "i21"+    -> T "i22"+    -> T "i23"+    -> T "i24"+    -> T "i25"+    -> T "i26"+    -> T "i27"+    -> T "i28"+    -> T "i29"+       -- 30 .. 39+    -> T "i30"+    -> T "i31"+    -> T "i32"+    -> T "i33"+    -> T "i34"+    -> T "i35"+    -> T "i36"+    -> T "i37"+    -> T "i38"+    -> T "i39"+       -- 40 .. 49+    -> T "i40"+    -> T "i41"+    -> T "i42"+    -> T "i43"+    -> T "i44"+    -> T "i45"+    -> T "i46"+    -> T "i47"+    -> T "i48"+    -> T "i49"+       -- 50 .. 59+    -> T "i50"+    -> T "i51"+    -> T "i52"+    -> T "i53"+    -> T "i54"+    -> T "i55"+    -> T "i56"+    -> T "i57"+    -> T "i58"+    -> T "i59"+       -- 60 .. 69+    -> T "i60"+    -> T "i61"+    -> T "i62"+    -> T "i63"+    -> T "i64"+    -> T "i65"+    -> T "i66"+    -> T "i67"+    -> T "i68"+    -> T "i69"+    -> r
+ test/Test/Size/Ap/Index/Ix080.hs view
@@ -0,0 +1,94 @@+module Test.Size.Ap.Index.Ix080 (F) where++import Test.Infra++type F r =+       -- 00 .. 09+       T "i00"+    -> T "i01"+    -> T "i02"+    -> T "i03"+    -> T "i04"+    -> T "i05"+    -> T "i06"+    -> T "i07"+    -> T "i08"+    -> T "i09"+       -- 10 .. 19+    -> T "i10"+    -> T "i11"+    -> T "i12"+    -> T "i13"+    -> T "i14"+    -> T "i15"+    -> T "i16"+    -> T "i17"+    -> T "i18"+    -> T "i19"+       -- 20 .. 29+    -> T "i20"+    -> T "i21"+    -> T "i22"+    -> T "i23"+    -> T "i24"+    -> T "i25"+    -> T "i26"+    -> T "i27"+    -> T "i28"+    -> T "i29"+       -- 30 .. 39+    -> T "i30"+    -> T "i31"+    -> T "i32"+    -> T "i33"+    -> T "i34"+    -> T "i35"+    -> T "i36"+    -> T "i37"+    -> T "i38"+    -> T "i39"+       -- 40 .. 49+    -> T "i40"+    -> T "i41"+    -> T "i42"+    -> T "i43"+    -> T "i44"+    -> T "i45"+    -> T "i46"+    -> T "i47"+    -> T "i48"+    -> T "i49"+       -- 50 .. 59+    -> T "i50"+    -> T "i51"+    -> T "i52"+    -> T "i53"+    -> T "i54"+    -> T "i55"+    -> T "i56"+    -> T "i57"+    -> T "i58"+    -> T "i59"+       -- 60 .. 69+    -> T "i60"+    -> T "i61"+    -> T "i62"+    -> T "i63"+    -> T "i64"+    -> T "i65"+    -> T "i66"+    -> T "i67"+    -> T "i68"+    -> T "i69"+       -- 70 .. 79+    -> T "i70"+    -> T "i71"+    -> T "i72"+    -> T "i73"+    -> T "i74"+    -> T "i75"+    -> T "i76"+    -> T "i77"+    -> T "i78"+    -> T "i79"+    -> r
+ test/Test/Size/Ap/Index/Ix090.hs view
@@ -0,0 +1,105 @@+module Test.Size.Ap.Index.Ix090 (F) where++import Test.Infra++type F r =+       -- 00 .. 09+       T "i00"+    -> T "i01"+    -> T "i02"+    -> T "i03"+    -> T "i04"+    -> T "i05"+    -> T "i06"+    -> T "i07"+    -> T "i08"+    -> T "i09"+       -- 10 .. 19+    -> T "i10"+    -> T "i11"+    -> T "i12"+    -> T "i13"+    -> T "i14"+    -> T "i15"+    -> T "i16"+    -> T "i17"+    -> T "i18"+    -> T "i19"+       -- 20 .. 29+    -> T "i20"+    -> T "i21"+    -> T "i22"+    -> T "i23"+    -> T "i24"+    -> T "i25"+    -> T "i26"+    -> T "i27"+    -> T "i28"+    -> T "i29"+       -- 30 .. 39+    -> T "i30"+    -> T "i31"+    -> T "i32"+    -> T "i33"+    -> T "i34"+    -> T "i35"+    -> T "i36"+    -> T "i37"+    -> T "i38"+    -> T "i39"+       -- 40 .. 49+    -> T "i40"+    -> T "i41"+    -> T "i42"+    -> T "i43"+    -> T "i44"+    -> T "i45"+    -> T "i46"+    -> T "i47"+    -> T "i48"+    -> T "i49"+       -- 50 .. 59+    -> T "i50"+    -> T "i51"+    -> T "i52"+    -> T "i53"+    -> T "i54"+    -> T "i55"+    -> T "i56"+    -> T "i57"+    -> T "i58"+    -> T "i59"+       -- 60 .. 69+    -> T "i60"+    -> T "i61"+    -> T "i62"+    -> T "i63"+    -> T "i64"+    -> T "i65"+    -> T "i66"+    -> T "i67"+    -> T "i68"+    -> T "i69"+       -- 70 .. 79+    -> T "i70"+    -> T "i71"+    -> T "i72"+    -> T "i73"+    -> T "i74"+    -> T "i75"+    -> T "i76"+    -> T "i77"+    -> T "i78"+    -> T "i79"+       -- 80 .. 89+    -> T "i80"+    -> T "i81"+    -> T "i82"+    -> T "i83"+    -> T "i84"+    -> T "i85"+    -> T "i86"+    -> T "i87"+    -> T "i88"+    -> T "i89"+    -> r
+ test/Test/Size/Ap/Index/Ix100.hs view
@@ -0,0 +1,116 @@+module Test.Size.Ap.Index.Ix100 (F) where++import Test.Infra++type F r =+       -- 00 .. 09+       T "i00"+    -> T "i01"+    -> T "i02"+    -> T "i03"+    -> T "i04"+    -> T "i05"+    -> T "i06"+    -> T "i07"+    -> T "i08"+    -> T "i09"+       -- 10 .. 19+    -> T "i10"+    -> T "i11"+    -> T "i12"+    -> T "i13"+    -> T "i14"+    -> T "i15"+    -> T "i16"+    -> T "i17"+    -> T "i18"+    -> T "i19"+       -- 20 .. 29+    -> T "i20"+    -> T "i21"+    -> T "i22"+    -> T "i23"+    -> T "i24"+    -> T "i25"+    -> T "i26"+    -> T "i27"+    -> T "i28"+    -> T "i29"+       -- 30 .. 39+    -> T "i30"+    -> T "i31"+    -> T "i32"+    -> T "i33"+    -> T "i34"+    -> T "i35"+    -> T "i36"+    -> T "i37"+    -> T "i38"+    -> T "i39"+       -- 40 .. 49+    -> T "i40"+    -> T "i41"+    -> T "i42"+    -> T "i43"+    -> T "i44"+    -> T "i45"+    -> T "i46"+    -> T "i47"+    -> T "i48"+    -> T "i49"+       -- 50 .. 59+    -> T "i50"+    -> T "i51"+    -> T "i52"+    -> T "i53"+    -> T "i54"+    -> T "i55"+    -> T "i56"+    -> T "i57"+    -> T "i58"+    -> T "i59"+       -- 60 .. 69+    -> T "i60"+    -> T "i61"+    -> T "i62"+    -> T "i63"+    -> T "i64"+    -> T "i65"+    -> T "i66"+    -> T "i67"+    -> T "i68"+    -> T "i69"+       -- 70 .. 79+    -> T "i70"+    -> T "i71"+    -> T "i72"+    -> T "i73"+    -> T "i74"+    -> T "i75"+    -> T "i76"+    -> T "i77"+    -> T "i78"+    -> T "i79"+       -- 80 .. 89+    -> T "i80"+    -> T "i81"+    -> T "i82"+    -> T "i83"+    -> T "i84"+    -> T "i85"+    -> T "i86"+    -> T "i87"+    -> T "i88"+    -> T "i89"+       -- 90 .. 99+    -> T "i90"+    -> T "i91"+    -> T "i92"+    -> T "i93"+    -> T "i94"+    -> T "i95"+    -> T "i96"+    -> T "i97"+    -> T "i98"+    -> T "i99"+    -> r
+ test/Test/Size/Ap/Let/Let010.hs view
@@ -0,0 +1,54 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.Ap.Let.Let010 where++import TypeLet++import Test.Infra+import Test.Size.Ap.Index.Ix010++applyF :: forall f r. Applicative f => F r -> f r+applyF f =+    -- 09 .. 00+    case letT (Proxy @(T "i09" -> r))   of { LetT (_ :: Proxy l09) ->+    case letT (Proxy @(T "i08" -> l09)) of { LetT (_ :: Proxy l08) ->+    case letT (Proxy @(T "i07" -> l08)) of { LetT (_ :: Proxy l07) ->+    case letT (Proxy @(T "i06" -> l07)) of { LetT (_ :: Proxy l06) ->+    case letT (Proxy @(T "i05" -> l06)) of { LetT (_ :: Proxy l05) ->+    case letT (Proxy @(T "i04" -> l05)) of { LetT (_ :: Proxy l04) ->+    case letT (Proxy @(T "i03" -> l04)) of { LetT (_ :: Proxy l03) ->+    case letT (Proxy @(T "i02" -> l03)) of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(T "i01" -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(T "i00" -> l01)) of { LetT (_ :: Proxy l00) ->++      let -- 00 .. 09+          f00 :: f l00+          f01 :: f l01+          f02 :: f l02+          f03 :: f l03+          f04 :: f l04+          f05 :: f l05+          f06 :: f l06+          f07 :: f l07+          f08 :: f l08+          f09 :: f l09++          res :: f r++          -- 00 .. 09+          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure (MkT @"i00")+          f02 = castEqual f01 <*> pure (MkT @"i01")+          f03 = castEqual f02 <*> pure (MkT @"i02")+          f04 = castEqual f03 <*> pure (MkT @"i03")+          f05 = castEqual f04 <*> pure (MkT @"i04")+          f06 = castEqual f05 <*> pure (MkT @"i05")+          f07 = castEqual f06 <*> pure (MkT @"i06")+          f08 = castEqual f07 <*> pure (MkT @"i07")+          f09 = castEqual f08 <*> pure (MkT @"i08")++          res = castEqual f09 <*> pure (MkT @"i09")++      in res++    }}}}}}}}}}
+ test/Test/Size/Ap/Let/Let020.hs view
@@ -0,0 +1,88 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.Ap.Let.Let020 where++import TypeLet++import Test.Infra+import Test.Size.Ap.Index.Ix020++applyF :: forall f r. Applicative f => F r -> f r+applyF f =+    -- 19 .. 10+    case letT (Proxy @(T "i19" -> r))   of { LetT (_ :: Proxy l19) ->+    case letT (Proxy @(T "i18" -> l19)) of { LetT (_ :: Proxy l18) ->+    case letT (Proxy @(T "i17" -> l18)) of { LetT (_ :: Proxy l17) ->+    case letT (Proxy @(T "i16" -> l17)) of { LetT (_ :: Proxy l16) ->+    case letT (Proxy @(T "i15" -> l16)) of { LetT (_ :: Proxy l15) ->+    case letT (Proxy @(T "i14" -> l15)) of { LetT (_ :: Proxy l14) ->+    case letT (Proxy @(T "i13" -> l14)) of { LetT (_ :: Proxy l13) ->+    case letT (Proxy @(T "i12" -> l13)) of { LetT (_ :: Proxy l12) ->+    case letT (Proxy @(T "i11" -> l12)) of { LetT (_ :: Proxy l11) ->+    case letT (Proxy @(T "i10" -> l11)) of { LetT (_ :: Proxy l10) ->+    -- 09 .. 00+    case letT (Proxy @(T "i09" -> l10)) of { LetT (_ :: Proxy l09) ->+    case letT (Proxy @(T "i08" -> l09)) of { LetT (_ :: Proxy l08) ->+    case letT (Proxy @(T "i07" -> l08)) of { LetT (_ :: Proxy l07) ->+    case letT (Proxy @(T "i06" -> l07)) of { LetT (_ :: Proxy l06) ->+    case letT (Proxy @(T "i05" -> l06)) of { LetT (_ :: Proxy l05) ->+    case letT (Proxy @(T "i04" -> l05)) of { LetT (_ :: Proxy l04) ->+    case letT (Proxy @(T "i03" -> l04)) of { LetT (_ :: Proxy l03) ->+    case letT (Proxy @(T "i02" -> l03)) of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(T "i01" -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(T "i00" -> l01)) of { LetT (_ :: Proxy l00) ->++      let -- 00 .. 09+          f00 :: f l00+          f01 :: f l01+          f02 :: f l02+          f03 :: f l03+          f04 :: f l04+          f05 :: f l05+          f06 :: f l06+          f07 :: f l07+          f08 :: f l08+          f09 :: f l09+          -- 10 .. 19+          f10 :: f l10+          f11 :: f l11+          f12 :: f l12+          f13 :: f l13+          f14 :: f l14+          f15 :: f l15+          f16 :: f l16+          f17 :: f l17+          f18 :: f l18+          f19 :: f l19++          res :: f r++          -- 00 .. 09+          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure (MkT @"i00")+          f02 = castEqual f01 <*> pure (MkT @"i01")+          f03 = castEqual f02 <*> pure (MkT @"i02")+          f04 = castEqual f03 <*> pure (MkT @"i03")+          f05 = castEqual f04 <*> pure (MkT @"i04")+          f06 = castEqual f05 <*> pure (MkT @"i05")+          f07 = castEqual f06 <*> pure (MkT @"i06")+          f08 = castEqual f07 <*> pure (MkT @"i07")+          f09 = castEqual f08 <*> pure (MkT @"i08")+          -- 10 .. 19+          f10 = castEqual f09 <*> pure (MkT @"i09")+          f11 = castEqual f10 <*> pure (MkT @"i10")+          f12 = castEqual f11 <*> pure (MkT @"i11")+          f13 = castEqual f12 <*> pure (MkT @"i12")+          f14 = castEqual f13 <*> pure (MkT @"i13")+          f15 = castEqual f14 <*> pure (MkT @"i14")+          f16 = castEqual f15 <*> pure (MkT @"i15")+          f17 = castEqual f16 <*> pure (MkT @"i16")+          f18 = castEqual f17 <*> pure (MkT @"i17")+          f19 = castEqual f18 <*> pure (MkT @"i18")++          res = castEqual f19 <*> pure (MkT @"i19")++      in res++    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/Ap/Let/Let030.hs view
@@ -0,0 +1,122 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.Ap.Let.Let030 where++import TypeLet++import Test.Infra+import Test.Size.Ap.Index.Ix030++applyF :: forall f r. Applicative f => F r -> f r+applyF f =+    -- 29 .. 20+    case letT (Proxy @(T "i29" -> r))   of { LetT (_ :: Proxy l29) ->+    case letT (Proxy @(T "i28" -> l29)) of { LetT (_ :: Proxy l28) ->+    case letT (Proxy @(T "i27" -> l28)) of { LetT (_ :: Proxy l27) ->+    case letT (Proxy @(T "i26" -> l27)) of { LetT (_ :: Proxy l26) ->+    case letT (Proxy @(T "i25" -> l26)) of { LetT (_ :: Proxy l25) ->+    case letT (Proxy @(T "i24" -> l25)) of { LetT (_ :: Proxy l24) ->+    case letT (Proxy @(T "i23" -> l24)) of { LetT (_ :: Proxy l23) ->+    case letT (Proxy @(T "i22" -> l23)) of { LetT (_ :: Proxy l22) ->+    case letT (Proxy @(T "i21" -> l22)) of { LetT (_ :: Proxy l21) ->+    case letT (Proxy @(T "i20" -> l21)) of { LetT (_ :: Proxy l20) ->+    -- 19 .. 10+    case letT (Proxy @(T "i19" -> l20)) of { LetT (_ :: Proxy l19) ->+    case letT (Proxy @(T "i18" -> l19)) of { LetT (_ :: Proxy l18) ->+    case letT (Proxy @(T "i17" -> l18)) of { LetT (_ :: Proxy l17) ->+    case letT (Proxy @(T "i16" -> l17)) of { LetT (_ :: Proxy l16) ->+    case letT (Proxy @(T "i15" -> l16)) of { LetT (_ :: Proxy l15) ->+    case letT (Proxy @(T "i14" -> l15)) of { LetT (_ :: Proxy l14) ->+    case letT (Proxy @(T "i13" -> l14)) of { LetT (_ :: Proxy l13) ->+    case letT (Proxy @(T "i12" -> l13)) of { LetT (_ :: Proxy l12) ->+    case letT (Proxy @(T "i11" -> l12)) of { LetT (_ :: Proxy l11) ->+    case letT (Proxy @(T "i10" -> l11)) of { LetT (_ :: Proxy l10) ->+    -- 09 .. 00+    case letT (Proxy @(T "i09" -> l10)) of { LetT (_ :: Proxy l09) ->+    case letT (Proxy @(T "i08" -> l09)) of { LetT (_ :: Proxy l08) ->+    case letT (Proxy @(T "i07" -> l08)) of { LetT (_ :: Proxy l07) ->+    case letT (Proxy @(T "i06" -> l07)) of { LetT (_ :: Proxy l06) ->+    case letT (Proxy @(T "i05" -> l06)) of { LetT (_ :: Proxy l05) ->+    case letT (Proxy @(T "i04" -> l05)) of { LetT (_ :: Proxy l04) ->+    case letT (Proxy @(T "i03" -> l04)) of { LetT (_ :: Proxy l03) ->+    case letT (Proxy @(T "i02" -> l03)) of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(T "i01" -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(T "i00" -> l01)) of { LetT (_ :: Proxy l00) ->++      let -- 00 .. 09+          f00 :: f l00+          f01 :: f l01+          f02 :: f l02+          f03 :: f l03+          f04 :: f l04+          f05 :: f l05+          f06 :: f l06+          f07 :: f l07+          f08 :: f l08+          f09 :: f l09+          -- 10 .. 19+          f10 :: f l10+          f11 :: f l11+          f12 :: f l12+          f13 :: f l13+          f14 :: f l14+          f15 :: f l15+          f16 :: f l16+          f17 :: f l17+          f18 :: f l18+          f19 :: f l19+          -- 20 .. 29+          f20 :: f l20+          f21 :: f l21+          f22 :: f l22+          f23 :: f l23+          f24 :: f l24+          f25 :: f l25+          f26 :: f l26+          f27 :: f l27+          f28 :: f l28+          f29 :: f l29++          res :: f r++          -- 00 .. 09+          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure (MkT @"i00")+          f02 = castEqual f01 <*> pure (MkT @"i01")+          f03 = castEqual f02 <*> pure (MkT @"i02")+          f04 = castEqual f03 <*> pure (MkT @"i03")+          f05 = castEqual f04 <*> pure (MkT @"i04")+          f06 = castEqual f05 <*> pure (MkT @"i05")+          f07 = castEqual f06 <*> pure (MkT @"i06")+          f08 = castEqual f07 <*> pure (MkT @"i07")+          f09 = castEqual f08 <*> pure (MkT @"i08")+          -- 10 .. 19+          f10 = castEqual f09 <*> pure (MkT @"i09")+          f11 = castEqual f10 <*> pure (MkT @"i10")+          f12 = castEqual f11 <*> pure (MkT @"i11")+          f13 = castEqual f12 <*> pure (MkT @"i12")+          f14 = castEqual f13 <*> pure (MkT @"i13")+          f15 = castEqual f14 <*> pure (MkT @"i14")+          f16 = castEqual f15 <*> pure (MkT @"i15")+          f17 = castEqual f16 <*> pure (MkT @"i16")+          f18 = castEqual f17 <*> pure (MkT @"i17")+          f19 = castEqual f18 <*> pure (MkT @"i18")+          -- 20 .. 29+          f20 = castEqual f19 <*> pure (MkT @"i19")+          f21 = castEqual f20 <*> pure (MkT @"i20")+          f22 = castEqual f21 <*> pure (MkT @"i21")+          f23 = castEqual f22 <*> pure (MkT @"i22")+          f24 = castEqual f23 <*> pure (MkT @"i23")+          f25 = castEqual f24 <*> pure (MkT @"i24")+          f26 = castEqual f25 <*> pure (MkT @"i25")+          f27 = castEqual f26 <*> pure (MkT @"i26")+          f28 = castEqual f27 <*> pure (MkT @"i27")+          f29 = castEqual f28 <*> pure (MkT @"i28")++          res = castEqual f29 <*> pure (MkT @"i29")++      in res++    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/Ap/Let/Let040.hs view
@@ -0,0 +1,156 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.Ap.Let.Let040 where++import TypeLet++import Test.Infra+import Test.Size.Ap.Index.Ix040++applyF :: forall f r. Applicative f => F r -> f r+applyF f =+    -- 39 .. 30+    case letT (Proxy @(T "i39" -> r))   of { LetT (_ :: Proxy l39) ->+    case letT (Proxy @(T "i38" -> l39)) of { LetT (_ :: Proxy l38) ->+    case letT (Proxy @(T "i37" -> l38)) of { LetT (_ :: Proxy l37) ->+    case letT (Proxy @(T "i36" -> l37)) of { LetT (_ :: Proxy l36) ->+    case letT (Proxy @(T "i35" -> l36)) of { LetT (_ :: Proxy l35) ->+    case letT (Proxy @(T "i34" -> l35)) of { LetT (_ :: Proxy l34) ->+    case letT (Proxy @(T "i33" -> l34)) of { LetT (_ :: Proxy l33) ->+    case letT (Proxy @(T "i32" -> l33)) of { LetT (_ :: Proxy l32) ->+    case letT (Proxy @(T "i31" -> l32)) of { LetT (_ :: Proxy l31) ->+    case letT (Proxy @(T "i30" -> l31)) of { LetT (_ :: Proxy l30) ->+    -- 29 .. 20+    case letT (Proxy @(T "i29" -> l30)) of { LetT (_ :: Proxy l29) ->+    case letT (Proxy @(T "i28" -> l29)) of { LetT (_ :: Proxy l28) ->+    case letT (Proxy @(T "i27" -> l28)) of { LetT (_ :: Proxy l27) ->+    case letT (Proxy @(T "i26" -> l27)) of { LetT (_ :: Proxy l26) ->+    case letT (Proxy @(T "i25" -> l26)) of { LetT (_ :: Proxy l25) ->+    case letT (Proxy @(T "i24" -> l25)) of { LetT (_ :: Proxy l24) ->+    case letT (Proxy @(T "i23" -> l24)) of { LetT (_ :: Proxy l23) ->+    case letT (Proxy @(T "i22" -> l23)) of { LetT (_ :: Proxy l22) ->+    case letT (Proxy @(T "i21" -> l22)) of { LetT (_ :: Proxy l21) ->+    case letT (Proxy @(T "i20" -> l21)) of { LetT (_ :: Proxy l20) ->+    -- 19 .. 10+    case letT (Proxy @(T "i19" -> l20)) of { LetT (_ :: Proxy l19) ->+    case letT (Proxy @(T "i18" -> l19)) of { LetT (_ :: Proxy l18) ->+    case letT (Proxy @(T "i17" -> l18)) of { LetT (_ :: Proxy l17) ->+    case letT (Proxy @(T "i16" -> l17)) of { LetT (_ :: Proxy l16) ->+    case letT (Proxy @(T "i15" -> l16)) of { LetT (_ :: Proxy l15) ->+    case letT (Proxy @(T "i14" -> l15)) of { LetT (_ :: Proxy l14) ->+    case letT (Proxy @(T "i13" -> l14)) of { LetT (_ :: Proxy l13) ->+    case letT (Proxy @(T "i12" -> l13)) of { LetT (_ :: Proxy l12) ->+    case letT (Proxy @(T "i11" -> l12)) of { LetT (_ :: Proxy l11) ->+    case letT (Proxy @(T "i10" -> l11)) of { LetT (_ :: Proxy l10) ->+    -- 09 .. 00+    case letT (Proxy @(T "i09" -> l10)) of { LetT (_ :: Proxy l09) ->+    case letT (Proxy @(T "i08" -> l09)) of { LetT (_ :: Proxy l08) ->+    case letT (Proxy @(T "i07" -> l08)) of { LetT (_ :: Proxy l07) ->+    case letT (Proxy @(T "i06" -> l07)) of { LetT (_ :: Proxy l06) ->+    case letT (Proxy @(T "i05" -> l06)) of { LetT (_ :: Proxy l05) ->+    case letT (Proxy @(T "i04" -> l05)) of { LetT (_ :: Proxy l04) ->+    case letT (Proxy @(T "i03" -> l04)) of { LetT (_ :: Proxy l03) ->+    case letT (Proxy @(T "i02" -> l03)) of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(T "i01" -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(T "i00" -> l01)) of { LetT (_ :: Proxy l00) ->++      let -- 00 .. 09+          f00 :: f l00+          f01 :: f l01+          f02 :: f l02+          f03 :: f l03+          f04 :: f l04+          f05 :: f l05+          f06 :: f l06+          f07 :: f l07+          f08 :: f l08+          f09 :: f l09+          -- 10 .. 19+          f10 :: f l10+          f11 :: f l11+          f12 :: f l12+          f13 :: f l13+          f14 :: f l14+          f15 :: f l15+          f16 :: f l16+          f17 :: f l17+          f18 :: f l18+          f19 :: f l19+          -- 20 .. 29+          f20 :: f l20+          f21 :: f l21+          f22 :: f l22+          f23 :: f l23+          f24 :: f l24+          f25 :: f l25+          f26 :: f l26+          f27 :: f l27+          f28 :: f l28+          f29 :: f l29+          -- 30 .. 39+          f30 :: f l30+          f31 :: f l31+          f32 :: f l32+          f33 :: f l33+          f34 :: f l34+          f35 :: f l35+          f36 :: f l36+          f37 :: f l37+          f38 :: f l38+          f39 :: f l39++          res :: f r++          -- 00 .. 09+          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure (MkT @"i00")+          f02 = castEqual f01 <*> pure (MkT @"i01")+          f03 = castEqual f02 <*> pure (MkT @"i02")+          f04 = castEqual f03 <*> pure (MkT @"i03")+          f05 = castEqual f04 <*> pure (MkT @"i04")+          f06 = castEqual f05 <*> pure (MkT @"i05")+          f07 = castEqual f06 <*> pure (MkT @"i06")+          f08 = castEqual f07 <*> pure (MkT @"i07")+          f09 = castEqual f08 <*> pure (MkT @"i08")+          -- 10 .. 19+          f10 = castEqual f09 <*> pure (MkT @"i09")+          f11 = castEqual f10 <*> pure (MkT @"i10")+          f12 = castEqual f11 <*> pure (MkT @"i11")+          f13 = castEqual f12 <*> pure (MkT @"i12")+          f14 = castEqual f13 <*> pure (MkT @"i13")+          f15 = castEqual f14 <*> pure (MkT @"i14")+          f16 = castEqual f15 <*> pure (MkT @"i15")+          f17 = castEqual f16 <*> pure (MkT @"i16")+          f18 = castEqual f17 <*> pure (MkT @"i17")+          f19 = castEqual f18 <*> pure (MkT @"i18")+          -- 20 .. 29+          f20 = castEqual f19 <*> pure (MkT @"i19")+          f21 = castEqual f20 <*> pure (MkT @"i20")+          f22 = castEqual f21 <*> pure (MkT @"i21")+          f23 = castEqual f22 <*> pure (MkT @"i22")+          f24 = castEqual f23 <*> pure (MkT @"i23")+          f25 = castEqual f24 <*> pure (MkT @"i24")+          f26 = castEqual f25 <*> pure (MkT @"i25")+          f27 = castEqual f26 <*> pure (MkT @"i26")+          f28 = castEqual f27 <*> pure (MkT @"i27")+          f29 = castEqual f28 <*> pure (MkT @"i28")+          -- 30 .. 39+          f30 = castEqual f29 <*> pure (MkT @"i29")+          f31 = castEqual f30 <*> pure (MkT @"i30")+          f32 = castEqual f31 <*> pure (MkT @"i31")+          f33 = castEqual f32 <*> pure (MkT @"i32")+          f34 = castEqual f33 <*> pure (MkT @"i33")+          f35 = castEqual f34 <*> pure (MkT @"i34")+          f36 = castEqual f35 <*> pure (MkT @"i35")+          f37 = castEqual f36 <*> pure (MkT @"i36")+          f38 = castEqual f37 <*> pure (MkT @"i37")+          f39 = castEqual f38 <*> pure (MkT @"i38")++          res = castEqual f39 <*> pure (MkT @"i39")++      in res++    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/Ap/Let/Let050.hs view
@@ -0,0 +1,190 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.Ap.Let.Let050 where++import TypeLet++import Test.Infra+import Test.Size.Ap.Index.Ix050++applyF :: forall f r. Applicative f => F r -> f r+applyF f =+    -- 49 .. 40+    case letT (Proxy @(T "i49" -> r))   of { LetT (_ :: Proxy l49) ->+    case letT (Proxy @(T "i48" -> l49)) of { LetT (_ :: Proxy l48) ->+    case letT (Proxy @(T "i47" -> l48)) of { LetT (_ :: Proxy l47) ->+    case letT (Proxy @(T "i46" -> l47)) of { LetT (_ :: Proxy l46) ->+    case letT (Proxy @(T "i45" -> l46)) of { LetT (_ :: Proxy l45) ->+    case letT (Proxy @(T "i44" -> l45)) of { LetT (_ :: Proxy l44) ->+    case letT (Proxy @(T "i43" -> l44)) of { LetT (_ :: Proxy l43) ->+    case letT (Proxy @(T "i42" -> l43)) of { LetT (_ :: Proxy l42) ->+    case letT (Proxy @(T "i41" -> l42)) of { LetT (_ :: Proxy l41) ->+    case letT (Proxy @(T "i40" -> l41)) of { LetT (_ :: Proxy l40) ->+    -- 39 .. 30+    case letT (Proxy @(T "i39" -> l40)) of { LetT (_ :: Proxy l39) ->+    case letT (Proxy @(T "i38" -> l39)) of { LetT (_ :: Proxy l38) ->+    case letT (Proxy @(T "i37" -> l38)) of { LetT (_ :: Proxy l37) ->+    case letT (Proxy @(T "i36" -> l37)) of { LetT (_ :: Proxy l36) ->+    case letT (Proxy @(T "i35" -> l36)) of { LetT (_ :: Proxy l35) ->+    case letT (Proxy @(T "i34" -> l35)) of { LetT (_ :: Proxy l34) ->+    case letT (Proxy @(T "i33" -> l34)) of { LetT (_ :: Proxy l33) ->+    case letT (Proxy @(T "i32" -> l33)) of { LetT (_ :: Proxy l32) ->+    case letT (Proxy @(T "i31" -> l32)) of { LetT (_ :: Proxy l31) ->+    case letT (Proxy @(T "i30" -> l31)) of { LetT (_ :: Proxy l30) ->+    -- 29 .. 20+    case letT (Proxy @(T "i29" -> l30)) of { LetT (_ :: Proxy l29) ->+    case letT (Proxy @(T "i28" -> l29)) of { LetT (_ :: Proxy l28) ->+    case letT (Proxy @(T "i27" -> l28)) of { LetT (_ :: Proxy l27) ->+    case letT (Proxy @(T "i26" -> l27)) of { LetT (_ :: Proxy l26) ->+    case letT (Proxy @(T "i25" -> l26)) of { LetT (_ :: Proxy l25) ->+    case letT (Proxy @(T "i24" -> l25)) of { LetT (_ :: Proxy l24) ->+    case letT (Proxy @(T "i23" -> l24)) of { LetT (_ :: Proxy l23) ->+    case letT (Proxy @(T "i22" -> l23)) of { LetT (_ :: Proxy l22) ->+    case letT (Proxy @(T "i21" -> l22)) of { LetT (_ :: Proxy l21) ->+    case letT (Proxy @(T "i20" -> l21)) of { LetT (_ :: Proxy l20) ->+    -- 19 .. 10+    case letT (Proxy @(T "i19" -> l20)) of { LetT (_ :: Proxy l19) ->+    case letT (Proxy @(T "i18" -> l19)) of { LetT (_ :: Proxy l18) ->+    case letT (Proxy @(T "i17" -> l18)) of { LetT (_ :: Proxy l17) ->+    case letT (Proxy @(T "i16" -> l17)) of { LetT (_ :: Proxy l16) ->+    case letT (Proxy @(T "i15" -> l16)) of { LetT (_ :: Proxy l15) ->+    case letT (Proxy @(T "i14" -> l15)) of { LetT (_ :: Proxy l14) ->+    case letT (Proxy @(T "i13" -> l14)) of { LetT (_ :: Proxy l13) ->+    case letT (Proxy @(T "i12" -> l13)) of { LetT (_ :: Proxy l12) ->+    case letT (Proxy @(T "i11" -> l12)) of { LetT (_ :: Proxy l11) ->+    case letT (Proxy @(T "i10" -> l11)) of { LetT (_ :: Proxy l10) ->+    -- 09 .. 00+    case letT (Proxy @(T "i09" -> l10)) of { LetT (_ :: Proxy l09) ->+    case letT (Proxy @(T "i08" -> l09)) of { LetT (_ :: Proxy l08) ->+    case letT (Proxy @(T "i07" -> l08)) of { LetT (_ :: Proxy l07) ->+    case letT (Proxy @(T "i06" -> l07)) of { LetT (_ :: Proxy l06) ->+    case letT (Proxy @(T "i05" -> l06)) of { LetT (_ :: Proxy l05) ->+    case letT (Proxy @(T "i04" -> l05)) of { LetT (_ :: Proxy l04) ->+    case letT (Proxy @(T "i03" -> l04)) of { LetT (_ :: Proxy l03) ->+    case letT (Proxy @(T "i02" -> l03)) of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(T "i01" -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(T "i00" -> l01)) of { LetT (_ :: Proxy l00) ->++      let -- 00 .. 09+          f00 :: f l00+          f01 :: f l01+          f02 :: f l02+          f03 :: f l03+          f04 :: f l04+          f05 :: f l05+          f06 :: f l06+          f07 :: f l07+          f08 :: f l08+          f09 :: f l09+          -- 10 .. 19+          f10 :: f l10+          f11 :: f l11+          f12 :: f l12+          f13 :: f l13+          f14 :: f l14+          f15 :: f l15+          f16 :: f l16+          f17 :: f l17+          f18 :: f l18+          f19 :: f l19+          -- 20 .. 29+          f20 :: f l20+          f21 :: f l21+          f22 :: f l22+          f23 :: f l23+          f24 :: f l24+          f25 :: f l25+          f26 :: f l26+          f27 :: f l27+          f28 :: f l28+          f29 :: f l29+          -- 30 .. 39+          f30 :: f l30+          f31 :: f l31+          f32 :: f l32+          f33 :: f l33+          f34 :: f l34+          f35 :: f l35+          f36 :: f l36+          f37 :: f l37+          f38 :: f l38+          f39 :: f l39+          -- 40 .. 49+          f40 :: f l40+          f41 :: f l41+          f42 :: f l42+          f43 :: f l43+          f44 :: f l44+          f45 :: f l45+          f46 :: f l46+          f47 :: f l47+          f48 :: f l48+          f49 :: f l49++          res :: f r++          -- 00 .. 09+          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure (MkT @"i00")+          f02 = castEqual f01 <*> pure (MkT @"i01")+          f03 = castEqual f02 <*> pure (MkT @"i02")+          f04 = castEqual f03 <*> pure (MkT @"i03")+          f05 = castEqual f04 <*> pure (MkT @"i04")+          f06 = castEqual f05 <*> pure (MkT @"i05")+          f07 = castEqual f06 <*> pure (MkT @"i06")+          f08 = castEqual f07 <*> pure (MkT @"i07")+          f09 = castEqual f08 <*> pure (MkT @"i08")+          -- 10 .. 19+          f10 = castEqual f09 <*> pure (MkT @"i09")+          f11 = castEqual f10 <*> pure (MkT @"i10")+          f12 = castEqual f11 <*> pure (MkT @"i11")+          f13 = castEqual f12 <*> pure (MkT @"i12")+          f14 = castEqual f13 <*> pure (MkT @"i13")+          f15 = castEqual f14 <*> pure (MkT @"i14")+          f16 = castEqual f15 <*> pure (MkT @"i15")+          f17 = castEqual f16 <*> pure (MkT @"i16")+          f18 = castEqual f17 <*> pure (MkT @"i17")+          f19 = castEqual f18 <*> pure (MkT @"i18")+          -- 20 .. 29+          f20 = castEqual f19 <*> pure (MkT @"i19")+          f21 = castEqual f20 <*> pure (MkT @"i20")+          f22 = castEqual f21 <*> pure (MkT @"i21")+          f23 = castEqual f22 <*> pure (MkT @"i22")+          f24 = castEqual f23 <*> pure (MkT @"i23")+          f25 = castEqual f24 <*> pure (MkT @"i24")+          f26 = castEqual f25 <*> pure (MkT @"i25")+          f27 = castEqual f26 <*> pure (MkT @"i26")+          f28 = castEqual f27 <*> pure (MkT @"i27")+          f29 = castEqual f28 <*> pure (MkT @"i28")+          -- 30 .. 39+          f30 = castEqual f29 <*> pure (MkT @"i29")+          f31 = castEqual f30 <*> pure (MkT @"i30")+          f32 = castEqual f31 <*> pure (MkT @"i31")+          f33 = castEqual f32 <*> pure (MkT @"i32")+          f34 = castEqual f33 <*> pure (MkT @"i33")+          f35 = castEqual f34 <*> pure (MkT @"i34")+          f36 = castEqual f35 <*> pure (MkT @"i35")+          f37 = castEqual f36 <*> pure (MkT @"i36")+          f38 = castEqual f37 <*> pure (MkT @"i37")+          f39 = castEqual f38 <*> pure (MkT @"i38")+          -- 40 .. 49+          f40 = castEqual f39 <*> pure (MkT @"i39")+          f41 = castEqual f40 <*> pure (MkT @"i40")+          f42 = castEqual f41 <*> pure (MkT @"i41")+          f43 = castEqual f42 <*> pure (MkT @"i42")+          f44 = castEqual f43 <*> pure (MkT @"i43")+          f45 = castEqual f44 <*> pure (MkT @"i44")+          f46 = castEqual f45 <*> pure (MkT @"i45")+          f47 = castEqual f46 <*> pure (MkT @"i46")+          f48 = castEqual f47 <*> pure (MkT @"i47")+          f49 = castEqual f48 <*> pure (MkT @"i48")++          res = castEqual f49 <*> pure (MkT @"i49")++      in res++    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/Ap/Let/Let060.hs view
@@ -0,0 +1,224 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.Ap.Let.Let060 where++import TypeLet++import Test.Infra+import Test.Size.Ap.Index.Ix060++applyF :: forall f r. Applicative f => F r -> f r+applyF f =+    -- 59 .. 50+    case letT (Proxy @(T "i59" -> r))   of { LetT (_ :: Proxy l59) ->+    case letT (Proxy @(T "i58" -> l59)) of { LetT (_ :: Proxy l58) ->+    case letT (Proxy @(T "i57" -> l58)) of { LetT (_ :: Proxy l57) ->+    case letT (Proxy @(T "i56" -> l57)) of { LetT (_ :: Proxy l56) ->+    case letT (Proxy @(T "i55" -> l56)) of { LetT (_ :: Proxy l55) ->+    case letT (Proxy @(T "i54" -> l55)) of { LetT (_ :: Proxy l54) ->+    case letT (Proxy @(T "i53" -> l54)) of { LetT (_ :: Proxy l53) ->+    case letT (Proxy @(T "i52" -> l53)) of { LetT (_ :: Proxy l52) ->+    case letT (Proxy @(T "i51" -> l52)) of { LetT (_ :: Proxy l51) ->+    case letT (Proxy @(T "i50" -> l51)) of { LetT (_ :: Proxy l50) ->+    -- 49 .. 40+    case letT (Proxy @(T "i49" -> l50)) of { LetT (_ :: Proxy l49) ->+    case letT (Proxy @(T "i48" -> l49)) of { LetT (_ :: Proxy l48) ->+    case letT (Proxy @(T "i47" -> l48)) of { LetT (_ :: Proxy l47) ->+    case letT (Proxy @(T "i46" -> l47)) of { LetT (_ :: Proxy l46) ->+    case letT (Proxy @(T "i45" -> l46)) of { LetT (_ :: Proxy l45) ->+    case letT (Proxy @(T "i44" -> l45)) of { LetT (_ :: Proxy l44) ->+    case letT (Proxy @(T "i43" -> l44)) of { LetT (_ :: Proxy l43) ->+    case letT (Proxy @(T "i42" -> l43)) of { LetT (_ :: Proxy l42) ->+    case letT (Proxy @(T "i41" -> l42)) of { LetT (_ :: Proxy l41) ->+    case letT (Proxy @(T "i40" -> l41)) of { LetT (_ :: Proxy l40) ->+    -- 39 .. 30+    case letT (Proxy @(T "i39" -> l40)) of { LetT (_ :: Proxy l39) ->+    case letT (Proxy @(T "i38" -> l39)) of { LetT (_ :: Proxy l38) ->+    case letT (Proxy @(T "i37" -> l38)) of { LetT (_ :: Proxy l37) ->+    case letT (Proxy @(T "i36" -> l37)) of { LetT (_ :: Proxy l36) ->+    case letT (Proxy @(T "i35" -> l36)) of { LetT (_ :: Proxy l35) ->+    case letT (Proxy @(T "i34" -> l35)) of { LetT (_ :: Proxy l34) ->+    case letT (Proxy @(T "i33" -> l34)) of { LetT (_ :: Proxy l33) ->+    case letT (Proxy @(T "i32" -> l33)) of { LetT (_ :: Proxy l32) ->+    case letT (Proxy @(T "i31" -> l32)) of { LetT (_ :: Proxy l31) ->+    case letT (Proxy @(T "i30" -> l31)) of { LetT (_ :: Proxy l30) ->+    -- 29 .. 20+    case letT (Proxy @(T "i29" -> l30)) of { LetT (_ :: Proxy l29) ->+    case letT (Proxy @(T "i28" -> l29)) of { LetT (_ :: Proxy l28) ->+    case letT (Proxy @(T "i27" -> l28)) of { LetT (_ :: Proxy l27) ->+    case letT (Proxy @(T "i26" -> l27)) of { LetT (_ :: Proxy l26) ->+    case letT (Proxy @(T "i25" -> l26)) of { LetT (_ :: Proxy l25) ->+    case letT (Proxy @(T "i24" -> l25)) of { LetT (_ :: Proxy l24) ->+    case letT (Proxy @(T "i23" -> l24)) of { LetT (_ :: Proxy l23) ->+    case letT (Proxy @(T "i22" -> l23)) of { LetT (_ :: Proxy l22) ->+    case letT (Proxy @(T "i21" -> l22)) of { LetT (_ :: Proxy l21) ->+    case letT (Proxy @(T "i20" -> l21)) of { LetT (_ :: Proxy l20) ->+    -- 19 .. 10+    case letT (Proxy @(T "i19" -> l20)) of { LetT (_ :: Proxy l19) ->+    case letT (Proxy @(T "i18" -> l19)) of { LetT (_ :: Proxy l18) ->+    case letT (Proxy @(T "i17" -> l18)) of { LetT (_ :: Proxy l17) ->+    case letT (Proxy @(T "i16" -> l17)) of { LetT (_ :: Proxy l16) ->+    case letT (Proxy @(T "i15" -> l16)) of { LetT (_ :: Proxy l15) ->+    case letT (Proxy @(T "i14" -> l15)) of { LetT (_ :: Proxy l14) ->+    case letT (Proxy @(T "i13" -> l14)) of { LetT (_ :: Proxy l13) ->+    case letT (Proxy @(T "i12" -> l13)) of { LetT (_ :: Proxy l12) ->+    case letT (Proxy @(T "i11" -> l12)) of { LetT (_ :: Proxy l11) ->+    case letT (Proxy @(T "i10" -> l11)) of { LetT (_ :: Proxy l10) ->+    -- 09 .. 00+    case letT (Proxy @(T "i09" -> l10)) of { LetT (_ :: Proxy l09) ->+    case letT (Proxy @(T "i08" -> l09)) of { LetT (_ :: Proxy l08) ->+    case letT (Proxy @(T "i07" -> l08)) of { LetT (_ :: Proxy l07) ->+    case letT (Proxy @(T "i06" -> l07)) of { LetT (_ :: Proxy l06) ->+    case letT (Proxy @(T "i05" -> l06)) of { LetT (_ :: Proxy l05) ->+    case letT (Proxy @(T "i04" -> l05)) of { LetT (_ :: Proxy l04) ->+    case letT (Proxy @(T "i03" -> l04)) of { LetT (_ :: Proxy l03) ->+    case letT (Proxy @(T "i02" -> l03)) of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(T "i01" -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(T "i00" -> l01)) of { LetT (_ :: Proxy l00) ->++      let -- 00 .. 09+          f00 :: f l00+          f01 :: f l01+          f02 :: f l02+          f03 :: f l03+          f04 :: f l04+          f05 :: f l05+          f06 :: f l06+          f07 :: f l07+          f08 :: f l08+          f09 :: f l09+          -- 10 .. 19+          f10 :: f l10+          f11 :: f l11+          f12 :: f l12+          f13 :: f l13+          f14 :: f l14+          f15 :: f l15+          f16 :: f l16+          f17 :: f l17+          f18 :: f l18+          f19 :: f l19+          -- 20 .. 29+          f20 :: f l20+          f21 :: f l21+          f22 :: f l22+          f23 :: f l23+          f24 :: f l24+          f25 :: f l25+          f26 :: f l26+          f27 :: f l27+          f28 :: f l28+          f29 :: f l29+          -- 30 .. 39+          f30 :: f l30+          f31 :: f l31+          f32 :: f l32+          f33 :: f l33+          f34 :: f l34+          f35 :: f l35+          f36 :: f l36+          f37 :: f l37+          f38 :: f l38+          f39 :: f l39+          -- 40 .. 49+          f40 :: f l40+          f41 :: f l41+          f42 :: f l42+          f43 :: f l43+          f44 :: f l44+          f45 :: f l45+          f46 :: f l46+          f47 :: f l47+          f48 :: f l48+          f49 :: f l49+          -- 50 .. 59+          f50 :: f l50+          f51 :: f l51+          f52 :: f l52+          f53 :: f l53+          f54 :: f l54+          f55 :: f l55+          f56 :: f l56+          f57 :: f l57+          f58 :: f l58+          f59 :: f l59++          res :: f r++          -- 00 .. 09+          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure (MkT @"i00")+          f02 = castEqual f01 <*> pure (MkT @"i01")+          f03 = castEqual f02 <*> pure (MkT @"i02")+          f04 = castEqual f03 <*> pure (MkT @"i03")+          f05 = castEqual f04 <*> pure (MkT @"i04")+          f06 = castEqual f05 <*> pure (MkT @"i05")+          f07 = castEqual f06 <*> pure (MkT @"i06")+          f08 = castEqual f07 <*> pure (MkT @"i07")+          f09 = castEqual f08 <*> pure (MkT @"i08")+          -- 10 .. 19+          f10 = castEqual f09 <*> pure (MkT @"i09")+          f11 = castEqual f10 <*> pure (MkT @"i10")+          f12 = castEqual f11 <*> pure (MkT @"i11")+          f13 = castEqual f12 <*> pure (MkT @"i12")+          f14 = castEqual f13 <*> pure (MkT @"i13")+          f15 = castEqual f14 <*> pure (MkT @"i14")+          f16 = castEqual f15 <*> pure (MkT @"i15")+          f17 = castEqual f16 <*> pure (MkT @"i16")+          f18 = castEqual f17 <*> pure (MkT @"i17")+          f19 = castEqual f18 <*> pure (MkT @"i18")+          -- 20 .. 29+          f20 = castEqual f19 <*> pure (MkT @"i19")+          f21 = castEqual f20 <*> pure (MkT @"i20")+          f22 = castEqual f21 <*> pure (MkT @"i21")+          f23 = castEqual f22 <*> pure (MkT @"i22")+          f24 = castEqual f23 <*> pure (MkT @"i23")+          f25 = castEqual f24 <*> pure (MkT @"i24")+          f26 = castEqual f25 <*> pure (MkT @"i25")+          f27 = castEqual f26 <*> pure (MkT @"i26")+          f28 = castEqual f27 <*> pure (MkT @"i27")+          f29 = castEqual f28 <*> pure (MkT @"i28")+          -- 30 .. 39+          f30 = castEqual f29 <*> pure (MkT @"i29")+          f31 = castEqual f30 <*> pure (MkT @"i30")+          f32 = castEqual f31 <*> pure (MkT @"i31")+          f33 = castEqual f32 <*> pure (MkT @"i32")+          f34 = castEqual f33 <*> pure (MkT @"i33")+          f35 = castEqual f34 <*> pure (MkT @"i34")+          f36 = castEqual f35 <*> pure (MkT @"i35")+          f37 = castEqual f36 <*> pure (MkT @"i36")+          f38 = castEqual f37 <*> pure (MkT @"i37")+          f39 = castEqual f38 <*> pure (MkT @"i38")+          -- 40 .. 49+          f40 = castEqual f39 <*> pure (MkT @"i39")+          f41 = castEqual f40 <*> pure (MkT @"i40")+          f42 = castEqual f41 <*> pure (MkT @"i41")+          f43 = castEqual f42 <*> pure (MkT @"i42")+          f44 = castEqual f43 <*> pure (MkT @"i43")+          f45 = castEqual f44 <*> pure (MkT @"i44")+          f46 = castEqual f45 <*> pure (MkT @"i45")+          f47 = castEqual f46 <*> pure (MkT @"i46")+          f48 = castEqual f47 <*> pure (MkT @"i47")+          f49 = castEqual f48 <*> pure (MkT @"i48")+          -- 50 .. 59+          f50 = castEqual f49 <*> pure (MkT @"i49")+          f51 = castEqual f50 <*> pure (MkT @"i50")+          f52 = castEqual f51 <*> pure (MkT @"i51")+          f53 = castEqual f52 <*> pure (MkT @"i52")+          f54 = castEqual f53 <*> pure (MkT @"i53")+          f55 = castEqual f54 <*> pure (MkT @"i54")+          f56 = castEqual f55 <*> pure (MkT @"i55")+          f57 = castEqual f56 <*> pure (MkT @"i56")+          f58 = castEqual f57 <*> pure (MkT @"i57")+          f59 = castEqual f58 <*> pure (MkT @"i58")++          res = castEqual f59 <*> pure (MkT @"i59")++      in res++    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/Ap/Let/Let070.hs view
@@ -0,0 +1,258 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.Ap.Let.Let070 where++import TypeLet++import Test.Infra+import Test.Size.Ap.Index.Ix070++applyF :: forall f r. Applicative f => F r -> f r+applyF f =+    -- 69 .. 60+    case letT (Proxy @(T "i69" -> r))   of { LetT (_ :: Proxy l69) ->+    case letT (Proxy @(T "i68" -> l69)) of { LetT (_ :: Proxy l68) ->+    case letT (Proxy @(T "i67" -> l68)) of { LetT (_ :: Proxy l67) ->+    case letT (Proxy @(T "i66" -> l67)) of { LetT (_ :: Proxy l66) ->+    case letT (Proxy @(T "i65" -> l66)) of { LetT (_ :: Proxy l65) ->+    case letT (Proxy @(T "i64" -> l65)) of { LetT (_ :: Proxy l64) ->+    case letT (Proxy @(T "i63" -> l64)) of { LetT (_ :: Proxy l63) ->+    case letT (Proxy @(T "i62" -> l63)) of { LetT (_ :: Proxy l62) ->+    case letT (Proxy @(T "i61" -> l62)) of { LetT (_ :: Proxy l61) ->+    case letT (Proxy @(T "i60" -> l61)) of { LetT (_ :: Proxy l60) ->+    -- 59 .. 50+    case letT (Proxy @(T "i59" -> l60)) of { LetT (_ :: Proxy l59) ->+    case letT (Proxy @(T "i58" -> l59)) of { LetT (_ :: Proxy l58) ->+    case letT (Proxy @(T "i57" -> l58)) of { LetT (_ :: Proxy l57) ->+    case letT (Proxy @(T "i56" -> l57)) of { LetT (_ :: Proxy l56) ->+    case letT (Proxy @(T "i55" -> l56)) of { LetT (_ :: Proxy l55) ->+    case letT (Proxy @(T "i54" -> l55)) of { LetT (_ :: Proxy l54) ->+    case letT (Proxy @(T "i53" -> l54)) of { LetT (_ :: Proxy l53) ->+    case letT (Proxy @(T "i52" -> l53)) of { LetT (_ :: Proxy l52) ->+    case letT (Proxy @(T "i51" -> l52)) of { LetT (_ :: Proxy l51) ->+    case letT (Proxy @(T "i50" -> l51)) of { LetT (_ :: Proxy l50) ->+    -- 49 .. 40+    case letT (Proxy @(T "i49" -> l50)) of { LetT (_ :: Proxy l49) ->+    case letT (Proxy @(T "i48" -> l49)) of { LetT (_ :: Proxy l48) ->+    case letT (Proxy @(T "i47" -> l48)) of { LetT (_ :: Proxy l47) ->+    case letT (Proxy @(T "i46" -> l47)) of { LetT (_ :: Proxy l46) ->+    case letT (Proxy @(T "i45" -> l46)) of { LetT (_ :: Proxy l45) ->+    case letT (Proxy @(T "i44" -> l45)) of { LetT (_ :: Proxy l44) ->+    case letT (Proxy @(T "i43" -> l44)) of { LetT (_ :: Proxy l43) ->+    case letT (Proxy @(T "i42" -> l43)) of { LetT (_ :: Proxy l42) ->+    case letT (Proxy @(T "i41" -> l42)) of { LetT (_ :: Proxy l41) ->+    case letT (Proxy @(T "i40" -> l41)) of { LetT (_ :: Proxy l40) ->+    -- 39 .. 30+    case letT (Proxy @(T "i39" -> l40)) of { LetT (_ :: Proxy l39) ->+    case letT (Proxy @(T "i38" -> l39)) of { LetT (_ :: Proxy l38) ->+    case letT (Proxy @(T "i37" -> l38)) of { LetT (_ :: Proxy l37) ->+    case letT (Proxy @(T "i36" -> l37)) of { LetT (_ :: Proxy l36) ->+    case letT (Proxy @(T "i35" -> l36)) of { LetT (_ :: Proxy l35) ->+    case letT (Proxy @(T "i34" -> l35)) of { LetT (_ :: Proxy l34) ->+    case letT (Proxy @(T "i33" -> l34)) of { LetT (_ :: Proxy l33) ->+    case letT (Proxy @(T "i32" -> l33)) of { LetT (_ :: Proxy l32) ->+    case letT (Proxy @(T "i31" -> l32)) of { LetT (_ :: Proxy l31) ->+    case letT (Proxy @(T "i30" -> l31)) of { LetT (_ :: Proxy l30) ->+    -- 29 .. 20+    case letT (Proxy @(T "i29" -> l30)) of { LetT (_ :: Proxy l29) ->+    case letT (Proxy @(T "i28" -> l29)) of { LetT (_ :: Proxy l28) ->+    case letT (Proxy @(T "i27" -> l28)) of { LetT (_ :: Proxy l27) ->+    case letT (Proxy @(T "i26" -> l27)) of { LetT (_ :: Proxy l26) ->+    case letT (Proxy @(T "i25" -> l26)) of { LetT (_ :: Proxy l25) ->+    case letT (Proxy @(T "i24" -> l25)) of { LetT (_ :: Proxy l24) ->+    case letT (Proxy @(T "i23" -> l24)) of { LetT (_ :: Proxy l23) ->+    case letT (Proxy @(T "i22" -> l23)) of { LetT (_ :: Proxy l22) ->+    case letT (Proxy @(T "i21" -> l22)) of { LetT (_ :: Proxy l21) ->+    case letT (Proxy @(T "i20" -> l21)) of { LetT (_ :: Proxy l20) ->+    -- 19 .. 10+    case letT (Proxy @(T "i19" -> l20)) of { LetT (_ :: Proxy l19) ->+    case letT (Proxy @(T "i18" -> l19)) of { LetT (_ :: Proxy l18) ->+    case letT (Proxy @(T "i17" -> l18)) of { LetT (_ :: Proxy l17) ->+    case letT (Proxy @(T "i16" -> l17)) of { LetT (_ :: Proxy l16) ->+    case letT (Proxy @(T "i15" -> l16)) of { LetT (_ :: Proxy l15) ->+    case letT (Proxy @(T "i14" -> l15)) of { LetT (_ :: Proxy l14) ->+    case letT (Proxy @(T "i13" -> l14)) of { LetT (_ :: Proxy l13) ->+    case letT (Proxy @(T "i12" -> l13)) of { LetT (_ :: Proxy l12) ->+    case letT (Proxy @(T "i11" -> l12)) of { LetT (_ :: Proxy l11) ->+    case letT (Proxy @(T "i10" -> l11)) of { LetT (_ :: Proxy l10) ->+    -- 09 .. 00+    case letT (Proxy @(T "i09" -> l10)) of { LetT (_ :: Proxy l09) ->+    case letT (Proxy @(T "i08" -> l09)) of { LetT (_ :: Proxy l08) ->+    case letT (Proxy @(T "i07" -> l08)) of { LetT (_ :: Proxy l07) ->+    case letT (Proxy @(T "i06" -> l07)) of { LetT (_ :: Proxy l06) ->+    case letT (Proxy @(T "i05" -> l06)) of { LetT (_ :: Proxy l05) ->+    case letT (Proxy @(T "i04" -> l05)) of { LetT (_ :: Proxy l04) ->+    case letT (Proxy @(T "i03" -> l04)) of { LetT (_ :: Proxy l03) ->+    case letT (Proxy @(T "i02" -> l03)) of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(T "i01" -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(T "i00" -> l01)) of { LetT (_ :: Proxy l00) ->++      let -- 00 .. 09+          f00 :: f l00+          f01 :: f l01+          f02 :: f l02+          f03 :: f l03+          f04 :: f l04+          f05 :: f l05+          f06 :: f l06+          f07 :: f l07+          f08 :: f l08+          f09 :: f l09+          -- 10 .. 19+          f10 :: f l10+          f11 :: f l11+          f12 :: f l12+          f13 :: f l13+          f14 :: f l14+          f15 :: f l15+          f16 :: f l16+          f17 :: f l17+          f18 :: f l18+          f19 :: f l19+          -- 20 .. 29+          f20 :: f l20+          f21 :: f l21+          f22 :: f l22+          f23 :: f l23+          f24 :: f l24+          f25 :: f l25+          f26 :: f l26+          f27 :: f l27+          f28 :: f l28+          f29 :: f l29+          -- 30 .. 39+          f30 :: f l30+          f31 :: f l31+          f32 :: f l32+          f33 :: f l33+          f34 :: f l34+          f35 :: f l35+          f36 :: f l36+          f37 :: f l37+          f38 :: f l38+          f39 :: f l39+          -- 40 .. 49+          f40 :: f l40+          f41 :: f l41+          f42 :: f l42+          f43 :: f l43+          f44 :: f l44+          f45 :: f l45+          f46 :: f l46+          f47 :: f l47+          f48 :: f l48+          f49 :: f l49+          -- 50 .. 59+          f50 :: f l50+          f51 :: f l51+          f52 :: f l52+          f53 :: f l53+          f54 :: f l54+          f55 :: f l55+          f56 :: f l56+          f57 :: f l57+          f58 :: f l58+          f59 :: f l59+          -- 60 .. 69+          f60 :: f l60+          f61 :: f l61+          f62 :: f l62+          f63 :: f l63+          f64 :: f l64+          f65 :: f l65+          f66 :: f l66+          f67 :: f l67+          f68 :: f l68+          f69 :: f l69++          res :: f r++          -- 00 .. 09+          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure (MkT @"i00")+          f02 = castEqual f01 <*> pure (MkT @"i01")+          f03 = castEqual f02 <*> pure (MkT @"i02")+          f04 = castEqual f03 <*> pure (MkT @"i03")+          f05 = castEqual f04 <*> pure (MkT @"i04")+          f06 = castEqual f05 <*> pure (MkT @"i05")+          f07 = castEqual f06 <*> pure (MkT @"i06")+          f08 = castEqual f07 <*> pure (MkT @"i07")+          f09 = castEqual f08 <*> pure (MkT @"i08")+          -- 10 .. 19+          f10 = castEqual f09 <*> pure (MkT @"i09")+          f11 = castEqual f10 <*> pure (MkT @"i10")+          f12 = castEqual f11 <*> pure (MkT @"i11")+          f13 = castEqual f12 <*> pure (MkT @"i12")+          f14 = castEqual f13 <*> pure (MkT @"i13")+          f15 = castEqual f14 <*> pure (MkT @"i14")+          f16 = castEqual f15 <*> pure (MkT @"i15")+          f17 = castEqual f16 <*> pure (MkT @"i16")+          f18 = castEqual f17 <*> pure (MkT @"i17")+          f19 = castEqual f18 <*> pure (MkT @"i18")+          -- 20 .. 29+          f20 = castEqual f19 <*> pure (MkT @"i19")+          f21 = castEqual f20 <*> pure (MkT @"i20")+          f22 = castEqual f21 <*> pure (MkT @"i21")+          f23 = castEqual f22 <*> pure (MkT @"i22")+          f24 = castEqual f23 <*> pure (MkT @"i23")+          f25 = castEqual f24 <*> pure (MkT @"i24")+          f26 = castEqual f25 <*> pure (MkT @"i25")+          f27 = castEqual f26 <*> pure (MkT @"i26")+          f28 = castEqual f27 <*> pure (MkT @"i27")+          f29 = castEqual f28 <*> pure (MkT @"i28")+          -- 30 .. 39+          f30 = castEqual f29 <*> pure (MkT @"i29")+          f31 = castEqual f30 <*> pure (MkT @"i30")+          f32 = castEqual f31 <*> pure (MkT @"i31")+          f33 = castEqual f32 <*> pure (MkT @"i32")+          f34 = castEqual f33 <*> pure (MkT @"i33")+          f35 = castEqual f34 <*> pure (MkT @"i34")+          f36 = castEqual f35 <*> pure (MkT @"i35")+          f37 = castEqual f36 <*> pure (MkT @"i36")+          f38 = castEqual f37 <*> pure (MkT @"i37")+          f39 = castEqual f38 <*> pure (MkT @"i38")+          -- 40 .. 49+          f40 = castEqual f39 <*> pure (MkT @"i39")+          f41 = castEqual f40 <*> pure (MkT @"i40")+          f42 = castEqual f41 <*> pure (MkT @"i41")+          f43 = castEqual f42 <*> pure (MkT @"i42")+          f44 = castEqual f43 <*> pure (MkT @"i43")+          f45 = castEqual f44 <*> pure (MkT @"i44")+          f46 = castEqual f45 <*> pure (MkT @"i45")+          f47 = castEqual f46 <*> pure (MkT @"i46")+          f48 = castEqual f47 <*> pure (MkT @"i47")+          f49 = castEqual f48 <*> pure (MkT @"i48")+          -- 50 .. 59+          f50 = castEqual f49 <*> pure (MkT @"i49")+          f51 = castEqual f50 <*> pure (MkT @"i50")+          f52 = castEqual f51 <*> pure (MkT @"i51")+          f53 = castEqual f52 <*> pure (MkT @"i52")+          f54 = castEqual f53 <*> pure (MkT @"i53")+          f55 = castEqual f54 <*> pure (MkT @"i54")+          f56 = castEqual f55 <*> pure (MkT @"i55")+          f57 = castEqual f56 <*> pure (MkT @"i56")+          f58 = castEqual f57 <*> pure (MkT @"i57")+          f59 = castEqual f58 <*> pure (MkT @"i58")+          -- 60 .. 69+          f60 = castEqual f59 <*> pure (MkT @"i59")+          f61 = castEqual f60 <*> pure (MkT @"i60")+          f62 = castEqual f61 <*> pure (MkT @"i61")+          f63 = castEqual f62 <*> pure (MkT @"i62")+          f64 = castEqual f63 <*> pure (MkT @"i63")+          f65 = castEqual f64 <*> pure (MkT @"i64")+          f66 = castEqual f65 <*> pure (MkT @"i65")+          f67 = castEqual f66 <*> pure (MkT @"i66")+          f68 = castEqual f67 <*> pure (MkT @"i67")+          f69 = castEqual f68 <*> pure (MkT @"i68")++          res = castEqual f69 <*> pure (MkT @"i69")++      in res++    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/Ap/Let/Let080.hs view
@@ -0,0 +1,292 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.Ap.Let.Let080 where++import TypeLet++import Test.Infra+import Test.Size.Ap.Index.Ix080++applyF :: forall f r. Applicative f => F r -> f r+applyF f =+    -- 79 .. 70+    case letT (Proxy @(T "i79" -> r))   of { LetT (_ :: Proxy l79) ->+    case letT (Proxy @(T "i78" -> l79)) of { LetT (_ :: Proxy l78) ->+    case letT (Proxy @(T "i77" -> l78)) of { LetT (_ :: Proxy l77) ->+    case letT (Proxy @(T "i76" -> l77)) of { LetT (_ :: Proxy l76) ->+    case letT (Proxy @(T "i75" -> l76)) of { LetT (_ :: Proxy l75) ->+    case letT (Proxy @(T "i74" -> l75)) of { LetT (_ :: Proxy l74) ->+    case letT (Proxy @(T "i73" -> l74)) of { LetT (_ :: Proxy l73) ->+    case letT (Proxy @(T "i72" -> l73)) of { LetT (_ :: Proxy l72) ->+    case letT (Proxy @(T "i71" -> l72)) of { LetT (_ :: Proxy l71) ->+    case letT (Proxy @(T "i70" -> l71)) of { LetT (_ :: Proxy l70) ->+    -- 69 .. 60+    case letT (Proxy @(T "i69" -> l70)) of { LetT (_ :: Proxy l69) ->+    case letT (Proxy @(T "i68" -> l69)) of { LetT (_ :: Proxy l68) ->+    case letT (Proxy @(T "i67" -> l68)) of { LetT (_ :: Proxy l67) ->+    case letT (Proxy @(T "i66" -> l67)) of { LetT (_ :: Proxy l66) ->+    case letT (Proxy @(T "i65" -> l66)) of { LetT (_ :: Proxy l65) ->+    case letT (Proxy @(T "i64" -> l65)) of { LetT (_ :: Proxy l64) ->+    case letT (Proxy @(T "i63" -> l64)) of { LetT (_ :: Proxy l63) ->+    case letT (Proxy @(T "i62" -> l63)) of { LetT (_ :: Proxy l62) ->+    case letT (Proxy @(T "i61" -> l62)) of { LetT (_ :: Proxy l61) ->+    case letT (Proxy @(T "i60" -> l61)) of { LetT (_ :: Proxy l60) ->+    -- 59 .. 50+    case letT (Proxy @(T "i59" -> l60)) of { LetT (_ :: Proxy l59) ->+    case letT (Proxy @(T "i58" -> l59)) of { LetT (_ :: Proxy l58) ->+    case letT (Proxy @(T "i57" -> l58)) of { LetT (_ :: Proxy l57) ->+    case letT (Proxy @(T "i56" -> l57)) of { LetT (_ :: Proxy l56) ->+    case letT (Proxy @(T "i55" -> l56)) of { LetT (_ :: Proxy l55) ->+    case letT (Proxy @(T "i54" -> l55)) of { LetT (_ :: Proxy l54) ->+    case letT (Proxy @(T "i53" -> l54)) of { LetT (_ :: Proxy l53) ->+    case letT (Proxy @(T "i52" -> l53)) of { LetT (_ :: Proxy l52) ->+    case letT (Proxy @(T "i51" -> l52)) of { LetT (_ :: Proxy l51) ->+    case letT (Proxy @(T "i50" -> l51)) of { LetT (_ :: Proxy l50) ->+    -- 49 .. 40+    case letT (Proxy @(T "i49" -> l50)) of { LetT (_ :: Proxy l49) ->+    case letT (Proxy @(T "i48" -> l49)) of { LetT (_ :: Proxy l48) ->+    case letT (Proxy @(T "i47" -> l48)) of { LetT (_ :: Proxy l47) ->+    case letT (Proxy @(T "i46" -> l47)) of { LetT (_ :: Proxy l46) ->+    case letT (Proxy @(T "i45" -> l46)) of { LetT (_ :: Proxy l45) ->+    case letT (Proxy @(T "i44" -> l45)) of { LetT (_ :: Proxy l44) ->+    case letT (Proxy @(T "i43" -> l44)) of { LetT (_ :: Proxy l43) ->+    case letT (Proxy @(T "i42" -> l43)) of { LetT (_ :: Proxy l42) ->+    case letT (Proxy @(T "i41" -> l42)) of { LetT (_ :: Proxy l41) ->+    case letT (Proxy @(T "i40" -> l41)) of { LetT (_ :: Proxy l40) ->+    -- 39 .. 30+    case letT (Proxy @(T "i39" -> l40)) of { LetT (_ :: Proxy l39) ->+    case letT (Proxy @(T "i38" -> l39)) of { LetT (_ :: Proxy l38) ->+    case letT (Proxy @(T "i37" -> l38)) of { LetT (_ :: Proxy l37) ->+    case letT (Proxy @(T "i36" -> l37)) of { LetT (_ :: Proxy l36) ->+    case letT (Proxy @(T "i35" -> l36)) of { LetT (_ :: Proxy l35) ->+    case letT (Proxy @(T "i34" -> l35)) of { LetT (_ :: Proxy l34) ->+    case letT (Proxy @(T "i33" -> l34)) of { LetT (_ :: Proxy l33) ->+    case letT (Proxy @(T "i32" -> l33)) of { LetT (_ :: Proxy l32) ->+    case letT (Proxy @(T "i31" -> l32)) of { LetT (_ :: Proxy l31) ->+    case letT (Proxy @(T "i30" -> l31)) of { LetT (_ :: Proxy l30) ->+    -- 29 .. 20+    case letT (Proxy @(T "i29" -> l30)) of { LetT (_ :: Proxy l29) ->+    case letT (Proxy @(T "i28" -> l29)) of { LetT (_ :: Proxy l28) ->+    case letT (Proxy @(T "i27" -> l28)) of { LetT (_ :: Proxy l27) ->+    case letT (Proxy @(T "i26" -> l27)) of { LetT (_ :: Proxy l26) ->+    case letT (Proxy @(T "i25" -> l26)) of { LetT (_ :: Proxy l25) ->+    case letT (Proxy @(T "i24" -> l25)) of { LetT (_ :: Proxy l24) ->+    case letT (Proxy @(T "i23" -> l24)) of { LetT (_ :: Proxy l23) ->+    case letT (Proxy @(T "i22" -> l23)) of { LetT (_ :: Proxy l22) ->+    case letT (Proxy @(T "i21" -> l22)) of { LetT (_ :: Proxy l21) ->+    case letT (Proxy @(T "i20" -> l21)) of { LetT (_ :: Proxy l20) ->+    -- 19 .. 10+    case letT (Proxy @(T "i19" -> l20)) of { LetT (_ :: Proxy l19) ->+    case letT (Proxy @(T "i18" -> l19)) of { LetT (_ :: Proxy l18) ->+    case letT (Proxy @(T "i17" -> l18)) of { LetT (_ :: Proxy l17) ->+    case letT (Proxy @(T "i16" -> l17)) of { LetT (_ :: Proxy l16) ->+    case letT (Proxy @(T "i15" -> l16)) of { LetT (_ :: Proxy l15) ->+    case letT (Proxy @(T "i14" -> l15)) of { LetT (_ :: Proxy l14) ->+    case letT (Proxy @(T "i13" -> l14)) of { LetT (_ :: Proxy l13) ->+    case letT (Proxy @(T "i12" -> l13)) of { LetT (_ :: Proxy l12) ->+    case letT (Proxy @(T "i11" -> l12)) of { LetT (_ :: Proxy l11) ->+    case letT (Proxy @(T "i10" -> l11)) of { LetT (_ :: Proxy l10) ->+    -- 09 .. 00+    case letT (Proxy @(T "i09" -> l10)) of { LetT (_ :: Proxy l09) ->+    case letT (Proxy @(T "i08" -> l09)) of { LetT (_ :: Proxy l08) ->+    case letT (Proxy @(T "i07" -> l08)) of { LetT (_ :: Proxy l07) ->+    case letT (Proxy @(T "i06" -> l07)) of { LetT (_ :: Proxy l06) ->+    case letT (Proxy @(T "i05" -> l06)) of { LetT (_ :: Proxy l05) ->+    case letT (Proxy @(T "i04" -> l05)) of { LetT (_ :: Proxy l04) ->+    case letT (Proxy @(T "i03" -> l04)) of { LetT (_ :: Proxy l03) ->+    case letT (Proxy @(T "i02" -> l03)) of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(T "i01" -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(T "i00" -> l01)) of { LetT (_ :: Proxy l00) ->++      let -- 00 .. 09+          f00 :: f l00+          f01 :: f l01+          f02 :: f l02+          f03 :: f l03+          f04 :: f l04+          f05 :: f l05+          f06 :: f l06+          f07 :: f l07+          f08 :: f l08+          f09 :: f l09+          -- 10 .. 19+          f10 :: f l10+          f11 :: f l11+          f12 :: f l12+          f13 :: f l13+          f14 :: f l14+          f15 :: f l15+          f16 :: f l16+          f17 :: f l17+          f18 :: f l18+          f19 :: f l19+          -- 20 .. 29+          f20 :: f l20+          f21 :: f l21+          f22 :: f l22+          f23 :: f l23+          f24 :: f l24+          f25 :: f l25+          f26 :: f l26+          f27 :: f l27+          f28 :: f l28+          f29 :: f l29+          -- 30 .. 39+          f30 :: f l30+          f31 :: f l31+          f32 :: f l32+          f33 :: f l33+          f34 :: f l34+          f35 :: f l35+          f36 :: f l36+          f37 :: f l37+          f38 :: f l38+          f39 :: f l39+          -- 40 .. 49+          f40 :: f l40+          f41 :: f l41+          f42 :: f l42+          f43 :: f l43+          f44 :: f l44+          f45 :: f l45+          f46 :: f l46+          f47 :: f l47+          f48 :: f l48+          f49 :: f l49+          -- 50 .. 59+          f50 :: f l50+          f51 :: f l51+          f52 :: f l52+          f53 :: f l53+          f54 :: f l54+          f55 :: f l55+          f56 :: f l56+          f57 :: f l57+          f58 :: f l58+          f59 :: f l59+          -- 60 .. 69+          f60 :: f l60+          f61 :: f l61+          f62 :: f l62+          f63 :: f l63+          f64 :: f l64+          f65 :: f l65+          f66 :: f l66+          f67 :: f l67+          f68 :: f l68+          f69 :: f l69+          -- 70 .. 79+          f70 :: f l70+          f71 :: f l71+          f72 :: f l72+          f73 :: f l73+          f74 :: f l74+          f75 :: f l75+          f76 :: f l76+          f77 :: f l77+          f78 :: f l78+          f79 :: f l79++          res :: f r++          -- 00 .. 09+          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure (MkT @"i00")+          f02 = castEqual f01 <*> pure (MkT @"i01")+          f03 = castEqual f02 <*> pure (MkT @"i02")+          f04 = castEqual f03 <*> pure (MkT @"i03")+          f05 = castEqual f04 <*> pure (MkT @"i04")+          f06 = castEqual f05 <*> pure (MkT @"i05")+          f07 = castEqual f06 <*> pure (MkT @"i06")+          f08 = castEqual f07 <*> pure (MkT @"i07")+          f09 = castEqual f08 <*> pure (MkT @"i08")+          -- 10 .. 19+          f10 = castEqual f09 <*> pure (MkT @"i09")+          f11 = castEqual f10 <*> pure (MkT @"i10")+          f12 = castEqual f11 <*> pure (MkT @"i11")+          f13 = castEqual f12 <*> pure (MkT @"i12")+          f14 = castEqual f13 <*> pure (MkT @"i13")+          f15 = castEqual f14 <*> pure (MkT @"i14")+          f16 = castEqual f15 <*> pure (MkT @"i15")+          f17 = castEqual f16 <*> pure (MkT @"i16")+          f18 = castEqual f17 <*> pure (MkT @"i17")+          f19 = castEqual f18 <*> pure (MkT @"i18")+          -- 20 .. 29+          f20 = castEqual f19 <*> pure (MkT @"i19")+          f21 = castEqual f20 <*> pure (MkT @"i20")+          f22 = castEqual f21 <*> pure (MkT @"i21")+          f23 = castEqual f22 <*> pure (MkT @"i22")+          f24 = castEqual f23 <*> pure (MkT @"i23")+          f25 = castEqual f24 <*> pure (MkT @"i24")+          f26 = castEqual f25 <*> pure (MkT @"i25")+          f27 = castEqual f26 <*> pure (MkT @"i26")+          f28 = castEqual f27 <*> pure (MkT @"i27")+          f29 = castEqual f28 <*> pure (MkT @"i28")+          -- 30 .. 39+          f30 = castEqual f29 <*> pure (MkT @"i29")+          f31 = castEqual f30 <*> pure (MkT @"i30")+          f32 = castEqual f31 <*> pure (MkT @"i31")+          f33 = castEqual f32 <*> pure (MkT @"i32")+          f34 = castEqual f33 <*> pure (MkT @"i33")+          f35 = castEqual f34 <*> pure (MkT @"i34")+          f36 = castEqual f35 <*> pure (MkT @"i35")+          f37 = castEqual f36 <*> pure (MkT @"i36")+          f38 = castEqual f37 <*> pure (MkT @"i37")+          f39 = castEqual f38 <*> pure (MkT @"i38")+          -- 40 .. 49+          f40 = castEqual f39 <*> pure (MkT @"i39")+          f41 = castEqual f40 <*> pure (MkT @"i40")+          f42 = castEqual f41 <*> pure (MkT @"i41")+          f43 = castEqual f42 <*> pure (MkT @"i42")+          f44 = castEqual f43 <*> pure (MkT @"i43")+          f45 = castEqual f44 <*> pure (MkT @"i44")+          f46 = castEqual f45 <*> pure (MkT @"i45")+          f47 = castEqual f46 <*> pure (MkT @"i46")+          f48 = castEqual f47 <*> pure (MkT @"i47")+          f49 = castEqual f48 <*> pure (MkT @"i48")+          -- 50 .. 59+          f50 = castEqual f49 <*> pure (MkT @"i49")+          f51 = castEqual f50 <*> pure (MkT @"i50")+          f52 = castEqual f51 <*> pure (MkT @"i51")+          f53 = castEqual f52 <*> pure (MkT @"i52")+          f54 = castEqual f53 <*> pure (MkT @"i53")+          f55 = castEqual f54 <*> pure (MkT @"i54")+          f56 = castEqual f55 <*> pure (MkT @"i55")+          f57 = castEqual f56 <*> pure (MkT @"i56")+          f58 = castEqual f57 <*> pure (MkT @"i57")+          f59 = castEqual f58 <*> pure (MkT @"i58")+          -- 60 .. 69+          f60 = castEqual f59 <*> pure (MkT @"i59")+          f61 = castEqual f60 <*> pure (MkT @"i60")+          f62 = castEqual f61 <*> pure (MkT @"i61")+          f63 = castEqual f62 <*> pure (MkT @"i62")+          f64 = castEqual f63 <*> pure (MkT @"i63")+          f65 = castEqual f64 <*> pure (MkT @"i64")+          f66 = castEqual f65 <*> pure (MkT @"i65")+          f67 = castEqual f66 <*> pure (MkT @"i66")+          f68 = castEqual f67 <*> pure (MkT @"i67")+          f69 = castEqual f68 <*> pure (MkT @"i68")+          -- 70 .. 79+          f70 = castEqual f69 <*> pure (MkT @"i69")+          f71 = castEqual f70 <*> pure (MkT @"i70")+          f72 = castEqual f71 <*> pure (MkT @"i71")+          f73 = castEqual f72 <*> pure (MkT @"i72")+          f74 = castEqual f73 <*> pure (MkT @"i73")+          f75 = castEqual f74 <*> pure (MkT @"i74")+          f76 = castEqual f75 <*> pure (MkT @"i75")+          f77 = castEqual f76 <*> pure (MkT @"i76")+          f78 = castEqual f77 <*> pure (MkT @"i77")+          f79 = castEqual f78 <*> pure (MkT @"i78")++          res = castEqual f79 <*> pure (MkT @"i79")++      in res++    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/Ap/Let/Let090.hs view
@@ -0,0 +1,326 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.Ap.Let.Let090 where++import TypeLet++import Test.Infra+import Test.Size.Ap.Index.Ix090++applyF :: forall f r. Applicative f => F r -> f r+applyF f =+    -- 89 .. 80+    case letT (Proxy @(T "i89" -> r))   of { LetT (_ :: Proxy l89) ->+    case letT (Proxy @(T "i88" -> l89)) of { LetT (_ :: Proxy l88) ->+    case letT (Proxy @(T "i87" -> l88)) of { LetT (_ :: Proxy l87) ->+    case letT (Proxy @(T "i86" -> l87)) of { LetT (_ :: Proxy l86) ->+    case letT (Proxy @(T "i85" -> l86)) of { LetT (_ :: Proxy l85) ->+    case letT (Proxy @(T "i84" -> l85)) of { LetT (_ :: Proxy l84) ->+    case letT (Proxy @(T "i83" -> l84)) of { LetT (_ :: Proxy l83) ->+    case letT (Proxy @(T "i82" -> l83)) of { LetT (_ :: Proxy l82) ->+    case letT (Proxy @(T "i81" -> l82)) of { LetT (_ :: Proxy l81) ->+    case letT (Proxy @(T "i80" -> l81)) of { LetT (_ :: Proxy l80) ->+    -- 79 .. 70+    case letT (Proxy @(T "i79" -> l80)) of { LetT (_ :: Proxy l79) ->+    case letT (Proxy @(T "i78" -> l79)) of { LetT (_ :: Proxy l78) ->+    case letT (Proxy @(T "i77" -> l78)) of { LetT (_ :: Proxy l77) ->+    case letT (Proxy @(T "i76" -> l77)) of { LetT (_ :: Proxy l76) ->+    case letT (Proxy @(T "i75" -> l76)) of { LetT (_ :: Proxy l75) ->+    case letT (Proxy @(T "i74" -> l75)) of { LetT (_ :: Proxy l74) ->+    case letT (Proxy @(T "i73" -> l74)) of { LetT (_ :: Proxy l73) ->+    case letT (Proxy @(T "i72" -> l73)) of { LetT (_ :: Proxy l72) ->+    case letT (Proxy @(T "i71" -> l72)) of { LetT (_ :: Proxy l71) ->+    case letT (Proxy @(T "i70" -> l71)) of { LetT (_ :: Proxy l70) ->+    -- 69 .. 60+    case letT (Proxy @(T "i69" -> l70)) of { LetT (_ :: Proxy l69) ->+    case letT (Proxy @(T "i68" -> l69)) of { LetT (_ :: Proxy l68) ->+    case letT (Proxy @(T "i67" -> l68)) of { LetT (_ :: Proxy l67) ->+    case letT (Proxy @(T "i66" -> l67)) of { LetT (_ :: Proxy l66) ->+    case letT (Proxy @(T "i65" -> l66)) of { LetT (_ :: Proxy l65) ->+    case letT (Proxy @(T "i64" -> l65)) of { LetT (_ :: Proxy l64) ->+    case letT (Proxy @(T "i63" -> l64)) of { LetT (_ :: Proxy l63) ->+    case letT (Proxy @(T "i62" -> l63)) of { LetT (_ :: Proxy l62) ->+    case letT (Proxy @(T "i61" -> l62)) of { LetT (_ :: Proxy l61) ->+    case letT (Proxy @(T "i60" -> l61)) of { LetT (_ :: Proxy l60) ->+    -- 59 .. 50+    case letT (Proxy @(T "i59" -> l60)) of { LetT (_ :: Proxy l59) ->+    case letT (Proxy @(T "i58" -> l59)) of { LetT (_ :: Proxy l58) ->+    case letT (Proxy @(T "i57" -> l58)) of { LetT (_ :: Proxy l57) ->+    case letT (Proxy @(T "i56" -> l57)) of { LetT (_ :: Proxy l56) ->+    case letT (Proxy @(T "i55" -> l56)) of { LetT (_ :: Proxy l55) ->+    case letT (Proxy @(T "i54" -> l55)) of { LetT (_ :: Proxy l54) ->+    case letT (Proxy @(T "i53" -> l54)) of { LetT (_ :: Proxy l53) ->+    case letT (Proxy @(T "i52" -> l53)) of { LetT (_ :: Proxy l52) ->+    case letT (Proxy @(T "i51" -> l52)) of { LetT (_ :: Proxy l51) ->+    case letT (Proxy @(T "i50" -> l51)) of { LetT (_ :: Proxy l50) ->+    -- 49 .. 40+    case letT (Proxy @(T "i49" -> l50)) of { LetT (_ :: Proxy l49) ->+    case letT (Proxy @(T "i48" -> l49)) of { LetT (_ :: Proxy l48) ->+    case letT (Proxy @(T "i47" -> l48)) of { LetT (_ :: Proxy l47) ->+    case letT (Proxy @(T "i46" -> l47)) of { LetT (_ :: Proxy l46) ->+    case letT (Proxy @(T "i45" -> l46)) of { LetT (_ :: Proxy l45) ->+    case letT (Proxy @(T "i44" -> l45)) of { LetT (_ :: Proxy l44) ->+    case letT (Proxy @(T "i43" -> l44)) of { LetT (_ :: Proxy l43) ->+    case letT (Proxy @(T "i42" -> l43)) of { LetT (_ :: Proxy l42) ->+    case letT (Proxy @(T "i41" -> l42)) of { LetT (_ :: Proxy l41) ->+    case letT (Proxy @(T "i40" -> l41)) of { LetT (_ :: Proxy l40) ->+    -- 39 .. 30+    case letT (Proxy @(T "i39" -> l40)) of { LetT (_ :: Proxy l39) ->+    case letT (Proxy @(T "i38" -> l39)) of { LetT (_ :: Proxy l38) ->+    case letT (Proxy @(T "i37" -> l38)) of { LetT (_ :: Proxy l37) ->+    case letT (Proxy @(T "i36" -> l37)) of { LetT (_ :: Proxy l36) ->+    case letT (Proxy @(T "i35" -> l36)) of { LetT (_ :: Proxy l35) ->+    case letT (Proxy @(T "i34" -> l35)) of { LetT (_ :: Proxy l34) ->+    case letT (Proxy @(T "i33" -> l34)) of { LetT (_ :: Proxy l33) ->+    case letT (Proxy @(T "i32" -> l33)) of { LetT (_ :: Proxy l32) ->+    case letT (Proxy @(T "i31" -> l32)) of { LetT (_ :: Proxy l31) ->+    case letT (Proxy @(T "i30" -> l31)) of { LetT (_ :: Proxy l30) ->+    -- 29 .. 20+    case letT (Proxy @(T "i29" -> l30)) of { LetT (_ :: Proxy l29) ->+    case letT (Proxy @(T "i28" -> l29)) of { LetT (_ :: Proxy l28) ->+    case letT (Proxy @(T "i27" -> l28)) of { LetT (_ :: Proxy l27) ->+    case letT (Proxy @(T "i26" -> l27)) of { LetT (_ :: Proxy l26) ->+    case letT (Proxy @(T "i25" -> l26)) of { LetT (_ :: Proxy l25) ->+    case letT (Proxy @(T "i24" -> l25)) of { LetT (_ :: Proxy l24) ->+    case letT (Proxy @(T "i23" -> l24)) of { LetT (_ :: Proxy l23) ->+    case letT (Proxy @(T "i22" -> l23)) of { LetT (_ :: Proxy l22) ->+    case letT (Proxy @(T "i21" -> l22)) of { LetT (_ :: Proxy l21) ->+    case letT (Proxy @(T "i20" -> l21)) of { LetT (_ :: Proxy l20) ->+    -- 19 .. 10+    case letT (Proxy @(T "i19" -> l20)) of { LetT (_ :: Proxy l19) ->+    case letT (Proxy @(T "i18" -> l19)) of { LetT (_ :: Proxy l18) ->+    case letT (Proxy @(T "i17" -> l18)) of { LetT (_ :: Proxy l17) ->+    case letT (Proxy @(T "i16" -> l17)) of { LetT (_ :: Proxy l16) ->+    case letT (Proxy @(T "i15" -> l16)) of { LetT (_ :: Proxy l15) ->+    case letT (Proxy @(T "i14" -> l15)) of { LetT (_ :: Proxy l14) ->+    case letT (Proxy @(T "i13" -> l14)) of { LetT (_ :: Proxy l13) ->+    case letT (Proxy @(T "i12" -> l13)) of { LetT (_ :: Proxy l12) ->+    case letT (Proxy @(T "i11" -> l12)) of { LetT (_ :: Proxy l11) ->+    case letT (Proxy @(T "i10" -> l11)) of { LetT (_ :: Proxy l10) ->+    -- 09 .. 00+    case letT (Proxy @(T "i09" -> l10)) of { LetT (_ :: Proxy l09) ->+    case letT (Proxy @(T "i08" -> l09)) of { LetT (_ :: Proxy l08) ->+    case letT (Proxy @(T "i07" -> l08)) of { LetT (_ :: Proxy l07) ->+    case letT (Proxy @(T "i06" -> l07)) of { LetT (_ :: Proxy l06) ->+    case letT (Proxy @(T "i05" -> l06)) of { LetT (_ :: Proxy l05) ->+    case letT (Proxy @(T "i04" -> l05)) of { LetT (_ :: Proxy l04) ->+    case letT (Proxy @(T "i03" -> l04)) of { LetT (_ :: Proxy l03) ->+    case letT (Proxy @(T "i02" -> l03)) of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(T "i01" -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(T "i00" -> l01)) of { LetT (_ :: Proxy l00) ->++      let -- 00 .. 09+          f00 :: f l00+          f01 :: f l01+          f02 :: f l02+          f03 :: f l03+          f04 :: f l04+          f05 :: f l05+          f06 :: f l06+          f07 :: f l07+          f08 :: f l08+          f09 :: f l09+          -- 10 .. 19+          f10 :: f l10+          f11 :: f l11+          f12 :: f l12+          f13 :: f l13+          f14 :: f l14+          f15 :: f l15+          f16 :: f l16+          f17 :: f l17+          f18 :: f l18+          f19 :: f l19+          -- 20 .. 29+          f20 :: f l20+          f21 :: f l21+          f22 :: f l22+          f23 :: f l23+          f24 :: f l24+          f25 :: f l25+          f26 :: f l26+          f27 :: f l27+          f28 :: f l28+          f29 :: f l29+          -- 30 .. 39+          f30 :: f l30+          f31 :: f l31+          f32 :: f l32+          f33 :: f l33+          f34 :: f l34+          f35 :: f l35+          f36 :: f l36+          f37 :: f l37+          f38 :: f l38+          f39 :: f l39+          -- 40 .. 49+          f40 :: f l40+          f41 :: f l41+          f42 :: f l42+          f43 :: f l43+          f44 :: f l44+          f45 :: f l45+          f46 :: f l46+          f47 :: f l47+          f48 :: f l48+          f49 :: f l49+          -- 50 .. 59+          f50 :: f l50+          f51 :: f l51+          f52 :: f l52+          f53 :: f l53+          f54 :: f l54+          f55 :: f l55+          f56 :: f l56+          f57 :: f l57+          f58 :: f l58+          f59 :: f l59+          -- 60 .. 69+          f60 :: f l60+          f61 :: f l61+          f62 :: f l62+          f63 :: f l63+          f64 :: f l64+          f65 :: f l65+          f66 :: f l66+          f67 :: f l67+          f68 :: f l68+          f69 :: f l69+          -- 70 .. 79+          f70 :: f l70+          f71 :: f l71+          f72 :: f l72+          f73 :: f l73+          f74 :: f l74+          f75 :: f l75+          f76 :: f l76+          f77 :: f l77+          f78 :: f l78+          f79 :: f l79+          -- 80 .. 89+          f80 :: f l80+          f81 :: f l81+          f82 :: f l82+          f83 :: f l83+          f84 :: f l84+          f85 :: f l85+          f86 :: f l86+          f87 :: f l87+          f88 :: f l88+          f89 :: f l89++          res :: f r++          -- 00 .. 09+          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure (MkT @"i00")+          f02 = castEqual f01 <*> pure (MkT @"i01")+          f03 = castEqual f02 <*> pure (MkT @"i02")+          f04 = castEqual f03 <*> pure (MkT @"i03")+          f05 = castEqual f04 <*> pure (MkT @"i04")+          f06 = castEqual f05 <*> pure (MkT @"i05")+          f07 = castEqual f06 <*> pure (MkT @"i06")+          f08 = castEqual f07 <*> pure (MkT @"i07")+          f09 = castEqual f08 <*> pure (MkT @"i08")+          -- 10 .. 19+          f10 = castEqual f09 <*> pure (MkT @"i09")+          f11 = castEqual f10 <*> pure (MkT @"i10")+          f12 = castEqual f11 <*> pure (MkT @"i11")+          f13 = castEqual f12 <*> pure (MkT @"i12")+          f14 = castEqual f13 <*> pure (MkT @"i13")+          f15 = castEqual f14 <*> pure (MkT @"i14")+          f16 = castEqual f15 <*> pure (MkT @"i15")+          f17 = castEqual f16 <*> pure (MkT @"i16")+          f18 = castEqual f17 <*> pure (MkT @"i17")+          f19 = castEqual f18 <*> pure (MkT @"i18")+          -- 20 .. 29+          f20 = castEqual f19 <*> pure (MkT @"i19")+          f21 = castEqual f20 <*> pure (MkT @"i20")+          f22 = castEqual f21 <*> pure (MkT @"i21")+          f23 = castEqual f22 <*> pure (MkT @"i22")+          f24 = castEqual f23 <*> pure (MkT @"i23")+          f25 = castEqual f24 <*> pure (MkT @"i24")+          f26 = castEqual f25 <*> pure (MkT @"i25")+          f27 = castEqual f26 <*> pure (MkT @"i26")+          f28 = castEqual f27 <*> pure (MkT @"i27")+          f29 = castEqual f28 <*> pure (MkT @"i28")+          -- 30 .. 39+          f30 = castEqual f29 <*> pure (MkT @"i29")+          f31 = castEqual f30 <*> pure (MkT @"i30")+          f32 = castEqual f31 <*> pure (MkT @"i31")+          f33 = castEqual f32 <*> pure (MkT @"i32")+          f34 = castEqual f33 <*> pure (MkT @"i33")+          f35 = castEqual f34 <*> pure (MkT @"i34")+          f36 = castEqual f35 <*> pure (MkT @"i35")+          f37 = castEqual f36 <*> pure (MkT @"i36")+          f38 = castEqual f37 <*> pure (MkT @"i37")+          f39 = castEqual f38 <*> pure (MkT @"i38")+          -- 40 .. 49+          f40 = castEqual f39 <*> pure (MkT @"i39")+          f41 = castEqual f40 <*> pure (MkT @"i40")+          f42 = castEqual f41 <*> pure (MkT @"i41")+          f43 = castEqual f42 <*> pure (MkT @"i42")+          f44 = castEqual f43 <*> pure (MkT @"i43")+          f45 = castEqual f44 <*> pure (MkT @"i44")+          f46 = castEqual f45 <*> pure (MkT @"i45")+          f47 = castEqual f46 <*> pure (MkT @"i46")+          f48 = castEqual f47 <*> pure (MkT @"i47")+          f49 = castEqual f48 <*> pure (MkT @"i48")+          -- 50 .. 59+          f50 = castEqual f49 <*> pure (MkT @"i49")+          f51 = castEqual f50 <*> pure (MkT @"i50")+          f52 = castEqual f51 <*> pure (MkT @"i51")+          f53 = castEqual f52 <*> pure (MkT @"i52")+          f54 = castEqual f53 <*> pure (MkT @"i53")+          f55 = castEqual f54 <*> pure (MkT @"i54")+          f56 = castEqual f55 <*> pure (MkT @"i55")+          f57 = castEqual f56 <*> pure (MkT @"i56")+          f58 = castEqual f57 <*> pure (MkT @"i57")+          f59 = castEqual f58 <*> pure (MkT @"i58")+          -- 60 .. 69+          f60 = castEqual f59 <*> pure (MkT @"i59")+          f61 = castEqual f60 <*> pure (MkT @"i60")+          f62 = castEqual f61 <*> pure (MkT @"i61")+          f63 = castEqual f62 <*> pure (MkT @"i62")+          f64 = castEqual f63 <*> pure (MkT @"i63")+          f65 = castEqual f64 <*> pure (MkT @"i64")+          f66 = castEqual f65 <*> pure (MkT @"i65")+          f67 = castEqual f66 <*> pure (MkT @"i66")+          f68 = castEqual f67 <*> pure (MkT @"i67")+          f69 = castEqual f68 <*> pure (MkT @"i68")+          -- 70 .. 79+          f70 = castEqual f69 <*> pure (MkT @"i69")+          f71 = castEqual f70 <*> pure (MkT @"i70")+          f72 = castEqual f71 <*> pure (MkT @"i71")+          f73 = castEqual f72 <*> pure (MkT @"i72")+          f74 = castEqual f73 <*> pure (MkT @"i73")+          f75 = castEqual f74 <*> pure (MkT @"i74")+          f76 = castEqual f75 <*> pure (MkT @"i75")+          f77 = castEqual f76 <*> pure (MkT @"i76")+          f78 = castEqual f77 <*> pure (MkT @"i77")+          f79 = castEqual f78 <*> pure (MkT @"i78")+          -- 80 .. 89+          f80 = castEqual f79 <*> pure (MkT @"i79")+          f81 = castEqual f80 <*> pure (MkT @"i80")+          f82 = castEqual f81 <*> pure (MkT @"i81")+          f83 = castEqual f82 <*> pure (MkT @"i82")+          f84 = castEqual f83 <*> pure (MkT @"i83")+          f85 = castEqual f84 <*> pure (MkT @"i84")+          f86 = castEqual f85 <*> pure (MkT @"i85")+          f87 = castEqual f86 <*> pure (MkT @"i86")+          f88 = castEqual f87 <*> pure (MkT @"i87")+          f89 = castEqual f88 <*> pure (MkT @"i88")++          res = castEqual f89 <*> pure (MkT @"i89")++      in res++    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/Ap/Let/Let100.hs view
@@ -0,0 +1,360 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.Ap.Let.Let100 where++import TypeLet++import Test.Infra+import Test.Size.Ap.Index.Ix100++applyF :: forall f r. Applicative f => F r -> f r+applyF f =+    -- 99 .. 90+    case letT (Proxy @(T "i99" -> r))   of { LetT (_ :: Proxy l99) ->+    case letT (Proxy @(T "i98" -> l99)) of { LetT (_ :: Proxy l98) ->+    case letT (Proxy @(T "i97" -> l98)) of { LetT (_ :: Proxy l97) ->+    case letT (Proxy @(T "i96" -> l97)) of { LetT (_ :: Proxy l96) ->+    case letT (Proxy @(T "i95" -> l96)) of { LetT (_ :: Proxy l95) ->+    case letT (Proxy @(T "i94" -> l95)) of { LetT (_ :: Proxy l94) ->+    case letT (Proxy @(T "i93" -> l94)) of { LetT (_ :: Proxy l93) ->+    case letT (Proxy @(T "i92" -> l93)) of { LetT (_ :: Proxy l92) ->+    case letT (Proxy @(T "i91" -> l92)) of { LetT (_ :: Proxy l91) ->+    case letT (Proxy @(T "i90" -> l91)) of { LetT (_ :: Proxy l90) ->+    -- 89 .. 80+    case letT (Proxy @(T "i89" -> l90)) of { LetT (_ :: Proxy l89) ->+    case letT (Proxy @(T "i88" -> l89)) of { LetT (_ :: Proxy l88) ->+    case letT (Proxy @(T "i87" -> l88)) of { LetT (_ :: Proxy l87) ->+    case letT (Proxy @(T "i86" -> l87)) of { LetT (_ :: Proxy l86) ->+    case letT (Proxy @(T "i85" -> l86)) of { LetT (_ :: Proxy l85) ->+    case letT (Proxy @(T "i84" -> l85)) of { LetT (_ :: Proxy l84) ->+    case letT (Proxy @(T "i83" -> l84)) of { LetT (_ :: Proxy l83) ->+    case letT (Proxy @(T "i82" -> l83)) of { LetT (_ :: Proxy l82) ->+    case letT (Proxy @(T "i81" -> l82)) of { LetT (_ :: Proxy l81) ->+    case letT (Proxy @(T "i80" -> l81)) of { LetT (_ :: Proxy l80) ->+    -- 79 .. 70+    case letT (Proxy @(T "i79" -> l80)) of { LetT (_ :: Proxy l79) ->+    case letT (Proxy @(T "i78" -> l79)) of { LetT (_ :: Proxy l78) ->+    case letT (Proxy @(T "i77" -> l78)) of { LetT (_ :: Proxy l77) ->+    case letT (Proxy @(T "i76" -> l77)) of { LetT (_ :: Proxy l76) ->+    case letT (Proxy @(T "i75" -> l76)) of { LetT (_ :: Proxy l75) ->+    case letT (Proxy @(T "i74" -> l75)) of { LetT (_ :: Proxy l74) ->+    case letT (Proxy @(T "i73" -> l74)) of { LetT (_ :: Proxy l73) ->+    case letT (Proxy @(T "i72" -> l73)) of { LetT (_ :: Proxy l72) ->+    case letT (Proxy @(T "i71" -> l72)) of { LetT (_ :: Proxy l71) ->+    case letT (Proxy @(T "i70" -> l71)) of { LetT (_ :: Proxy l70) ->+    -- 69 .. 60+    case letT (Proxy @(T "i69" -> l70)) of { LetT (_ :: Proxy l69) ->+    case letT (Proxy @(T "i68" -> l69)) of { LetT (_ :: Proxy l68) ->+    case letT (Proxy @(T "i67" -> l68)) of { LetT (_ :: Proxy l67) ->+    case letT (Proxy @(T "i66" -> l67)) of { LetT (_ :: Proxy l66) ->+    case letT (Proxy @(T "i65" -> l66)) of { LetT (_ :: Proxy l65) ->+    case letT (Proxy @(T "i64" -> l65)) of { LetT (_ :: Proxy l64) ->+    case letT (Proxy @(T "i63" -> l64)) of { LetT (_ :: Proxy l63) ->+    case letT (Proxy @(T "i62" -> l63)) of { LetT (_ :: Proxy l62) ->+    case letT (Proxy @(T "i61" -> l62)) of { LetT (_ :: Proxy l61) ->+    case letT (Proxy @(T "i60" -> l61)) of { LetT (_ :: Proxy l60) ->+    -- 59 .. 50+    case letT (Proxy @(T "i59" -> l60)) of { LetT (_ :: Proxy l59) ->+    case letT (Proxy @(T "i58" -> l59)) of { LetT (_ :: Proxy l58) ->+    case letT (Proxy @(T "i57" -> l58)) of { LetT (_ :: Proxy l57) ->+    case letT (Proxy @(T "i56" -> l57)) of { LetT (_ :: Proxy l56) ->+    case letT (Proxy @(T "i55" -> l56)) of { LetT (_ :: Proxy l55) ->+    case letT (Proxy @(T "i54" -> l55)) of { LetT (_ :: Proxy l54) ->+    case letT (Proxy @(T "i53" -> l54)) of { LetT (_ :: Proxy l53) ->+    case letT (Proxy @(T "i52" -> l53)) of { LetT (_ :: Proxy l52) ->+    case letT (Proxy @(T "i51" -> l52)) of { LetT (_ :: Proxy l51) ->+    case letT (Proxy @(T "i50" -> l51)) of { LetT (_ :: Proxy l50) ->+    -- 49 .. 40+    case letT (Proxy @(T "i49" -> l50)) of { LetT (_ :: Proxy l49) ->+    case letT (Proxy @(T "i48" -> l49)) of { LetT (_ :: Proxy l48) ->+    case letT (Proxy @(T "i47" -> l48)) of { LetT (_ :: Proxy l47) ->+    case letT (Proxy @(T "i46" -> l47)) of { LetT (_ :: Proxy l46) ->+    case letT (Proxy @(T "i45" -> l46)) of { LetT (_ :: Proxy l45) ->+    case letT (Proxy @(T "i44" -> l45)) of { LetT (_ :: Proxy l44) ->+    case letT (Proxy @(T "i43" -> l44)) of { LetT (_ :: Proxy l43) ->+    case letT (Proxy @(T "i42" -> l43)) of { LetT (_ :: Proxy l42) ->+    case letT (Proxy @(T "i41" -> l42)) of { LetT (_ :: Proxy l41) ->+    case letT (Proxy @(T "i40" -> l41)) of { LetT (_ :: Proxy l40) ->+    -- 39 .. 30+    case letT (Proxy @(T "i39" -> l40)) of { LetT (_ :: Proxy l39) ->+    case letT (Proxy @(T "i38" -> l39)) of { LetT (_ :: Proxy l38) ->+    case letT (Proxy @(T "i37" -> l38)) of { LetT (_ :: Proxy l37) ->+    case letT (Proxy @(T "i36" -> l37)) of { LetT (_ :: Proxy l36) ->+    case letT (Proxy @(T "i35" -> l36)) of { LetT (_ :: Proxy l35) ->+    case letT (Proxy @(T "i34" -> l35)) of { LetT (_ :: Proxy l34) ->+    case letT (Proxy @(T "i33" -> l34)) of { LetT (_ :: Proxy l33) ->+    case letT (Proxy @(T "i32" -> l33)) of { LetT (_ :: Proxy l32) ->+    case letT (Proxy @(T "i31" -> l32)) of { LetT (_ :: Proxy l31) ->+    case letT (Proxy @(T "i30" -> l31)) of { LetT (_ :: Proxy l30) ->+    -- 29 .. 20+    case letT (Proxy @(T "i29" -> l30)) of { LetT (_ :: Proxy l29) ->+    case letT (Proxy @(T "i28" -> l29)) of { LetT (_ :: Proxy l28) ->+    case letT (Proxy @(T "i27" -> l28)) of { LetT (_ :: Proxy l27) ->+    case letT (Proxy @(T "i26" -> l27)) of { LetT (_ :: Proxy l26) ->+    case letT (Proxy @(T "i25" -> l26)) of { LetT (_ :: Proxy l25) ->+    case letT (Proxy @(T "i24" -> l25)) of { LetT (_ :: Proxy l24) ->+    case letT (Proxy @(T "i23" -> l24)) of { LetT (_ :: Proxy l23) ->+    case letT (Proxy @(T "i22" -> l23)) of { LetT (_ :: Proxy l22) ->+    case letT (Proxy @(T "i21" -> l22)) of { LetT (_ :: Proxy l21) ->+    case letT (Proxy @(T "i20" -> l21)) of { LetT (_ :: Proxy l20) ->+    -- 19 .. 10+    case letT (Proxy @(T "i19" -> l20)) of { LetT (_ :: Proxy l19) ->+    case letT (Proxy @(T "i18" -> l19)) of { LetT (_ :: Proxy l18) ->+    case letT (Proxy @(T "i17" -> l18)) of { LetT (_ :: Proxy l17) ->+    case letT (Proxy @(T "i16" -> l17)) of { LetT (_ :: Proxy l16) ->+    case letT (Proxy @(T "i15" -> l16)) of { LetT (_ :: Proxy l15) ->+    case letT (Proxy @(T "i14" -> l15)) of { LetT (_ :: Proxy l14) ->+    case letT (Proxy @(T "i13" -> l14)) of { LetT (_ :: Proxy l13) ->+    case letT (Proxy @(T "i12" -> l13)) of { LetT (_ :: Proxy l12) ->+    case letT (Proxy @(T "i11" -> l12)) of { LetT (_ :: Proxy l11) ->+    case letT (Proxy @(T "i10" -> l11)) of { LetT (_ :: Proxy l10) ->+    -- 09 .. 00+    case letT (Proxy @(T "i09" -> l10)) of { LetT (_ :: Proxy l09) ->+    case letT (Proxy @(T "i08" -> l09)) of { LetT (_ :: Proxy l08) ->+    case letT (Proxy @(T "i07" -> l08)) of { LetT (_ :: Proxy l07) ->+    case letT (Proxy @(T "i06" -> l07)) of { LetT (_ :: Proxy l06) ->+    case letT (Proxy @(T "i05" -> l06)) of { LetT (_ :: Proxy l05) ->+    case letT (Proxy @(T "i04" -> l05)) of { LetT (_ :: Proxy l04) ->+    case letT (Proxy @(T "i03" -> l04)) of { LetT (_ :: Proxy l03) ->+    case letT (Proxy @(T "i02" -> l03)) of { LetT (_ :: Proxy l02) ->+    case letT (Proxy @(T "i01" -> l02)) of { LetT (_ :: Proxy l01) ->+    case letT (Proxy @(T "i00" -> l01)) of { LetT (_ :: Proxy l00) ->++      let -- 00 .. 09+          f00 :: f l00+          f01 :: f l01+          f02 :: f l02+          f03 :: f l03+          f04 :: f l04+          f05 :: f l05+          f06 :: f l06+          f07 :: f l07+          f08 :: f l08+          f09 :: f l09+          -- 10 .. 19+          f10 :: f l10+          f11 :: f l11+          f12 :: f l12+          f13 :: f l13+          f14 :: f l14+          f15 :: f l15+          f16 :: f l16+          f17 :: f l17+          f18 :: f l18+          f19 :: f l19+          -- 20 .. 29+          f20 :: f l20+          f21 :: f l21+          f22 :: f l22+          f23 :: f l23+          f24 :: f l24+          f25 :: f l25+          f26 :: f l26+          f27 :: f l27+          f28 :: f l28+          f29 :: f l29+          -- 30 .. 39+          f30 :: f l30+          f31 :: f l31+          f32 :: f l32+          f33 :: f l33+          f34 :: f l34+          f35 :: f l35+          f36 :: f l36+          f37 :: f l37+          f38 :: f l38+          f39 :: f l39+          -- 40 .. 49+          f40 :: f l40+          f41 :: f l41+          f42 :: f l42+          f43 :: f l43+          f44 :: f l44+          f45 :: f l45+          f46 :: f l46+          f47 :: f l47+          f48 :: f l48+          f49 :: f l49+          -- 50 .. 59+          f50 :: f l50+          f51 :: f l51+          f52 :: f l52+          f53 :: f l53+          f54 :: f l54+          f55 :: f l55+          f56 :: f l56+          f57 :: f l57+          f58 :: f l58+          f59 :: f l59+          -- 60 .. 69+          f60 :: f l60+          f61 :: f l61+          f62 :: f l62+          f63 :: f l63+          f64 :: f l64+          f65 :: f l65+          f66 :: f l66+          f67 :: f l67+          f68 :: f l68+          f69 :: f l69+          -- 70 .. 79+          f70 :: f l70+          f71 :: f l71+          f72 :: f l72+          f73 :: f l73+          f74 :: f l74+          f75 :: f l75+          f76 :: f l76+          f77 :: f l77+          f78 :: f l78+          f79 :: f l79+          -- 80 .. 89+          f80 :: f l80+          f81 :: f l81+          f82 :: f l82+          f83 :: f l83+          f84 :: f l84+          f85 :: f l85+          f86 :: f l86+          f87 :: f l87+          f88 :: f l88+          f89 :: f l89+          -- 90 .. 99+          f90 :: f l90+          f91 :: f l91+          f92 :: f l92+          f93 :: f l93+          f94 :: f l94+          f95 :: f l95+          f96 :: f l96+          f97 :: f l97+          f98 :: f l98+          f99 :: f l99++          res :: f r++          -- 00 .. 09+          f00 = pure (castEqual f)+          f01 = castEqual f00 <*> pure (MkT @"i00")+          f02 = castEqual f01 <*> pure (MkT @"i01")+          f03 = castEqual f02 <*> pure (MkT @"i02")+          f04 = castEqual f03 <*> pure (MkT @"i03")+          f05 = castEqual f04 <*> pure (MkT @"i04")+          f06 = castEqual f05 <*> pure (MkT @"i05")+          f07 = castEqual f06 <*> pure (MkT @"i06")+          f08 = castEqual f07 <*> pure (MkT @"i07")+          f09 = castEqual f08 <*> pure (MkT @"i08")+          -- 10 .. 19+          f10 = castEqual f09 <*> pure (MkT @"i09")+          f11 = castEqual f10 <*> pure (MkT @"i10")+          f12 = castEqual f11 <*> pure (MkT @"i11")+          f13 = castEqual f12 <*> pure (MkT @"i12")+          f14 = castEqual f13 <*> pure (MkT @"i13")+          f15 = castEqual f14 <*> pure (MkT @"i14")+          f16 = castEqual f15 <*> pure (MkT @"i15")+          f17 = castEqual f16 <*> pure (MkT @"i16")+          f18 = castEqual f17 <*> pure (MkT @"i17")+          f19 = castEqual f18 <*> pure (MkT @"i18")+          -- 20 .. 29+          f20 = castEqual f19 <*> pure (MkT @"i19")+          f21 = castEqual f20 <*> pure (MkT @"i20")+          f22 = castEqual f21 <*> pure (MkT @"i21")+          f23 = castEqual f22 <*> pure (MkT @"i22")+          f24 = castEqual f23 <*> pure (MkT @"i23")+          f25 = castEqual f24 <*> pure (MkT @"i24")+          f26 = castEqual f25 <*> pure (MkT @"i25")+          f27 = castEqual f26 <*> pure (MkT @"i26")+          f28 = castEqual f27 <*> pure (MkT @"i27")+          f29 = castEqual f28 <*> pure (MkT @"i28")+          -- 30 .. 39+          f30 = castEqual f29 <*> pure (MkT @"i29")+          f31 = castEqual f30 <*> pure (MkT @"i30")+          f32 = castEqual f31 <*> pure (MkT @"i31")+          f33 = castEqual f32 <*> pure (MkT @"i32")+          f34 = castEqual f33 <*> pure (MkT @"i33")+          f35 = castEqual f34 <*> pure (MkT @"i34")+          f36 = castEqual f35 <*> pure (MkT @"i35")+          f37 = castEqual f36 <*> pure (MkT @"i36")+          f38 = castEqual f37 <*> pure (MkT @"i37")+          f39 = castEqual f38 <*> pure (MkT @"i38")+          -- 40 .. 49+          f40 = castEqual f39 <*> pure (MkT @"i39")+          f41 = castEqual f40 <*> pure (MkT @"i40")+          f42 = castEqual f41 <*> pure (MkT @"i41")+          f43 = castEqual f42 <*> pure (MkT @"i42")+          f44 = castEqual f43 <*> pure (MkT @"i43")+          f45 = castEqual f44 <*> pure (MkT @"i44")+          f46 = castEqual f45 <*> pure (MkT @"i45")+          f47 = castEqual f46 <*> pure (MkT @"i46")+          f48 = castEqual f47 <*> pure (MkT @"i47")+          f49 = castEqual f48 <*> pure (MkT @"i48")+          -- 50 .. 59+          f50 = castEqual f49 <*> pure (MkT @"i49")+          f51 = castEqual f50 <*> pure (MkT @"i50")+          f52 = castEqual f51 <*> pure (MkT @"i51")+          f53 = castEqual f52 <*> pure (MkT @"i52")+          f54 = castEqual f53 <*> pure (MkT @"i53")+          f55 = castEqual f54 <*> pure (MkT @"i54")+          f56 = castEqual f55 <*> pure (MkT @"i55")+          f57 = castEqual f56 <*> pure (MkT @"i56")+          f58 = castEqual f57 <*> pure (MkT @"i57")+          f59 = castEqual f58 <*> pure (MkT @"i58")+          -- 60 .. 69+          f60 = castEqual f59 <*> pure (MkT @"i59")+          f61 = castEqual f60 <*> pure (MkT @"i60")+          f62 = castEqual f61 <*> pure (MkT @"i61")+          f63 = castEqual f62 <*> pure (MkT @"i62")+          f64 = castEqual f63 <*> pure (MkT @"i63")+          f65 = castEqual f64 <*> pure (MkT @"i64")+          f66 = castEqual f65 <*> pure (MkT @"i65")+          f67 = castEqual f66 <*> pure (MkT @"i66")+          f68 = castEqual f67 <*> pure (MkT @"i67")+          f69 = castEqual f68 <*> pure (MkT @"i68")+          -- 70 .. 79+          f70 = castEqual f69 <*> pure (MkT @"i69")+          f71 = castEqual f70 <*> pure (MkT @"i70")+          f72 = castEqual f71 <*> pure (MkT @"i71")+          f73 = castEqual f72 <*> pure (MkT @"i72")+          f74 = castEqual f73 <*> pure (MkT @"i73")+          f75 = castEqual f74 <*> pure (MkT @"i74")+          f76 = castEqual f75 <*> pure (MkT @"i75")+          f77 = castEqual f76 <*> pure (MkT @"i76")+          f78 = castEqual f77 <*> pure (MkT @"i77")+          f79 = castEqual f78 <*> pure (MkT @"i78")+          -- 80 .. 89+          f80 = castEqual f79 <*> pure (MkT @"i79")+          f81 = castEqual f80 <*> pure (MkT @"i80")+          f82 = castEqual f81 <*> pure (MkT @"i81")+          f83 = castEqual f82 <*> pure (MkT @"i82")+          f84 = castEqual f83 <*> pure (MkT @"i83")+          f85 = castEqual f84 <*> pure (MkT @"i84")+          f86 = castEqual f85 <*> pure (MkT @"i85")+          f87 = castEqual f86 <*> pure (MkT @"i86")+          f88 = castEqual f87 <*> pure (MkT @"i87")+          f89 = castEqual f88 <*> pure (MkT @"i88")+          -- 90 .. 99+          f90 = castEqual f89 <*> pure (MkT @"i89")+          f91 = castEqual f90 <*> pure (MkT @"i90")+          f92 = castEqual f91 <*> pure (MkT @"i91")+          f93 = castEqual f92 <*> pure (MkT @"i92")+          f94 = castEqual f93 <*> pure (MkT @"i93")+          f95 = castEqual f94 <*> pure (MkT @"i94")+          f96 = castEqual f95 <*> pure (MkT @"i95")+          f97 = castEqual f96 <*> pure (MkT @"i96")+          f98 = castEqual f97 <*> pure (MkT @"i97")+          f99 = castEqual f98 <*> pure (MkT @"i98")++          res = castEqual f99 <*> pure (MkT @"i99")++      in res++    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/HList/Baseline/Baseline010.hs view
@@ -0,0 +1,20 @@+module Test.Size.HList.Baseline.Baseline010 where++import Test.Infra+import Test.Size.HList.Index.Ix010++hlist :: HList Fields+hlist =+      -- 00 .. 09+      HCons (MkT @"i00")+    $ HCons (MkT @"i01")+    $ HCons (MkT @"i02")+    $ HCons (MkT @"i03")+    $ HCons (MkT @"i04")+    $ HCons (MkT @"i05")+    $ HCons (MkT @"i06")+    $ HCons (MkT @"i07")+    $ HCons (MkT @"i08")+    $ HCons (MkT @"i09")+    $ HNil+
+ test/Test/Size/HList/Baseline/Baseline020.hs view
@@ -0,0 +1,31 @@+module Test.Size.HList.Baseline.Baseline020 where++import Test.Infra+import Test.Size.HList.Index.Ix020++hlist :: HList Fields+hlist =+      -- 00 .. 09+      HCons (MkT @"i00")+    $ HCons (MkT @"i01")+    $ HCons (MkT @"i02")+    $ HCons (MkT @"i03")+    $ HCons (MkT @"i04")+    $ HCons (MkT @"i05")+    $ HCons (MkT @"i06")+    $ HCons (MkT @"i07")+    $ HCons (MkT @"i08")+    $ HCons (MkT @"i09")+      -- 10 .. 19+    $ HCons (MkT @"i10")+    $ HCons (MkT @"i11")+    $ HCons (MkT @"i12")+    $ HCons (MkT @"i13")+    $ HCons (MkT @"i14")+    $ HCons (MkT @"i15")+    $ HCons (MkT @"i16")+    $ HCons (MkT @"i17")+    $ HCons (MkT @"i18")+    $ HCons (MkT @"i19")+    $ HNil+
+ test/Test/Size/HList/Baseline/Baseline030.hs view
@@ -0,0 +1,42 @@+module Test.Size.HList.Baseline.Baseline030 where++import Test.Infra+import Test.Size.HList.Index.Ix030++hlist :: HList Fields+hlist =+      -- 00 .. 09+      HCons (MkT @"i00")+    $ HCons (MkT @"i01")+    $ HCons (MkT @"i02")+    $ HCons (MkT @"i03")+    $ HCons (MkT @"i04")+    $ HCons (MkT @"i05")+    $ HCons (MkT @"i06")+    $ HCons (MkT @"i07")+    $ HCons (MkT @"i08")+    $ HCons (MkT @"i09")+      -- 10 .. 19+    $ HCons (MkT @"i10")+    $ HCons (MkT @"i11")+    $ HCons (MkT @"i12")+    $ HCons (MkT @"i13")+    $ HCons (MkT @"i14")+    $ HCons (MkT @"i15")+    $ HCons (MkT @"i16")+    $ HCons (MkT @"i17")+    $ HCons (MkT @"i18")+    $ HCons (MkT @"i19")+      -- 20 .. 29+    $ HCons (MkT @"i20")+    $ HCons (MkT @"i21")+    $ HCons (MkT @"i22")+    $ HCons (MkT @"i23")+    $ HCons (MkT @"i24")+    $ HCons (MkT @"i25")+    $ HCons (MkT @"i26")+    $ HCons (MkT @"i27")+    $ HCons (MkT @"i28")+    $ HCons (MkT @"i29")+    $ HNil+
+ test/Test/Size/HList/Baseline/Baseline040.hs view
@@ -0,0 +1,53 @@+module Test.Size.HList.Baseline.Baseline040 where++import Test.Infra+import Test.Size.HList.Index.Ix040++hlist :: HList Fields+hlist =+      -- 00 .. 09+      HCons (MkT @"i00")+    $ HCons (MkT @"i01")+    $ HCons (MkT @"i02")+    $ HCons (MkT @"i03")+    $ HCons (MkT @"i04")+    $ HCons (MkT @"i05")+    $ HCons (MkT @"i06")+    $ HCons (MkT @"i07")+    $ HCons (MkT @"i08")+    $ HCons (MkT @"i09")+      -- 10 .. 19+    $ HCons (MkT @"i10")+    $ HCons (MkT @"i11")+    $ HCons (MkT @"i12")+    $ HCons (MkT @"i13")+    $ HCons (MkT @"i14")+    $ HCons (MkT @"i15")+    $ HCons (MkT @"i16")+    $ HCons (MkT @"i17")+    $ HCons (MkT @"i18")+    $ HCons (MkT @"i19")+      -- 20 .. 29+    $ HCons (MkT @"i20")+    $ HCons (MkT @"i21")+    $ HCons (MkT @"i22")+    $ HCons (MkT @"i23")+    $ HCons (MkT @"i24")+    $ HCons (MkT @"i25")+    $ HCons (MkT @"i26")+    $ HCons (MkT @"i27")+    $ HCons (MkT @"i28")+    $ HCons (MkT @"i29")+      -- 30 .. 39+    $ HCons (MkT @"i30")+    $ HCons (MkT @"i31")+    $ HCons (MkT @"i32")+    $ HCons (MkT @"i33")+    $ HCons (MkT @"i34")+    $ HCons (MkT @"i35")+    $ HCons (MkT @"i36")+    $ HCons (MkT @"i37")+    $ HCons (MkT @"i38")+    $ HCons (MkT @"i39")+    $ HNil+
+ test/Test/Size/HList/Baseline/Baseline050.hs view
@@ -0,0 +1,64 @@+module Test.Size.HList.Baseline.Baseline050 where++import Test.Infra+import Test.Size.HList.Index.Ix050++hlist :: HList Fields+hlist =+      -- 00 .. 09+      HCons (MkT @"i00")+    $ HCons (MkT @"i01")+    $ HCons (MkT @"i02")+    $ HCons (MkT @"i03")+    $ HCons (MkT @"i04")+    $ HCons (MkT @"i05")+    $ HCons (MkT @"i06")+    $ HCons (MkT @"i07")+    $ HCons (MkT @"i08")+    $ HCons (MkT @"i09")+      -- 10 .. 19+    $ HCons (MkT @"i10")+    $ HCons (MkT @"i11")+    $ HCons (MkT @"i12")+    $ HCons (MkT @"i13")+    $ HCons (MkT @"i14")+    $ HCons (MkT @"i15")+    $ HCons (MkT @"i16")+    $ HCons (MkT @"i17")+    $ HCons (MkT @"i18")+    $ HCons (MkT @"i19")+      -- 20 .. 29+    $ HCons (MkT @"i20")+    $ HCons (MkT @"i21")+    $ HCons (MkT @"i22")+    $ HCons (MkT @"i23")+    $ HCons (MkT @"i24")+    $ HCons (MkT @"i25")+    $ HCons (MkT @"i26")+    $ HCons (MkT @"i27")+    $ HCons (MkT @"i28")+    $ HCons (MkT @"i29")+      -- 30 .. 39+    $ HCons (MkT @"i30")+    $ HCons (MkT @"i31")+    $ HCons (MkT @"i32")+    $ HCons (MkT @"i33")+    $ HCons (MkT @"i34")+    $ HCons (MkT @"i35")+    $ HCons (MkT @"i36")+    $ HCons (MkT @"i37")+    $ HCons (MkT @"i38")+    $ HCons (MkT @"i39")+      -- 40 .. 49+    $ HCons (MkT @"i40")+    $ HCons (MkT @"i41")+    $ HCons (MkT @"i42")+    $ HCons (MkT @"i43")+    $ HCons (MkT @"i44")+    $ HCons (MkT @"i45")+    $ HCons (MkT @"i46")+    $ HCons (MkT @"i47")+    $ HCons (MkT @"i48")+    $ HCons (MkT @"i49")+    $ HNil+
+ test/Test/Size/HList/Baseline/Baseline060.hs view
@@ -0,0 +1,75 @@+module Test.Size.HList.Baseline.Baseline060 where++import Test.Infra+import Test.Size.HList.Index.Ix060++hlist :: HList Fields+hlist =+      -- 00 .. 09+      HCons (MkT @"i00")+    $ HCons (MkT @"i01")+    $ HCons (MkT @"i02")+    $ HCons (MkT @"i03")+    $ HCons (MkT @"i04")+    $ HCons (MkT @"i05")+    $ HCons (MkT @"i06")+    $ HCons (MkT @"i07")+    $ HCons (MkT @"i08")+    $ HCons (MkT @"i09")+      -- 10 .. 19+    $ HCons (MkT @"i10")+    $ HCons (MkT @"i11")+    $ HCons (MkT @"i12")+    $ HCons (MkT @"i13")+    $ HCons (MkT @"i14")+    $ HCons (MkT @"i15")+    $ HCons (MkT @"i16")+    $ HCons (MkT @"i17")+    $ HCons (MkT @"i18")+    $ HCons (MkT @"i19")+      -- 20 .. 29+    $ HCons (MkT @"i20")+    $ HCons (MkT @"i21")+    $ HCons (MkT @"i22")+    $ HCons (MkT @"i23")+    $ HCons (MkT @"i24")+    $ HCons (MkT @"i25")+    $ HCons (MkT @"i26")+    $ HCons (MkT @"i27")+    $ HCons (MkT @"i28")+    $ HCons (MkT @"i29")+      -- 30 .. 39+    $ HCons (MkT @"i30")+    $ HCons (MkT @"i31")+    $ HCons (MkT @"i32")+    $ HCons (MkT @"i33")+    $ HCons (MkT @"i34")+    $ HCons (MkT @"i35")+    $ HCons (MkT @"i36")+    $ HCons (MkT @"i37")+    $ HCons (MkT @"i38")+    $ HCons (MkT @"i39")+      -- 40 .. 49+    $ HCons (MkT @"i40")+    $ HCons (MkT @"i41")+    $ HCons (MkT @"i42")+    $ HCons (MkT @"i43")+    $ HCons (MkT @"i44")+    $ HCons (MkT @"i45")+    $ HCons (MkT @"i46")+    $ HCons (MkT @"i47")+    $ HCons (MkT @"i48")+    $ HCons (MkT @"i49")+      -- 50 .. 59+    $ HCons (MkT @"i50")+    $ HCons (MkT @"i51")+    $ HCons (MkT @"i52")+    $ HCons (MkT @"i53")+    $ HCons (MkT @"i54")+    $ HCons (MkT @"i55")+    $ HCons (MkT @"i56")+    $ HCons (MkT @"i57")+    $ HCons (MkT @"i58")+    $ HCons (MkT @"i59")+    $ HNil+
+ test/Test/Size/HList/Baseline/Baseline070.hs view
@@ -0,0 +1,86 @@+module Test.Size.HList.Baseline.Baseline070 where++import Test.Infra+import Test.Size.HList.Index.Ix070++hlist :: HList Fields+hlist =+      -- 00 .. 09+      HCons (MkT @"i00")+    $ HCons (MkT @"i01")+    $ HCons (MkT @"i02")+    $ HCons (MkT @"i03")+    $ HCons (MkT @"i04")+    $ HCons (MkT @"i05")+    $ HCons (MkT @"i06")+    $ HCons (MkT @"i07")+    $ HCons (MkT @"i08")+    $ HCons (MkT @"i09")+      -- 10 .. 19+    $ HCons (MkT @"i10")+    $ HCons (MkT @"i11")+    $ HCons (MkT @"i12")+    $ HCons (MkT @"i13")+    $ HCons (MkT @"i14")+    $ HCons (MkT @"i15")+    $ HCons (MkT @"i16")+    $ HCons (MkT @"i17")+    $ HCons (MkT @"i18")+    $ HCons (MkT @"i19")+      -- 20 .. 29+    $ HCons (MkT @"i20")+    $ HCons (MkT @"i21")+    $ HCons (MkT @"i22")+    $ HCons (MkT @"i23")+    $ HCons (MkT @"i24")+    $ HCons (MkT @"i25")+    $ HCons (MkT @"i26")+    $ HCons (MkT @"i27")+    $ HCons (MkT @"i28")+    $ HCons (MkT @"i29")+      -- 30 .. 39+    $ HCons (MkT @"i30")+    $ HCons (MkT @"i31")+    $ HCons (MkT @"i32")+    $ HCons (MkT @"i33")+    $ HCons (MkT @"i34")+    $ HCons (MkT @"i35")+    $ HCons (MkT @"i36")+    $ HCons (MkT @"i37")+    $ HCons (MkT @"i38")+    $ HCons (MkT @"i39")+      -- 40 .. 49+    $ HCons (MkT @"i40")+    $ HCons (MkT @"i41")+    $ HCons (MkT @"i42")+    $ HCons (MkT @"i43")+    $ HCons (MkT @"i44")+    $ HCons (MkT @"i45")+    $ HCons (MkT @"i46")+    $ HCons (MkT @"i47")+    $ HCons (MkT @"i48")+    $ HCons (MkT @"i49")+      -- 50 .. 59+    $ HCons (MkT @"i50")+    $ HCons (MkT @"i51")+    $ HCons (MkT @"i52")+    $ HCons (MkT @"i53")+    $ HCons (MkT @"i54")+    $ HCons (MkT @"i55")+    $ HCons (MkT @"i56")+    $ HCons (MkT @"i57")+    $ HCons (MkT @"i58")+    $ HCons (MkT @"i59")+      -- 60 .. 69+    $ HCons (MkT @"i60")+    $ HCons (MkT @"i61")+    $ HCons (MkT @"i62")+    $ HCons (MkT @"i63")+    $ HCons (MkT @"i64")+    $ HCons (MkT @"i65")+    $ HCons (MkT @"i66")+    $ HCons (MkT @"i67")+    $ HCons (MkT @"i68")+    $ HCons (MkT @"i69")+    $ HNil+
+ test/Test/Size/HList/Baseline/Baseline080.hs view
@@ -0,0 +1,97 @@+module Test.Size.HList.Baseline.Baseline080 where++import Test.Infra+import Test.Size.HList.Index.Ix080++hlist :: HList Fields+hlist =+      -- 00 .. 09+      HCons (MkT @"i00")+    $ HCons (MkT @"i01")+    $ HCons (MkT @"i02")+    $ HCons (MkT @"i03")+    $ HCons (MkT @"i04")+    $ HCons (MkT @"i05")+    $ HCons (MkT @"i06")+    $ HCons (MkT @"i07")+    $ HCons (MkT @"i08")+    $ HCons (MkT @"i09")+      -- 10 .. 19+    $ HCons (MkT @"i10")+    $ HCons (MkT @"i11")+    $ HCons (MkT @"i12")+    $ HCons (MkT @"i13")+    $ HCons (MkT @"i14")+    $ HCons (MkT @"i15")+    $ HCons (MkT @"i16")+    $ HCons (MkT @"i17")+    $ HCons (MkT @"i18")+    $ HCons (MkT @"i19")+      -- 20 .. 29+    $ HCons (MkT @"i20")+    $ HCons (MkT @"i21")+    $ HCons (MkT @"i22")+    $ HCons (MkT @"i23")+    $ HCons (MkT @"i24")+    $ HCons (MkT @"i25")+    $ HCons (MkT @"i26")+    $ HCons (MkT @"i27")+    $ HCons (MkT @"i28")+    $ HCons (MkT @"i29")+      -- 30 .. 39+    $ HCons (MkT @"i30")+    $ HCons (MkT @"i31")+    $ HCons (MkT @"i32")+    $ HCons (MkT @"i33")+    $ HCons (MkT @"i34")+    $ HCons (MkT @"i35")+    $ HCons (MkT @"i36")+    $ HCons (MkT @"i37")+    $ HCons (MkT @"i38")+    $ HCons (MkT @"i39")+      -- 40 .. 49+    $ HCons (MkT @"i40")+    $ HCons (MkT @"i41")+    $ HCons (MkT @"i42")+    $ HCons (MkT @"i43")+    $ HCons (MkT @"i44")+    $ HCons (MkT @"i45")+    $ HCons (MkT @"i46")+    $ HCons (MkT @"i47")+    $ HCons (MkT @"i48")+    $ HCons (MkT @"i49")+      -- 50 .. 59+    $ HCons (MkT @"i50")+    $ HCons (MkT @"i51")+    $ HCons (MkT @"i52")+    $ HCons (MkT @"i53")+    $ HCons (MkT @"i54")+    $ HCons (MkT @"i55")+    $ HCons (MkT @"i56")+    $ HCons (MkT @"i57")+    $ HCons (MkT @"i58")+    $ HCons (MkT @"i59")+      -- 60 .. 69+    $ HCons (MkT @"i60")+    $ HCons (MkT @"i61")+    $ HCons (MkT @"i62")+    $ HCons (MkT @"i63")+    $ HCons (MkT @"i64")+    $ HCons (MkT @"i65")+    $ HCons (MkT @"i66")+    $ HCons (MkT @"i67")+    $ HCons (MkT @"i68")+    $ HCons (MkT @"i69")+      -- 70 .. 79+    $ HCons (MkT @"i70")+    $ HCons (MkT @"i71")+    $ HCons (MkT @"i72")+    $ HCons (MkT @"i73")+    $ HCons (MkT @"i74")+    $ HCons (MkT @"i75")+    $ HCons (MkT @"i76")+    $ HCons (MkT @"i77")+    $ HCons (MkT @"i78")+    $ HCons (MkT @"i79")+    $ HNil+
+ test/Test/Size/HList/Baseline/Baseline090.hs view
@@ -0,0 +1,108 @@+module Test.Size.HList.Baseline.Baseline090 where++import Test.Infra+import Test.Size.HList.Index.Ix090++hlist :: HList Fields+hlist =+      -- 00 .. 09+      HCons (MkT @"i00")+    $ HCons (MkT @"i01")+    $ HCons (MkT @"i02")+    $ HCons (MkT @"i03")+    $ HCons (MkT @"i04")+    $ HCons (MkT @"i05")+    $ HCons (MkT @"i06")+    $ HCons (MkT @"i07")+    $ HCons (MkT @"i08")+    $ HCons (MkT @"i09")+      -- 10 .. 19+    $ HCons (MkT @"i10")+    $ HCons (MkT @"i11")+    $ HCons (MkT @"i12")+    $ HCons (MkT @"i13")+    $ HCons (MkT @"i14")+    $ HCons (MkT @"i15")+    $ HCons (MkT @"i16")+    $ HCons (MkT @"i17")+    $ HCons (MkT @"i18")+    $ HCons (MkT @"i19")+      -- 20 .. 29+    $ HCons (MkT @"i20")+    $ HCons (MkT @"i21")+    $ HCons (MkT @"i22")+    $ HCons (MkT @"i23")+    $ HCons (MkT @"i24")+    $ HCons (MkT @"i25")+    $ HCons (MkT @"i26")+    $ HCons (MkT @"i27")+    $ HCons (MkT @"i28")+    $ HCons (MkT @"i29")+      -- 30 .. 39+    $ HCons (MkT @"i30")+    $ HCons (MkT @"i31")+    $ HCons (MkT @"i32")+    $ HCons (MkT @"i33")+    $ HCons (MkT @"i34")+    $ HCons (MkT @"i35")+    $ HCons (MkT @"i36")+    $ HCons (MkT @"i37")+    $ HCons (MkT @"i38")+    $ HCons (MkT @"i39")+      -- 40 .. 49+    $ HCons (MkT @"i40")+    $ HCons (MkT @"i41")+    $ HCons (MkT @"i42")+    $ HCons (MkT @"i43")+    $ HCons (MkT @"i44")+    $ HCons (MkT @"i45")+    $ HCons (MkT @"i46")+    $ HCons (MkT @"i47")+    $ HCons (MkT @"i48")+    $ HCons (MkT @"i49")+      -- 50 .. 59+    $ HCons (MkT @"i50")+    $ HCons (MkT @"i51")+    $ HCons (MkT @"i52")+    $ HCons (MkT @"i53")+    $ HCons (MkT @"i54")+    $ HCons (MkT @"i55")+    $ HCons (MkT @"i56")+    $ HCons (MkT @"i57")+    $ HCons (MkT @"i58")+    $ HCons (MkT @"i59")+      -- 60 .. 69+    $ HCons (MkT @"i60")+    $ HCons (MkT @"i61")+    $ HCons (MkT @"i62")+    $ HCons (MkT @"i63")+    $ HCons (MkT @"i64")+    $ HCons (MkT @"i65")+    $ HCons (MkT @"i66")+    $ HCons (MkT @"i67")+    $ HCons (MkT @"i68")+    $ HCons (MkT @"i69")+      -- 70 .. 79+    $ HCons (MkT @"i70")+    $ HCons (MkT @"i71")+    $ HCons (MkT @"i72")+    $ HCons (MkT @"i73")+    $ HCons (MkT @"i74")+    $ HCons (MkT @"i75")+    $ HCons (MkT @"i76")+    $ HCons (MkT @"i77")+    $ HCons (MkT @"i78")+    $ HCons (MkT @"i79")+      -- 80 .. 89+    $ HCons (MkT @"i80")+    $ HCons (MkT @"i81")+    $ HCons (MkT @"i82")+    $ HCons (MkT @"i83")+    $ HCons (MkT @"i84")+    $ HCons (MkT @"i85")+    $ HCons (MkT @"i86")+    $ HCons (MkT @"i87")+    $ HCons (MkT @"i88")+    $ HCons (MkT @"i89")+    $ HNil+
+ test/Test/Size/HList/Baseline/Baseline100.hs view
@@ -0,0 +1,119 @@+module Test.Size.HList.Baseline.Baseline100 where++import Test.Infra+import Test.Size.HList.Index.Ix100++hlist :: HList Fields+hlist =+      -- 00 .. 09+      HCons (MkT @"i00")+    $ HCons (MkT @"i01")+    $ HCons (MkT @"i02")+    $ HCons (MkT @"i03")+    $ HCons (MkT @"i04")+    $ HCons (MkT @"i05")+    $ HCons (MkT @"i06")+    $ HCons (MkT @"i07")+    $ HCons (MkT @"i08")+    $ HCons (MkT @"i09")+      -- 10 .. 19+    $ HCons (MkT @"i10")+    $ HCons (MkT @"i11")+    $ HCons (MkT @"i12")+    $ HCons (MkT @"i13")+    $ HCons (MkT @"i14")+    $ HCons (MkT @"i15")+    $ HCons (MkT @"i16")+    $ HCons (MkT @"i17")+    $ HCons (MkT @"i18")+    $ HCons (MkT @"i19")+      -- 20 .. 29+    $ HCons (MkT @"i20")+    $ HCons (MkT @"i21")+    $ HCons (MkT @"i22")+    $ HCons (MkT @"i23")+    $ HCons (MkT @"i24")+    $ HCons (MkT @"i25")+    $ HCons (MkT @"i26")+    $ HCons (MkT @"i27")+    $ HCons (MkT @"i28")+    $ HCons (MkT @"i29")+      -- 30 .. 39+    $ HCons (MkT @"i30")+    $ HCons (MkT @"i31")+    $ HCons (MkT @"i32")+    $ HCons (MkT @"i33")+    $ HCons (MkT @"i34")+    $ HCons (MkT @"i35")+    $ HCons (MkT @"i36")+    $ HCons (MkT @"i37")+    $ HCons (MkT @"i38")+    $ HCons (MkT @"i39")+      -- 40 .. 49+    $ HCons (MkT @"i40")+    $ HCons (MkT @"i41")+    $ HCons (MkT @"i42")+    $ HCons (MkT @"i43")+    $ HCons (MkT @"i44")+    $ HCons (MkT @"i45")+    $ HCons (MkT @"i46")+    $ HCons (MkT @"i47")+    $ HCons (MkT @"i48")+    $ HCons (MkT @"i49")+      -- 50 .. 59+    $ HCons (MkT @"i50")+    $ HCons (MkT @"i51")+    $ HCons (MkT @"i52")+    $ HCons (MkT @"i53")+    $ HCons (MkT @"i54")+    $ HCons (MkT @"i55")+    $ HCons (MkT @"i56")+    $ HCons (MkT @"i57")+    $ HCons (MkT @"i58")+    $ HCons (MkT @"i59")+      -- 60 .. 69+    $ HCons (MkT @"i60")+    $ HCons (MkT @"i61")+    $ HCons (MkT @"i62")+    $ HCons (MkT @"i63")+    $ HCons (MkT @"i64")+    $ HCons (MkT @"i65")+    $ HCons (MkT @"i66")+    $ HCons (MkT @"i67")+    $ HCons (MkT @"i68")+    $ HCons (MkT @"i69")+      -- 70 .. 79+    $ HCons (MkT @"i70")+    $ HCons (MkT @"i71")+    $ HCons (MkT @"i72")+    $ HCons (MkT @"i73")+    $ HCons (MkT @"i74")+    $ HCons (MkT @"i75")+    $ HCons (MkT @"i76")+    $ HCons (MkT @"i77")+    $ HCons (MkT @"i78")+    $ HCons (MkT @"i79")+      -- 80 .. 89+    $ HCons (MkT @"i80")+    $ HCons (MkT @"i81")+    $ HCons (MkT @"i82")+    $ HCons (MkT @"i83")+    $ HCons (MkT @"i84")+    $ HCons (MkT @"i85")+    $ HCons (MkT @"i86")+    $ HCons (MkT @"i87")+    $ HCons (MkT @"i88")+    $ HCons (MkT @"i89")+      -- 90 .. 99+    $ HCons (MkT @"i90")+    $ HCons (MkT @"i91")+    $ HCons (MkT @"i92")+    $ HCons (MkT @"i93")+    $ HCons (MkT @"i94")+    $ HCons (MkT @"i95")+    $ HCons (MkT @"i96")+    $ HCons (MkT @"i97")+    $ HCons (MkT @"i98")+    $ HCons (MkT @"i99")+    $ HNil+
+ test/Test/Size/HList/Index/Ix010.hs view
@@ -0,0 +1,17 @@+module Test.Size.HList.Index.Ix010 (Fields) where++import Test.Infra++type Fields = '[+      -- 00 .. 09+      T "i00"+    , T "i01"+    , T "i02"+    , T "i03"+    , T "i04"+    , T "i05"+    , T "i06"+    , T "i07"+    , T "i08"+    , T "i09"+    ]
+ test/Test/Size/HList/Index/Ix020.hs view
@@ -0,0 +1,28 @@+module Test.Size.HList.Index.Ix020 (Fields) where++import Test.Infra++type Fields = '[+      -- 00 .. 09+      T "i00"+    , T "i01"+    , T "i02"+    , T "i03"+    , T "i04"+    , T "i05"+    , T "i06"+    , T "i07"+    , T "i08"+    , T "i09"+      -- 10 .. 19+    , T "i10"+    , T "i11"+    , T "i12"+    , T "i13"+    , T "i14"+    , T "i15"+    , T "i16"+    , T "i17"+    , T "i18"+    , T "i19"+    ]
+ test/Test/Size/HList/Index/Ix030.hs view
@@ -0,0 +1,39 @@+module Test.Size.HList.Index.Ix030 (Fields) where++import Test.Infra++type Fields = '[+      -- 00 .. 09+      T "i00"+    , T "i01"+    , T "i02"+    , T "i03"+    , T "i04"+    , T "i05"+    , T "i06"+    , T "i07"+    , T "i08"+    , T "i09"+      -- 10 .. 19+    , T "i10"+    , T "i11"+    , T "i12"+    , T "i13"+    , T "i14"+    , T "i15"+    , T "i16"+    , T "i17"+    , T "i18"+    , T "i19"+      -- 20 .. 29+    , T "i20"+    , T "i21"+    , T "i22"+    , T "i23"+    , T "i24"+    , T "i25"+    , T "i26"+    , T "i27"+    , T "i28"+    , T "i29"+    ]
+ test/Test/Size/HList/Index/Ix040.hs view
@@ -0,0 +1,50 @@+module Test.Size.HList.Index.Ix040 (Fields) where++import Test.Infra++type Fields = '[+      -- 00 .. 09+      T "i00"+    , T "i01"+    , T "i02"+    , T "i03"+    , T "i04"+    , T "i05"+    , T "i06"+    , T "i07"+    , T "i08"+    , T "i09"+      -- 10 .. 19+    , T "i10"+    , T "i11"+    , T "i12"+    , T "i13"+    , T "i14"+    , T "i15"+    , T "i16"+    , T "i17"+    , T "i18"+    , T "i19"+      -- 20 .. 29+    , T "i20"+    , T "i21"+    , T "i22"+    , T "i23"+    , T "i24"+    , T "i25"+    , T "i26"+    , T "i27"+    , T "i28"+    , T "i29"+      -- 30 .. 39+    , T "i30"+    , T "i31"+    , T "i32"+    , T "i33"+    , T "i34"+    , T "i35"+    , T "i36"+    , T "i37"+    , T "i38"+    , T "i39"+    ]
+ test/Test/Size/HList/Index/Ix050.hs view
@@ -0,0 +1,61 @@+module Test.Size.HList.Index.Ix050 (Fields) where++import Test.Infra++type Fields = '[+      -- 00 .. 09+      T "i00"+    , T "i01"+    , T "i02"+    , T "i03"+    , T "i04"+    , T "i05"+    , T "i06"+    , T "i07"+    , T "i08"+    , T "i09"+      -- 10 .. 19+    , T "i10"+    , T "i11"+    , T "i12"+    , T "i13"+    , T "i14"+    , T "i15"+    , T "i16"+    , T "i17"+    , T "i18"+    , T "i19"+      -- 20 .. 29+    , T "i20"+    , T "i21"+    , T "i22"+    , T "i23"+    , T "i24"+    , T "i25"+    , T "i26"+    , T "i27"+    , T "i28"+    , T "i29"+      -- 30 .. 39+    , T "i30"+    , T "i31"+    , T "i32"+    , T "i33"+    , T "i34"+    , T "i35"+    , T "i36"+    , T "i37"+    , T "i38"+    , T "i39"+      -- 40 .. 49+    , T "i40"+    , T "i41"+    , T "i42"+    , T "i43"+    , T "i44"+    , T "i45"+    , T "i46"+    , T "i47"+    , T "i48"+    , T "i49"+    ]
+ test/Test/Size/HList/Index/Ix060.hs view
@@ -0,0 +1,72 @@+module Test.Size.HList.Index.Ix060 (Fields) where++import Test.Infra++type Fields = '[+      -- 00 .. 09+      T "i00"+    , T "i01"+    , T "i02"+    , T "i03"+    , T "i04"+    , T "i05"+    , T "i06"+    , T "i07"+    , T "i08"+    , T "i09"+      -- 10 .. 19+    , T "i10"+    , T "i11"+    , T "i12"+    , T "i13"+    , T "i14"+    , T "i15"+    , T "i16"+    , T "i17"+    , T "i18"+    , T "i19"+      -- 20 .. 29+    , T "i20"+    , T "i21"+    , T "i22"+    , T "i23"+    , T "i24"+    , T "i25"+    , T "i26"+    , T "i27"+    , T "i28"+    , T "i29"+      -- 30 .. 39+    , T "i30"+    , T "i31"+    , T "i32"+    , T "i33"+    , T "i34"+    , T "i35"+    , T "i36"+    , T "i37"+    , T "i38"+    , T "i39"+      -- 40 .. 49+    , T "i40"+    , T "i41"+    , T "i42"+    , T "i43"+    , T "i44"+    , T "i45"+    , T "i46"+    , T "i47"+    , T "i48"+    , T "i49"+      -- 50 .. 59+    , T "i50"+    , T "i51"+    , T "i52"+    , T "i53"+    , T "i54"+    , T "i55"+    , T "i56"+    , T "i57"+    , T "i58"+    , T "i59"+    ]
+ test/Test/Size/HList/Index/Ix070.hs view
@@ -0,0 +1,83 @@+module Test.Size.HList.Index.Ix070 (Fields) where++import Test.Infra++type Fields = '[+      -- 00 .. 09+      T "i00"+    , T "i01"+    , T "i02"+    , T "i03"+    , T "i04"+    , T "i05"+    , T "i06"+    , T "i07"+    , T "i08"+    , T "i09"+      -- 10 .. 19+    , T "i10"+    , T "i11"+    , T "i12"+    , T "i13"+    , T "i14"+    , T "i15"+    , T "i16"+    , T "i17"+    , T "i18"+    , T "i19"+      -- 20 .. 29+    , T "i20"+    , T "i21"+    , T "i22"+    , T "i23"+    , T "i24"+    , T "i25"+    , T "i26"+    , T "i27"+    , T "i28"+    , T "i29"+      -- 30 .. 39+    , T "i30"+    , T "i31"+    , T "i32"+    , T "i33"+    , T "i34"+    , T "i35"+    , T "i36"+    , T "i37"+    , T "i38"+    , T "i39"+      -- 40 .. 49+    , T "i40"+    , T "i41"+    , T "i42"+    , T "i43"+    , T "i44"+    , T "i45"+    , T "i46"+    , T "i47"+    , T "i48"+    , T "i49"+      -- 50 .. 59+    , T "i50"+    , T "i51"+    , T "i52"+    , T "i53"+    , T "i54"+    , T "i55"+    , T "i56"+    , T "i57"+    , T "i58"+    , T "i59"+      -- 60 .. 69+    , T "i60"+    , T "i61"+    , T "i62"+    , T "i63"+    , T "i64"+    , T "i65"+    , T "i66"+    , T "i67"+    , T "i68"+    , T "i69"+    ]
+ test/Test/Size/HList/Index/Ix080.hs view
@@ -0,0 +1,94 @@+module Test.Size.HList.Index.Ix080 (Fields) where++import Test.Infra++type Fields = '[+      -- 00 .. 09+      T "i00"+    , T "i01"+    , T "i02"+    , T "i03"+    , T "i04"+    , T "i05"+    , T "i06"+    , T "i07"+    , T "i08"+    , T "i09"+      -- 10 .. 19+    , T "i10"+    , T "i11"+    , T "i12"+    , T "i13"+    , T "i14"+    , T "i15"+    , T "i16"+    , T "i17"+    , T "i18"+    , T "i19"+      -- 20 .. 29+    , T "i20"+    , T "i21"+    , T "i22"+    , T "i23"+    , T "i24"+    , T "i25"+    , T "i26"+    , T "i27"+    , T "i28"+    , T "i29"+      -- 30 .. 39+    , T "i30"+    , T "i31"+    , T "i32"+    , T "i33"+    , T "i34"+    , T "i35"+    , T "i36"+    , T "i37"+    , T "i38"+    , T "i39"+      -- 40 .. 49+    , T "i40"+    , T "i41"+    , T "i42"+    , T "i43"+    , T "i44"+    , T "i45"+    , T "i46"+    , T "i47"+    , T "i48"+    , T "i49"+      -- 50 .. 59+    , T "i50"+    , T "i51"+    , T "i52"+    , T "i53"+    , T "i54"+    , T "i55"+    , T "i56"+    , T "i57"+    , T "i58"+    , T "i59"+      -- 60 .. 69+    , T "i60"+    , T "i61"+    , T "i62"+    , T "i63"+    , T "i64"+    , T "i65"+    , T "i66"+    , T "i67"+    , T "i68"+    , T "i69"+      -- 70 .. 79+    , T "i70"+    , T "i71"+    , T "i72"+    , T "i73"+    , T "i74"+    , T "i75"+    , T "i76"+    , T "i77"+    , T "i78"+    , T "i79"+    ]
+ test/Test/Size/HList/Index/Ix090.hs view
@@ -0,0 +1,105 @@+module Test.Size.HList.Index.Ix090 (Fields) where++import Test.Infra++type Fields = '[+      -- 00 .. 09+      T "i00"+    , T "i01"+    , T "i02"+    , T "i03"+    , T "i04"+    , T "i05"+    , T "i06"+    , T "i07"+    , T "i08"+    , T "i09"+      -- 10 .. 19+    , T "i10"+    , T "i11"+    , T "i12"+    , T "i13"+    , T "i14"+    , T "i15"+    , T "i16"+    , T "i17"+    , T "i18"+    , T "i19"+      -- 20 .. 29+    , T "i20"+    , T "i21"+    , T "i22"+    , T "i23"+    , T "i24"+    , T "i25"+    , T "i26"+    , T "i27"+    , T "i28"+    , T "i29"+      -- 30 .. 39+    , T "i30"+    , T "i31"+    , T "i32"+    , T "i33"+    , T "i34"+    , T "i35"+    , T "i36"+    , T "i37"+    , T "i38"+    , T "i39"+      -- 40 .. 49+    , T "i40"+    , T "i41"+    , T "i42"+    , T "i43"+    , T "i44"+    , T "i45"+    , T "i46"+    , T "i47"+    , T "i48"+    , T "i49"+      -- 50 .. 59+    , T "i50"+    , T "i51"+    , T "i52"+    , T "i53"+    , T "i54"+    , T "i55"+    , T "i56"+    , T "i57"+    , T "i58"+    , T "i59"+      -- 60 .. 69+    , T "i60"+    , T "i61"+    , T "i62"+    , T "i63"+    , T "i64"+    , T "i65"+    , T "i66"+    , T "i67"+    , T "i68"+    , T "i69"+      -- 70 .. 79+    , T "i70"+    , T "i71"+    , T "i72"+    , T "i73"+    , T "i74"+    , T "i75"+    , T "i76"+    , T "i77"+    , T "i78"+    , T "i79"+      -- 80 .. 89+    , T "i80"+    , T "i81"+    , T "i82"+    , T "i83"+    , T "i84"+    , T "i85"+    , T "i86"+    , T "i87"+    , T "i88"+    , T "i89"+    ]
+ test/Test/Size/HList/Index/Ix100.hs view
@@ -0,0 +1,116 @@+module Test.Size.HList.Index.Ix100 (Fields) where++import Test.Infra++type Fields = '[+      -- 00 .. 09+      T "i00"+    , T "i01"+    , T "i02"+    , T "i03"+    , T "i04"+    , T "i05"+    , T "i06"+    , T "i07"+    , T "i08"+    , T "i09"+      -- 10 .. 19+    , T "i10"+    , T "i11"+    , T "i12"+    , T "i13"+    , T "i14"+    , T "i15"+    , T "i16"+    , T "i17"+    , T "i18"+    , T "i19"+      -- 20 .. 29+    , T "i20"+    , T "i21"+    , T "i22"+    , T "i23"+    , T "i24"+    , T "i25"+    , T "i26"+    , T "i27"+    , T "i28"+    , T "i29"+      -- 30 .. 39+    , T "i30"+    , T "i31"+    , T "i32"+    , T "i33"+    , T "i34"+    , T "i35"+    , T "i36"+    , T "i37"+    , T "i38"+    , T "i39"+      -- 40 .. 49+    , T "i40"+    , T "i41"+    , T "i42"+    , T "i43"+    , T "i44"+    , T "i45"+    , T "i46"+    , T "i47"+    , T "i48"+    , T "i49"+      -- 50 .. 59+    , T "i50"+    , T "i51"+    , T "i52"+    , T "i53"+    , T "i54"+    , T "i55"+    , T "i56"+    , T "i57"+    , T "i58"+    , T "i59"+      -- 60 .. 69+    , T "i60"+    , T "i61"+    , T "i62"+    , T "i63"+    , T "i64"+    , T "i65"+    , T "i66"+    , T "i67"+    , T "i68"+    , T "i69"+      -- 70 .. 79+    , T "i70"+    , T "i71"+    , T "i72"+    , T "i73"+    , T "i74"+    , T "i75"+    , T "i76"+    , T "i77"+    , T "i78"+    , T "i79"+      -- 80 .. 89+    , T "i80"+    , T "i81"+    , T "i82"+    , T "i83"+    , T "i84"+    , T "i85"+    , T "i86"+    , T "i87"+    , T "i88"+    , T "i89"+      -- 90 .. 99+    , T "i90"+    , T "i91"+    , T "i92"+    , T "i93"+    , T "i94"+    , T "i95"+    , T "i96"+    , T "i97"+    , T "i98"+    , T "i99"+    ]
+ test/Test/Size/HList/LetAs/LetAs010.hs view
@@ -0,0 +1,24 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAs.LetAs010 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix010++hlist :: HList Fields+hlist =+    -- 09 .. 00+    case letAs (HCons (MkT @"i09") HNil) of { LetAs (xs09 :: HList t09) ->+    case letAs (HCons (MkT @"i08") xs09) of { LetAs (xs08 :: HList t08) ->+    case letAs (HCons (MkT @"i07") xs08) of { LetAs (xs07 :: HList t07) ->+    case letAs (HCons (MkT @"i06") xs07) of { LetAs (xs06 :: HList t06) ->+    case letAs (HCons (MkT @"i05") xs06) of { LetAs (xs05 :: HList t05) ->+    case letAs (HCons (MkT @"i04") xs05) of { LetAs (xs04 :: HList t04) ->+    case letAs (HCons (MkT @"i03") xs04) of { LetAs (xs03 :: HList t03) ->+    case letAs (HCons (MkT @"i02") xs03) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons (MkT @"i01") xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons (MkT @"i00") xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}}}}}}}}
+ test/Test/Size/HList/LetAs/LetAs020.hs view
@@ -0,0 +1,36 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAs.LetAs020 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix020++hlist :: HList Fields+hlist =+    -- 19 .. 10+    case letAs (HCons (MkT @"i19") HNil) of { LetAs (xs19 :: HList t19) ->+    case letAs (HCons (MkT @"i18") xs19) of { LetAs (xs18 :: HList t18) ->+    case letAs (HCons (MkT @"i17") xs18) of { LetAs (xs17 :: HList t17) ->+    case letAs (HCons (MkT @"i16") xs17) of { LetAs (xs16 :: HList t16) ->+    case letAs (HCons (MkT @"i15") xs16) of { LetAs (xs15 :: HList t15) ->+    case letAs (HCons (MkT @"i14") xs15) of { LetAs (xs14 :: HList t14) ->+    case letAs (HCons (MkT @"i13") xs14) of { LetAs (xs13 :: HList t13) ->+    case letAs (HCons (MkT @"i12") xs13) of { LetAs (xs12 :: HList t12) ->+    case letAs (HCons (MkT @"i11") xs12) of { LetAs (xs11 :: HList t11) ->+    case letAs (HCons (MkT @"i10") xs11) of { LetAs (xs10 :: HList t10) ->+    -- 09 .. 00+    case letAs (HCons (MkT @"i09") xs10) of { LetAs (xs09 :: HList t09) ->+    case letAs (HCons (MkT @"i08") xs09) of { LetAs (xs08 :: HList t08) ->+    case letAs (HCons (MkT @"i07") xs08) of { LetAs (xs07 :: HList t07) ->+    case letAs (HCons (MkT @"i06") xs07) of { LetAs (xs06 :: HList t06) ->+    case letAs (HCons (MkT @"i05") xs06) of { LetAs (xs05 :: HList t05) ->+    case letAs (HCons (MkT @"i04") xs05) of { LetAs (xs04 :: HList t04) ->+    case letAs (HCons (MkT @"i03") xs04) of { LetAs (xs03 :: HList t03) ->+    case letAs (HCons (MkT @"i02") xs03) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons (MkT @"i01") xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons (MkT @"i00") xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/HList/LetAs/LetAs030.hs view
@@ -0,0 +1,48 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAs.LetAs030 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix030++hlist :: HList Fields+hlist =+    -- 29 .. 20+    case letAs (HCons (MkT @"i29") HNil) of { LetAs (xs29 :: HList t29) ->+    case letAs (HCons (MkT @"i28") xs29) of { LetAs (xs28 :: HList t28) ->+    case letAs (HCons (MkT @"i27") xs28) of { LetAs (xs27 :: HList t27) ->+    case letAs (HCons (MkT @"i26") xs27) of { LetAs (xs26 :: HList t26) ->+    case letAs (HCons (MkT @"i25") xs26) of { LetAs (xs25 :: HList t25) ->+    case letAs (HCons (MkT @"i24") xs25) of { LetAs (xs24 :: HList t24) ->+    case letAs (HCons (MkT @"i23") xs24) of { LetAs (xs23 :: HList t23) ->+    case letAs (HCons (MkT @"i22") xs23) of { LetAs (xs22 :: HList t22) ->+    case letAs (HCons (MkT @"i21") xs22) of { LetAs (xs21 :: HList t21) ->+    case letAs (HCons (MkT @"i20") xs21) of { LetAs (xs20 :: HList t20) ->+    -- 19 .. 10+    case letAs (HCons (MkT @"i19") xs20) of { LetAs (xs19 :: HList t19) ->+    case letAs (HCons (MkT @"i18") xs19) of { LetAs (xs18 :: HList t18) ->+    case letAs (HCons (MkT @"i17") xs18) of { LetAs (xs17 :: HList t17) ->+    case letAs (HCons (MkT @"i16") xs17) of { LetAs (xs16 :: HList t16) ->+    case letAs (HCons (MkT @"i15") xs16) of { LetAs (xs15 :: HList t15) ->+    case letAs (HCons (MkT @"i14") xs15) of { LetAs (xs14 :: HList t14) ->+    case letAs (HCons (MkT @"i13") xs14) of { LetAs (xs13 :: HList t13) ->+    case letAs (HCons (MkT @"i12") xs13) of { LetAs (xs12 :: HList t12) ->+    case letAs (HCons (MkT @"i11") xs12) of { LetAs (xs11 :: HList t11) ->+    case letAs (HCons (MkT @"i10") xs11) of { LetAs (xs10 :: HList t10) ->+    -- 09 .. 00+    case letAs (HCons (MkT @"i09") xs10) of { LetAs (xs09 :: HList t09) ->+    case letAs (HCons (MkT @"i08") xs09) of { LetAs (xs08 :: HList t08) ->+    case letAs (HCons (MkT @"i07") xs08) of { LetAs (xs07 :: HList t07) ->+    case letAs (HCons (MkT @"i06") xs07) of { LetAs (xs06 :: HList t06) ->+    case letAs (HCons (MkT @"i05") xs06) of { LetAs (xs05 :: HList t05) ->+    case letAs (HCons (MkT @"i04") xs05) of { LetAs (xs04 :: HList t04) ->+    case letAs (HCons (MkT @"i03") xs04) of { LetAs (xs03 :: HList t03) ->+    case letAs (HCons (MkT @"i02") xs03) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons (MkT @"i01") xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons (MkT @"i00") xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/HList/LetAs/LetAs040.hs view
@@ -0,0 +1,60 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAs.LetAs040 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix040++hlist :: HList Fields+hlist =+    -- 39 .. 30+    case letAs (HCons (MkT @"i39") HNil) of { LetAs (xs39 :: HList t39) ->+    case letAs (HCons (MkT @"i38") xs39) of { LetAs (xs38 :: HList t38) ->+    case letAs (HCons (MkT @"i37") xs38) of { LetAs (xs37 :: HList t37) ->+    case letAs (HCons (MkT @"i36") xs37) of { LetAs (xs36 :: HList t36) ->+    case letAs (HCons (MkT @"i35") xs36) of { LetAs (xs35 :: HList t35) ->+    case letAs (HCons (MkT @"i34") xs35) of { LetAs (xs34 :: HList t34) ->+    case letAs (HCons (MkT @"i33") xs34) of { LetAs (xs33 :: HList t33) ->+    case letAs (HCons (MkT @"i32") xs33) of { LetAs (xs32 :: HList t32) ->+    case letAs (HCons (MkT @"i31") xs32) of { LetAs (xs31 :: HList t31) ->+    case letAs (HCons (MkT @"i30") xs31) of { LetAs (xs30 :: HList t30) ->+    -- 29 .. 20+    case letAs (HCons (MkT @"i29") xs30) of { LetAs (xs29 :: HList t29) ->+    case letAs (HCons (MkT @"i28") xs29) of { LetAs (xs28 :: HList t28) ->+    case letAs (HCons (MkT @"i27") xs28) of { LetAs (xs27 :: HList t27) ->+    case letAs (HCons (MkT @"i26") xs27) of { LetAs (xs26 :: HList t26) ->+    case letAs (HCons (MkT @"i25") xs26) of { LetAs (xs25 :: HList t25) ->+    case letAs (HCons (MkT @"i24") xs25) of { LetAs (xs24 :: HList t24) ->+    case letAs (HCons (MkT @"i23") xs24) of { LetAs (xs23 :: HList t23) ->+    case letAs (HCons (MkT @"i22") xs23) of { LetAs (xs22 :: HList t22) ->+    case letAs (HCons (MkT @"i21") xs22) of { LetAs (xs21 :: HList t21) ->+    case letAs (HCons (MkT @"i20") xs21) of { LetAs (xs20 :: HList t20) ->+    -- 19 .. 10+    case letAs (HCons (MkT @"i19") xs20) of { LetAs (xs19 :: HList t19) ->+    case letAs (HCons (MkT @"i18") xs19) of { LetAs (xs18 :: HList t18) ->+    case letAs (HCons (MkT @"i17") xs18) of { LetAs (xs17 :: HList t17) ->+    case letAs (HCons (MkT @"i16") xs17) of { LetAs (xs16 :: HList t16) ->+    case letAs (HCons (MkT @"i15") xs16) of { LetAs (xs15 :: HList t15) ->+    case letAs (HCons (MkT @"i14") xs15) of { LetAs (xs14 :: HList t14) ->+    case letAs (HCons (MkT @"i13") xs14) of { LetAs (xs13 :: HList t13) ->+    case letAs (HCons (MkT @"i12") xs13) of { LetAs (xs12 :: HList t12) ->+    case letAs (HCons (MkT @"i11") xs12) of { LetAs (xs11 :: HList t11) ->+    case letAs (HCons (MkT @"i10") xs11) of { LetAs (xs10 :: HList t10) ->+    -- 09 .. 00+    case letAs (HCons (MkT @"i09") xs10) of { LetAs (xs09 :: HList t09) ->+    case letAs (HCons (MkT @"i08") xs09) of { LetAs (xs08 :: HList t08) ->+    case letAs (HCons (MkT @"i07") xs08) of { LetAs (xs07 :: HList t07) ->+    case letAs (HCons (MkT @"i06") xs07) of { LetAs (xs06 :: HList t06) ->+    case letAs (HCons (MkT @"i05") xs06) of { LetAs (xs05 :: HList t05) ->+    case letAs (HCons (MkT @"i04") xs05) of { LetAs (xs04 :: HList t04) ->+    case letAs (HCons (MkT @"i03") xs04) of { LetAs (xs03 :: HList t03) ->+    case letAs (HCons (MkT @"i02") xs03) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons (MkT @"i01") xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons (MkT @"i00") xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/HList/LetAs/LetAs050.hs view
@@ -0,0 +1,72 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAs.LetAs050 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix050++hlist :: HList Fields+hlist =+    -- 49 .. 40+    case letAs (HCons (MkT @"i49") HNil) of { LetAs (xs49 :: HList t49) ->+    case letAs (HCons (MkT @"i48") xs49) of { LetAs (xs48 :: HList t48) ->+    case letAs (HCons (MkT @"i47") xs48) of { LetAs (xs47 :: HList t47) ->+    case letAs (HCons (MkT @"i46") xs47) of { LetAs (xs46 :: HList t46) ->+    case letAs (HCons (MkT @"i45") xs46) of { LetAs (xs45 :: HList t45) ->+    case letAs (HCons (MkT @"i44") xs45) of { LetAs (xs44 :: HList t44) ->+    case letAs (HCons (MkT @"i43") xs44) of { LetAs (xs43 :: HList t43) ->+    case letAs (HCons (MkT @"i42") xs43) of { LetAs (xs42 :: HList t42) ->+    case letAs (HCons (MkT @"i41") xs42) of { LetAs (xs41 :: HList t41) ->+    case letAs (HCons (MkT @"i40") xs41) of { LetAs (xs40 :: HList t40) ->+    -- 39 .. 30+    case letAs (HCons (MkT @"i39") xs40) of { LetAs (xs39 :: HList t39) ->+    case letAs (HCons (MkT @"i38") xs39) of { LetAs (xs38 :: HList t38) ->+    case letAs (HCons (MkT @"i37") xs38) of { LetAs (xs37 :: HList t37) ->+    case letAs (HCons (MkT @"i36") xs37) of { LetAs (xs36 :: HList t36) ->+    case letAs (HCons (MkT @"i35") xs36) of { LetAs (xs35 :: HList t35) ->+    case letAs (HCons (MkT @"i34") xs35) of { LetAs (xs34 :: HList t34) ->+    case letAs (HCons (MkT @"i33") xs34) of { LetAs (xs33 :: HList t33) ->+    case letAs (HCons (MkT @"i32") xs33) of { LetAs (xs32 :: HList t32) ->+    case letAs (HCons (MkT @"i31") xs32) of { LetAs (xs31 :: HList t31) ->+    case letAs (HCons (MkT @"i30") xs31) of { LetAs (xs30 :: HList t30) ->+    -- 29 .. 20+    case letAs (HCons (MkT @"i29") xs30) of { LetAs (xs29 :: HList t29) ->+    case letAs (HCons (MkT @"i28") xs29) of { LetAs (xs28 :: HList t28) ->+    case letAs (HCons (MkT @"i27") xs28) of { LetAs (xs27 :: HList t27) ->+    case letAs (HCons (MkT @"i26") xs27) of { LetAs (xs26 :: HList t26) ->+    case letAs (HCons (MkT @"i25") xs26) of { LetAs (xs25 :: HList t25) ->+    case letAs (HCons (MkT @"i24") xs25) of { LetAs (xs24 :: HList t24) ->+    case letAs (HCons (MkT @"i23") xs24) of { LetAs (xs23 :: HList t23) ->+    case letAs (HCons (MkT @"i22") xs23) of { LetAs (xs22 :: HList t22) ->+    case letAs (HCons (MkT @"i21") xs22) of { LetAs (xs21 :: HList t21) ->+    case letAs (HCons (MkT @"i20") xs21) of { LetAs (xs20 :: HList t20) ->+    -- 19 .. 10+    case letAs (HCons (MkT @"i19") xs20) of { LetAs (xs19 :: HList t19) ->+    case letAs (HCons (MkT @"i18") xs19) of { LetAs (xs18 :: HList t18) ->+    case letAs (HCons (MkT @"i17") xs18) of { LetAs (xs17 :: HList t17) ->+    case letAs (HCons (MkT @"i16") xs17) of { LetAs (xs16 :: HList t16) ->+    case letAs (HCons (MkT @"i15") xs16) of { LetAs (xs15 :: HList t15) ->+    case letAs (HCons (MkT @"i14") xs15) of { LetAs (xs14 :: HList t14) ->+    case letAs (HCons (MkT @"i13") xs14) of { LetAs (xs13 :: HList t13) ->+    case letAs (HCons (MkT @"i12") xs13) of { LetAs (xs12 :: HList t12) ->+    case letAs (HCons (MkT @"i11") xs12) of { LetAs (xs11 :: HList t11) ->+    case letAs (HCons (MkT @"i10") xs11) of { LetAs (xs10 :: HList t10) ->+    -- 09 .. 00+    case letAs (HCons (MkT @"i09") xs10) of { LetAs (xs09 :: HList t09) ->+    case letAs (HCons (MkT @"i08") xs09) of { LetAs (xs08 :: HList t08) ->+    case letAs (HCons (MkT @"i07") xs08) of { LetAs (xs07 :: HList t07) ->+    case letAs (HCons (MkT @"i06") xs07) of { LetAs (xs06 :: HList t06) ->+    case letAs (HCons (MkT @"i05") xs06) of { LetAs (xs05 :: HList t05) ->+    case letAs (HCons (MkT @"i04") xs05) of { LetAs (xs04 :: HList t04) ->+    case letAs (HCons (MkT @"i03") xs04) of { LetAs (xs03 :: HList t03) ->+    case letAs (HCons (MkT @"i02") xs03) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons (MkT @"i01") xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons (MkT @"i00") xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/HList/LetAs/LetAs060.hs view
@@ -0,0 +1,84 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAs.LetAs060 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix060++hlist :: HList Fields+hlist =+    -- 59 .. 50+    case letAs (HCons (MkT @"i59") HNil) of { LetAs (xs59 :: HList t59) ->+    case letAs (HCons (MkT @"i58") xs59) of { LetAs (xs58 :: HList t58) ->+    case letAs (HCons (MkT @"i57") xs58) of { LetAs (xs57 :: HList t57) ->+    case letAs (HCons (MkT @"i56") xs57) of { LetAs (xs56 :: HList t56) ->+    case letAs (HCons (MkT @"i55") xs56) of { LetAs (xs55 :: HList t55) ->+    case letAs (HCons (MkT @"i54") xs55) of { LetAs (xs54 :: HList t54) ->+    case letAs (HCons (MkT @"i53") xs54) of { LetAs (xs53 :: HList t53) ->+    case letAs (HCons (MkT @"i52") xs53) of { LetAs (xs52 :: HList t52) ->+    case letAs (HCons (MkT @"i51") xs52) of { LetAs (xs51 :: HList t51) ->+    case letAs (HCons (MkT @"i50") xs51) of { LetAs (xs50 :: HList t50) ->+    -- 49 .. 40+    case letAs (HCons (MkT @"i49") xs50) of { LetAs (xs49 :: HList t49) ->+    case letAs (HCons (MkT @"i48") xs49) of { LetAs (xs48 :: HList t48) ->+    case letAs (HCons (MkT @"i47") xs48) of { LetAs (xs47 :: HList t47) ->+    case letAs (HCons (MkT @"i46") xs47) of { LetAs (xs46 :: HList t46) ->+    case letAs (HCons (MkT @"i45") xs46) of { LetAs (xs45 :: HList t45) ->+    case letAs (HCons (MkT @"i44") xs45) of { LetAs (xs44 :: HList t44) ->+    case letAs (HCons (MkT @"i43") xs44) of { LetAs (xs43 :: HList t43) ->+    case letAs (HCons (MkT @"i42") xs43) of { LetAs (xs42 :: HList t42) ->+    case letAs (HCons (MkT @"i41") xs42) of { LetAs (xs41 :: HList t41) ->+    case letAs (HCons (MkT @"i40") xs41) of { LetAs (xs40 :: HList t40) ->+    -- 39 .. 30+    case letAs (HCons (MkT @"i39") xs40) of { LetAs (xs39 :: HList t39) ->+    case letAs (HCons (MkT @"i38") xs39) of { LetAs (xs38 :: HList t38) ->+    case letAs (HCons (MkT @"i37") xs38) of { LetAs (xs37 :: HList t37) ->+    case letAs (HCons (MkT @"i36") xs37) of { LetAs (xs36 :: HList t36) ->+    case letAs (HCons (MkT @"i35") xs36) of { LetAs (xs35 :: HList t35) ->+    case letAs (HCons (MkT @"i34") xs35) of { LetAs (xs34 :: HList t34) ->+    case letAs (HCons (MkT @"i33") xs34) of { LetAs (xs33 :: HList t33) ->+    case letAs (HCons (MkT @"i32") xs33) of { LetAs (xs32 :: HList t32) ->+    case letAs (HCons (MkT @"i31") xs32) of { LetAs (xs31 :: HList t31) ->+    case letAs (HCons (MkT @"i30") xs31) of { LetAs (xs30 :: HList t30) ->+    -- 29 .. 20+    case letAs (HCons (MkT @"i29") xs30) of { LetAs (xs29 :: HList t29) ->+    case letAs (HCons (MkT @"i28") xs29) of { LetAs (xs28 :: HList t28) ->+    case letAs (HCons (MkT @"i27") xs28) of { LetAs (xs27 :: HList t27) ->+    case letAs (HCons (MkT @"i26") xs27) of { LetAs (xs26 :: HList t26) ->+    case letAs (HCons (MkT @"i25") xs26) of { LetAs (xs25 :: HList t25) ->+    case letAs (HCons (MkT @"i24") xs25) of { LetAs (xs24 :: HList t24) ->+    case letAs (HCons (MkT @"i23") xs24) of { LetAs (xs23 :: HList t23) ->+    case letAs (HCons (MkT @"i22") xs23) of { LetAs (xs22 :: HList t22) ->+    case letAs (HCons (MkT @"i21") xs22) of { LetAs (xs21 :: HList t21) ->+    case letAs (HCons (MkT @"i20") xs21) of { LetAs (xs20 :: HList t20) ->+    -- 19 .. 10+    case letAs (HCons (MkT @"i19") xs20) of { LetAs (xs19 :: HList t19) ->+    case letAs (HCons (MkT @"i18") xs19) of { LetAs (xs18 :: HList t18) ->+    case letAs (HCons (MkT @"i17") xs18) of { LetAs (xs17 :: HList t17) ->+    case letAs (HCons (MkT @"i16") xs17) of { LetAs (xs16 :: HList t16) ->+    case letAs (HCons (MkT @"i15") xs16) of { LetAs (xs15 :: HList t15) ->+    case letAs (HCons (MkT @"i14") xs15) of { LetAs (xs14 :: HList t14) ->+    case letAs (HCons (MkT @"i13") xs14) of { LetAs (xs13 :: HList t13) ->+    case letAs (HCons (MkT @"i12") xs13) of { LetAs (xs12 :: HList t12) ->+    case letAs (HCons (MkT @"i11") xs12) of { LetAs (xs11 :: HList t11) ->+    case letAs (HCons (MkT @"i10") xs11) of { LetAs (xs10 :: HList t10) ->+    -- 09 .. 00+    case letAs (HCons (MkT @"i09") xs10) of { LetAs (xs09 :: HList t09) ->+    case letAs (HCons (MkT @"i08") xs09) of { LetAs (xs08 :: HList t08) ->+    case letAs (HCons (MkT @"i07") xs08) of { LetAs (xs07 :: HList t07) ->+    case letAs (HCons (MkT @"i06") xs07) of { LetAs (xs06 :: HList t06) ->+    case letAs (HCons (MkT @"i05") xs06) of { LetAs (xs05 :: HList t05) ->+    case letAs (HCons (MkT @"i04") xs05) of { LetAs (xs04 :: HList t04) ->+    case letAs (HCons (MkT @"i03") xs04) of { LetAs (xs03 :: HList t03) ->+    case letAs (HCons (MkT @"i02") xs03) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons (MkT @"i01") xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons (MkT @"i00") xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/HList/LetAs/LetAs070.hs view
@@ -0,0 +1,96 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAs.LetAs070 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix070++hlist :: HList Fields+hlist =+    -- 69 .. 60+    case letAs (HCons (MkT @"i69") HNil) of { LetAs (xs69 :: HList t69) ->+    case letAs (HCons (MkT @"i68") xs69) of { LetAs (xs68 :: HList t68) ->+    case letAs (HCons (MkT @"i67") xs68) of { LetAs (xs67 :: HList t67) ->+    case letAs (HCons (MkT @"i66") xs67) of { LetAs (xs66 :: HList t66) ->+    case letAs (HCons (MkT @"i65") xs66) of { LetAs (xs65 :: HList t65) ->+    case letAs (HCons (MkT @"i64") xs65) of { LetAs (xs64 :: HList t64) ->+    case letAs (HCons (MkT @"i63") xs64) of { LetAs (xs63 :: HList t63) ->+    case letAs (HCons (MkT @"i62") xs63) of { LetAs (xs62 :: HList t62) ->+    case letAs (HCons (MkT @"i61") xs62) of { LetAs (xs61 :: HList t61) ->+    case letAs (HCons (MkT @"i60") xs61) of { LetAs (xs60 :: HList t60) ->+    -- 59 .. 50+    case letAs (HCons (MkT @"i59") xs60) of { LetAs (xs59 :: HList t59) ->+    case letAs (HCons (MkT @"i58") xs59) of { LetAs (xs58 :: HList t58) ->+    case letAs (HCons (MkT @"i57") xs58) of { LetAs (xs57 :: HList t57) ->+    case letAs (HCons (MkT @"i56") xs57) of { LetAs (xs56 :: HList t56) ->+    case letAs (HCons (MkT @"i55") xs56) of { LetAs (xs55 :: HList t55) ->+    case letAs (HCons (MkT @"i54") xs55) of { LetAs (xs54 :: HList t54) ->+    case letAs (HCons (MkT @"i53") xs54) of { LetAs (xs53 :: HList t53) ->+    case letAs (HCons (MkT @"i52") xs53) of { LetAs (xs52 :: HList t52) ->+    case letAs (HCons (MkT @"i51") xs52) of { LetAs (xs51 :: HList t51) ->+    case letAs (HCons (MkT @"i50") xs51) of { LetAs (xs50 :: HList t50) ->+    -- 49 .. 40+    case letAs (HCons (MkT @"i49") xs50) of { LetAs (xs49 :: HList t49) ->+    case letAs (HCons (MkT @"i48") xs49) of { LetAs (xs48 :: HList t48) ->+    case letAs (HCons (MkT @"i47") xs48) of { LetAs (xs47 :: HList t47) ->+    case letAs (HCons (MkT @"i46") xs47) of { LetAs (xs46 :: HList t46) ->+    case letAs (HCons (MkT @"i45") xs46) of { LetAs (xs45 :: HList t45) ->+    case letAs (HCons (MkT @"i44") xs45) of { LetAs (xs44 :: HList t44) ->+    case letAs (HCons (MkT @"i43") xs44) of { LetAs (xs43 :: HList t43) ->+    case letAs (HCons (MkT @"i42") xs43) of { LetAs (xs42 :: HList t42) ->+    case letAs (HCons (MkT @"i41") xs42) of { LetAs (xs41 :: HList t41) ->+    case letAs (HCons (MkT @"i40") xs41) of { LetAs (xs40 :: HList t40) ->+    -- 39 .. 30+    case letAs (HCons (MkT @"i39") xs40) of { LetAs (xs39 :: HList t39) ->+    case letAs (HCons (MkT @"i38") xs39) of { LetAs (xs38 :: HList t38) ->+    case letAs (HCons (MkT @"i37") xs38) of { LetAs (xs37 :: HList t37) ->+    case letAs (HCons (MkT @"i36") xs37) of { LetAs (xs36 :: HList t36) ->+    case letAs (HCons (MkT @"i35") xs36) of { LetAs (xs35 :: HList t35) ->+    case letAs (HCons (MkT @"i34") xs35) of { LetAs (xs34 :: HList t34) ->+    case letAs (HCons (MkT @"i33") xs34) of { LetAs (xs33 :: HList t33) ->+    case letAs (HCons (MkT @"i32") xs33) of { LetAs (xs32 :: HList t32) ->+    case letAs (HCons (MkT @"i31") xs32) of { LetAs (xs31 :: HList t31) ->+    case letAs (HCons (MkT @"i30") xs31) of { LetAs (xs30 :: HList t30) ->+    -- 29 .. 20+    case letAs (HCons (MkT @"i29") xs30) of { LetAs (xs29 :: HList t29) ->+    case letAs (HCons (MkT @"i28") xs29) of { LetAs (xs28 :: HList t28) ->+    case letAs (HCons (MkT @"i27") xs28) of { LetAs (xs27 :: HList t27) ->+    case letAs (HCons (MkT @"i26") xs27) of { LetAs (xs26 :: HList t26) ->+    case letAs (HCons (MkT @"i25") xs26) of { LetAs (xs25 :: HList t25) ->+    case letAs (HCons (MkT @"i24") xs25) of { LetAs (xs24 :: HList t24) ->+    case letAs (HCons (MkT @"i23") xs24) of { LetAs (xs23 :: HList t23) ->+    case letAs (HCons (MkT @"i22") xs23) of { LetAs (xs22 :: HList t22) ->+    case letAs (HCons (MkT @"i21") xs22) of { LetAs (xs21 :: HList t21) ->+    case letAs (HCons (MkT @"i20") xs21) of { LetAs (xs20 :: HList t20) ->+    -- 19 .. 10+    case letAs (HCons (MkT @"i19") xs20) of { LetAs (xs19 :: HList t19) ->+    case letAs (HCons (MkT @"i18") xs19) of { LetAs (xs18 :: HList t18) ->+    case letAs (HCons (MkT @"i17") xs18) of { LetAs (xs17 :: HList t17) ->+    case letAs (HCons (MkT @"i16") xs17) of { LetAs (xs16 :: HList t16) ->+    case letAs (HCons (MkT @"i15") xs16) of { LetAs (xs15 :: HList t15) ->+    case letAs (HCons (MkT @"i14") xs15) of { LetAs (xs14 :: HList t14) ->+    case letAs (HCons (MkT @"i13") xs14) of { LetAs (xs13 :: HList t13) ->+    case letAs (HCons (MkT @"i12") xs13) of { LetAs (xs12 :: HList t12) ->+    case letAs (HCons (MkT @"i11") xs12) of { LetAs (xs11 :: HList t11) ->+    case letAs (HCons (MkT @"i10") xs11) of { LetAs (xs10 :: HList t10) ->+    -- 09 .. 00+    case letAs (HCons (MkT @"i09") xs10) of { LetAs (xs09 :: HList t09) ->+    case letAs (HCons (MkT @"i08") xs09) of { LetAs (xs08 :: HList t08) ->+    case letAs (HCons (MkT @"i07") xs08) of { LetAs (xs07 :: HList t07) ->+    case letAs (HCons (MkT @"i06") xs07) of { LetAs (xs06 :: HList t06) ->+    case letAs (HCons (MkT @"i05") xs06) of { LetAs (xs05 :: HList t05) ->+    case letAs (HCons (MkT @"i04") xs05) of { LetAs (xs04 :: HList t04) ->+    case letAs (HCons (MkT @"i03") xs04) of { LetAs (xs03 :: HList t03) ->+    case letAs (HCons (MkT @"i02") xs03) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons (MkT @"i01") xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons (MkT @"i00") xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/HList/LetAs/LetAs080.hs view
@@ -0,0 +1,108 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAs.LetAs080 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix080++hlist :: HList Fields+hlist =+    -- 79 .. 70+    case letAs (HCons (MkT @"i79") HNil) of { LetAs (xs79 :: HList t79) ->+    case letAs (HCons (MkT @"i78") xs79) of { LetAs (xs78 :: HList t78) ->+    case letAs (HCons (MkT @"i77") xs78) of { LetAs (xs77 :: HList t77) ->+    case letAs (HCons (MkT @"i76") xs77) of { LetAs (xs76 :: HList t76) ->+    case letAs (HCons (MkT @"i75") xs76) of { LetAs (xs75 :: HList t75) ->+    case letAs (HCons (MkT @"i74") xs75) of { LetAs (xs74 :: HList t74) ->+    case letAs (HCons (MkT @"i73") xs74) of { LetAs (xs73 :: HList t73) ->+    case letAs (HCons (MkT @"i72") xs73) of { LetAs (xs72 :: HList t72) ->+    case letAs (HCons (MkT @"i71") xs72) of { LetAs (xs71 :: HList t71) ->+    case letAs (HCons (MkT @"i70") xs71) of { LetAs (xs70 :: HList t70) ->+    -- 69 .. 60+    case letAs (HCons (MkT @"i69") xs70) of { LetAs (xs69 :: HList t69) ->+    case letAs (HCons (MkT @"i68") xs69) of { LetAs (xs68 :: HList t68) ->+    case letAs (HCons (MkT @"i67") xs68) of { LetAs (xs67 :: HList t67) ->+    case letAs (HCons (MkT @"i66") xs67) of { LetAs (xs66 :: HList t66) ->+    case letAs (HCons (MkT @"i65") xs66) of { LetAs (xs65 :: HList t65) ->+    case letAs (HCons (MkT @"i64") xs65) of { LetAs (xs64 :: HList t64) ->+    case letAs (HCons (MkT @"i63") xs64) of { LetAs (xs63 :: HList t63) ->+    case letAs (HCons (MkT @"i62") xs63) of { LetAs (xs62 :: HList t62) ->+    case letAs (HCons (MkT @"i61") xs62) of { LetAs (xs61 :: HList t61) ->+    case letAs (HCons (MkT @"i60") xs61) of { LetAs (xs60 :: HList t60) ->+    -- 59 .. 50+    case letAs (HCons (MkT @"i59") xs60) of { LetAs (xs59 :: HList t59) ->+    case letAs (HCons (MkT @"i58") xs59) of { LetAs (xs58 :: HList t58) ->+    case letAs (HCons (MkT @"i57") xs58) of { LetAs (xs57 :: HList t57) ->+    case letAs (HCons (MkT @"i56") xs57) of { LetAs (xs56 :: HList t56) ->+    case letAs (HCons (MkT @"i55") xs56) of { LetAs (xs55 :: HList t55) ->+    case letAs (HCons (MkT @"i54") xs55) of { LetAs (xs54 :: HList t54) ->+    case letAs (HCons (MkT @"i53") xs54) of { LetAs (xs53 :: HList t53) ->+    case letAs (HCons (MkT @"i52") xs53) of { LetAs (xs52 :: HList t52) ->+    case letAs (HCons (MkT @"i51") xs52) of { LetAs (xs51 :: HList t51) ->+    case letAs (HCons (MkT @"i50") xs51) of { LetAs (xs50 :: HList t50) ->+    -- 49 .. 40+    case letAs (HCons (MkT @"i49") xs50) of { LetAs (xs49 :: HList t49) ->+    case letAs (HCons (MkT @"i48") xs49) of { LetAs (xs48 :: HList t48) ->+    case letAs (HCons (MkT @"i47") xs48) of { LetAs (xs47 :: HList t47) ->+    case letAs (HCons (MkT @"i46") xs47) of { LetAs (xs46 :: HList t46) ->+    case letAs (HCons (MkT @"i45") xs46) of { LetAs (xs45 :: HList t45) ->+    case letAs (HCons (MkT @"i44") xs45) of { LetAs (xs44 :: HList t44) ->+    case letAs (HCons (MkT @"i43") xs44) of { LetAs (xs43 :: HList t43) ->+    case letAs (HCons (MkT @"i42") xs43) of { LetAs (xs42 :: HList t42) ->+    case letAs (HCons (MkT @"i41") xs42) of { LetAs (xs41 :: HList t41) ->+    case letAs (HCons (MkT @"i40") xs41) of { LetAs (xs40 :: HList t40) ->+    -- 39 .. 30+    case letAs (HCons (MkT @"i39") xs40) of { LetAs (xs39 :: HList t39) ->+    case letAs (HCons (MkT @"i38") xs39) of { LetAs (xs38 :: HList t38) ->+    case letAs (HCons (MkT @"i37") xs38) of { LetAs (xs37 :: HList t37) ->+    case letAs (HCons (MkT @"i36") xs37) of { LetAs (xs36 :: HList t36) ->+    case letAs (HCons (MkT @"i35") xs36) of { LetAs (xs35 :: HList t35) ->+    case letAs (HCons (MkT @"i34") xs35) of { LetAs (xs34 :: HList t34) ->+    case letAs (HCons (MkT @"i33") xs34) of { LetAs (xs33 :: HList t33) ->+    case letAs (HCons (MkT @"i32") xs33) of { LetAs (xs32 :: HList t32) ->+    case letAs (HCons (MkT @"i31") xs32) of { LetAs (xs31 :: HList t31) ->+    case letAs (HCons (MkT @"i30") xs31) of { LetAs (xs30 :: HList t30) ->+    -- 29 .. 20+    case letAs (HCons (MkT @"i29") xs30) of { LetAs (xs29 :: HList t29) ->+    case letAs (HCons (MkT @"i28") xs29) of { LetAs (xs28 :: HList t28) ->+    case letAs (HCons (MkT @"i27") xs28) of { LetAs (xs27 :: HList t27) ->+    case letAs (HCons (MkT @"i26") xs27) of { LetAs (xs26 :: HList t26) ->+    case letAs (HCons (MkT @"i25") xs26) of { LetAs (xs25 :: HList t25) ->+    case letAs (HCons (MkT @"i24") xs25) of { LetAs (xs24 :: HList t24) ->+    case letAs (HCons (MkT @"i23") xs24) of { LetAs (xs23 :: HList t23) ->+    case letAs (HCons (MkT @"i22") xs23) of { LetAs (xs22 :: HList t22) ->+    case letAs (HCons (MkT @"i21") xs22) of { LetAs (xs21 :: HList t21) ->+    case letAs (HCons (MkT @"i20") xs21) of { LetAs (xs20 :: HList t20) ->+    -- 19 .. 10+    case letAs (HCons (MkT @"i19") xs20) of { LetAs (xs19 :: HList t19) ->+    case letAs (HCons (MkT @"i18") xs19) of { LetAs (xs18 :: HList t18) ->+    case letAs (HCons (MkT @"i17") xs18) of { LetAs (xs17 :: HList t17) ->+    case letAs (HCons (MkT @"i16") xs17) of { LetAs (xs16 :: HList t16) ->+    case letAs (HCons (MkT @"i15") xs16) of { LetAs (xs15 :: HList t15) ->+    case letAs (HCons (MkT @"i14") xs15) of { LetAs (xs14 :: HList t14) ->+    case letAs (HCons (MkT @"i13") xs14) of { LetAs (xs13 :: HList t13) ->+    case letAs (HCons (MkT @"i12") xs13) of { LetAs (xs12 :: HList t12) ->+    case letAs (HCons (MkT @"i11") xs12) of { LetAs (xs11 :: HList t11) ->+    case letAs (HCons (MkT @"i10") xs11) of { LetAs (xs10 :: HList t10) ->+    -- 09 .. 00+    case letAs (HCons (MkT @"i09") xs10) of { LetAs (xs09 :: HList t09) ->+    case letAs (HCons (MkT @"i08") xs09) of { LetAs (xs08 :: HList t08) ->+    case letAs (HCons (MkT @"i07") xs08) of { LetAs (xs07 :: HList t07) ->+    case letAs (HCons (MkT @"i06") xs07) of { LetAs (xs06 :: HList t06) ->+    case letAs (HCons (MkT @"i05") xs06) of { LetAs (xs05 :: HList t05) ->+    case letAs (HCons (MkT @"i04") xs05) of { LetAs (xs04 :: HList t04) ->+    case letAs (HCons (MkT @"i03") xs04) of { LetAs (xs03 :: HList t03) ->+    case letAs (HCons (MkT @"i02") xs03) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons (MkT @"i01") xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons (MkT @"i00") xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/HList/LetAs/LetAs090.hs view
@@ -0,0 +1,120 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAs.LetAs090 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix090++hlist :: HList Fields+hlist =+    -- 89 .. 80+    case letAs (HCons (MkT @"i89") HNil) of { LetAs (xs89 :: HList t89) ->+    case letAs (HCons (MkT @"i88") xs89) of { LetAs (xs88 :: HList t88) ->+    case letAs (HCons (MkT @"i87") xs88) of { LetAs (xs87 :: HList t87) ->+    case letAs (HCons (MkT @"i86") xs87) of { LetAs (xs86 :: HList t86) ->+    case letAs (HCons (MkT @"i85") xs86) of { LetAs (xs85 :: HList t85) ->+    case letAs (HCons (MkT @"i84") xs85) of { LetAs (xs84 :: HList t84) ->+    case letAs (HCons (MkT @"i83") xs84) of { LetAs (xs83 :: HList t83) ->+    case letAs (HCons (MkT @"i82") xs83) of { LetAs (xs82 :: HList t82) ->+    case letAs (HCons (MkT @"i81") xs82) of { LetAs (xs81 :: HList t81) ->+    case letAs (HCons (MkT @"i80") xs81) of { LetAs (xs80 :: HList t80) ->+    -- 79 .. 70+    case letAs (HCons (MkT @"i79") xs80) of { LetAs (xs79 :: HList t79) ->+    case letAs (HCons (MkT @"i78") xs79) of { LetAs (xs78 :: HList t78) ->+    case letAs (HCons (MkT @"i77") xs78) of { LetAs (xs77 :: HList t77) ->+    case letAs (HCons (MkT @"i76") xs77) of { LetAs (xs76 :: HList t76) ->+    case letAs (HCons (MkT @"i75") xs76) of { LetAs (xs75 :: HList t75) ->+    case letAs (HCons (MkT @"i74") xs75) of { LetAs (xs74 :: HList t74) ->+    case letAs (HCons (MkT @"i73") xs74) of { LetAs (xs73 :: HList t73) ->+    case letAs (HCons (MkT @"i72") xs73) of { LetAs (xs72 :: HList t72) ->+    case letAs (HCons (MkT @"i71") xs72) of { LetAs (xs71 :: HList t71) ->+    case letAs (HCons (MkT @"i70") xs71) of { LetAs (xs70 :: HList t70) ->+    -- 69 .. 60+    case letAs (HCons (MkT @"i69") xs70) of { LetAs (xs69 :: HList t69) ->+    case letAs (HCons (MkT @"i68") xs69) of { LetAs (xs68 :: HList t68) ->+    case letAs (HCons (MkT @"i67") xs68) of { LetAs (xs67 :: HList t67) ->+    case letAs (HCons (MkT @"i66") xs67) of { LetAs (xs66 :: HList t66) ->+    case letAs (HCons (MkT @"i65") xs66) of { LetAs (xs65 :: HList t65) ->+    case letAs (HCons (MkT @"i64") xs65) of { LetAs (xs64 :: HList t64) ->+    case letAs (HCons (MkT @"i63") xs64) of { LetAs (xs63 :: HList t63) ->+    case letAs (HCons (MkT @"i62") xs63) of { LetAs (xs62 :: HList t62) ->+    case letAs (HCons (MkT @"i61") xs62) of { LetAs (xs61 :: HList t61) ->+    case letAs (HCons (MkT @"i60") xs61) of { LetAs (xs60 :: HList t60) ->+    -- 59 .. 50+    case letAs (HCons (MkT @"i59") xs60) of { LetAs (xs59 :: HList t59) ->+    case letAs (HCons (MkT @"i58") xs59) of { LetAs (xs58 :: HList t58) ->+    case letAs (HCons (MkT @"i57") xs58) of { LetAs (xs57 :: HList t57) ->+    case letAs (HCons (MkT @"i56") xs57) of { LetAs (xs56 :: HList t56) ->+    case letAs (HCons (MkT @"i55") xs56) of { LetAs (xs55 :: HList t55) ->+    case letAs (HCons (MkT @"i54") xs55) of { LetAs (xs54 :: HList t54) ->+    case letAs (HCons (MkT @"i53") xs54) of { LetAs (xs53 :: HList t53) ->+    case letAs (HCons (MkT @"i52") xs53) of { LetAs (xs52 :: HList t52) ->+    case letAs (HCons (MkT @"i51") xs52) of { LetAs (xs51 :: HList t51) ->+    case letAs (HCons (MkT @"i50") xs51) of { LetAs (xs50 :: HList t50) ->+    -- 49 .. 40+    case letAs (HCons (MkT @"i49") xs50) of { LetAs (xs49 :: HList t49) ->+    case letAs (HCons (MkT @"i48") xs49) of { LetAs (xs48 :: HList t48) ->+    case letAs (HCons (MkT @"i47") xs48) of { LetAs (xs47 :: HList t47) ->+    case letAs (HCons (MkT @"i46") xs47) of { LetAs (xs46 :: HList t46) ->+    case letAs (HCons (MkT @"i45") xs46) of { LetAs (xs45 :: HList t45) ->+    case letAs (HCons (MkT @"i44") xs45) of { LetAs (xs44 :: HList t44) ->+    case letAs (HCons (MkT @"i43") xs44) of { LetAs (xs43 :: HList t43) ->+    case letAs (HCons (MkT @"i42") xs43) of { LetAs (xs42 :: HList t42) ->+    case letAs (HCons (MkT @"i41") xs42) of { LetAs (xs41 :: HList t41) ->+    case letAs (HCons (MkT @"i40") xs41) of { LetAs (xs40 :: HList t40) ->+    -- 39 .. 30+    case letAs (HCons (MkT @"i39") xs40) of { LetAs (xs39 :: HList t39) ->+    case letAs (HCons (MkT @"i38") xs39) of { LetAs (xs38 :: HList t38) ->+    case letAs (HCons (MkT @"i37") xs38) of { LetAs (xs37 :: HList t37) ->+    case letAs (HCons (MkT @"i36") xs37) of { LetAs (xs36 :: HList t36) ->+    case letAs (HCons (MkT @"i35") xs36) of { LetAs (xs35 :: HList t35) ->+    case letAs (HCons (MkT @"i34") xs35) of { LetAs (xs34 :: HList t34) ->+    case letAs (HCons (MkT @"i33") xs34) of { LetAs (xs33 :: HList t33) ->+    case letAs (HCons (MkT @"i32") xs33) of { LetAs (xs32 :: HList t32) ->+    case letAs (HCons (MkT @"i31") xs32) of { LetAs (xs31 :: HList t31) ->+    case letAs (HCons (MkT @"i30") xs31) of { LetAs (xs30 :: HList t30) ->+    -- 29 .. 20+    case letAs (HCons (MkT @"i29") xs30) of { LetAs (xs29 :: HList t29) ->+    case letAs (HCons (MkT @"i28") xs29) of { LetAs (xs28 :: HList t28) ->+    case letAs (HCons (MkT @"i27") xs28) of { LetAs (xs27 :: HList t27) ->+    case letAs (HCons (MkT @"i26") xs27) of { LetAs (xs26 :: HList t26) ->+    case letAs (HCons (MkT @"i25") xs26) of { LetAs (xs25 :: HList t25) ->+    case letAs (HCons (MkT @"i24") xs25) of { LetAs (xs24 :: HList t24) ->+    case letAs (HCons (MkT @"i23") xs24) of { LetAs (xs23 :: HList t23) ->+    case letAs (HCons (MkT @"i22") xs23) of { LetAs (xs22 :: HList t22) ->+    case letAs (HCons (MkT @"i21") xs22) of { LetAs (xs21 :: HList t21) ->+    case letAs (HCons (MkT @"i20") xs21) of { LetAs (xs20 :: HList t20) ->+    -- 19 .. 10+    case letAs (HCons (MkT @"i19") xs20) of { LetAs (xs19 :: HList t19) ->+    case letAs (HCons (MkT @"i18") xs19) of { LetAs (xs18 :: HList t18) ->+    case letAs (HCons (MkT @"i17") xs18) of { LetAs (xs17 :: HList t17) ->+    case letAs (HCons (MkT @"i16") xs17) of { LetAs (xs16 :: HList t16) ->+    case letAs (HCons (MkT @"i15") xs16) of { LetAs (xs15 :: HList t15) ->+    case letAs (HCons (MkT @"i14") xs15) of { LetAs (xs14 :: HList t14) ->+    case letAs (HCons (MkT @"i13") xs14) of { LetAs (xs13 :: HList t13) ->+    case letAs (HCons (MkT @"i12") xs13) of { LetAs (xs12 :: HList t12) ->+    case letAs (HCons (MkT @"i11") xs12) of { LetAs (xs11 :: HList t11) ->+    case letAs (HCons (MkT @"i10") xs11) of { LetAs (xs10 :: HList t10) ->+    -- 09 .. 00+    case letAs (HCons (MkT @"i09") xs10) of { LetAs (xs09 :: HList t09) ->+    case letAs (HCons (MkT @"i08") xs09) of { LetAs (xs08 :: HList t08) ->+    case letAs (HCons (MkT @"i07") xs08) of { LetAs (xs07 :: HList t07) ->+    case letAs (HCons (MkT @"i06") xs07) of { LetAs (xs06 :: HList t06) ->+    case letAs (HCons (MkT @"i05") xs06) of { LetAs (xs05 :: HList t05) ->+    case letAs (HCons (MkT @"i04") xs05) of { LetAs (xs04 :: HList t04) ->+    case letAs (HCons (MkT @"i03") xs04) of { LetAs (xs03 :: HList t03) ->+    case letAs (HCons (MkT @"i02") xs03) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons (MkT @"i01") xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons (MkT @"i00") xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/HList/LetAs/LetAs100.hs view
@@ -0,0 +1,132 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAs.LetAs100 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix100++hlist :: HList Fields+hlist =+    -- 99 .. 90+    case letAs (HCons (MkT @"i99") HNil) of { LetAs (xs99 :: HList t99) ->+    case letAs (HCons (MkT @"i98") xs99) of { LetAs (xs98 :: HList t98) ->+    case letAs (HCons (MkT @"i97") xs98) of { LetAs (xs97 :: HList t97) ->+    case letAs (HCons (MkT @"i96") xs97) of { LetAs (xs96 :: HList t96) ->+    case letAs (HCons (MkT @"i95") xs96) of { LetAs (xs95 :: HList t95) ->+    case letAs (HCons (MkT @"i94") xs95) of { LetAs (xs94 :: HList t94) ->+    case letAs (HCons (MkT @"i93") xs94) of { LetAs (xs93 :: HList t93) ->+    case letAs (HCons (MkT @"i92") xs93) of { LetAs (xs92 :: HList t92) ->+    case letAs (HCons (MkT @"i91") xs92) of { LetAs (xs91 :: HList t91) ->+    case letAs (HCons (MkT @"i90") xs91) of { LetAs (xs90 :: HList t90) ->+    -- 89 .. 80+    case letAs (HCons (MkT @"i89") xs90) of { LetAs (xs89 :: HList t89) ->+    case letAs (HCons (MkT @"i88") xs89) of { LetAs (xs88 :: HList t88) ->+    case letAs (HCons (MkT @"i87") xs88) of { LetAs (xs87 :: HList t87) ->+    case letAs (HCons (MkT @"i86") xs87) of { LetAs (xs86 :: HList t86) ->+    case letAs (HCons (MkT @"i85") xs86) of { LetAs (xs85 :: HList t85) ->+    case letAs (HCons (MkT @"i84") xs85) of { LetAs (xs84 :: HList t84) ->+    case letAs (HCons (MkT @"i83") xs84) of { LetAs (xs83 :: HList t83) ->+    case letAs (HCons (MkT @"i82") xs83) of { LetAs (xs82 :: HList t82) ->+    case letAs (HCons (MkT @"i81") xs82) of { LetAs (xs81 :: HList t81) ->+    case letAs (HCons (MkT @"i80") xs81) of { LetAs (xs80 :: HList t80) ->+    -- 79 .. 70+    case letAs (HCons (MkT @"i79") xs80) of { LetAs (xs79 :: HList t79) ->+    case letAs (HCons (MkT @"i78") xs79) of { LetAs (xs78 :: HList t78) ->+    case letAs (HCons (MkT @"i77") xs78) of { LetAs (xs77 :: HList t77) ->+    case letAs (HCons (MkT @"i76") xs77) of { LetAs (xs76 :: HList t76) ->+    case letAs (HCons (MkT @"i75") xs76) of { LetAs (xs75 :: HList t75) ->+    case letAs (HCons (MkT @"i74") xs75) of { LetAs (xs74 :: HList t74) ->+    case letAs (HCons (MkT @"i73") xs74) of { LetAs (xs73 :: HList t73) ->+    case letAs (HCons (MkT @"i72") xs73) of { LetAs (xs72 :: HList t72) ->+    case letAs (HCons (MkT @"i71") xs72) of { LetAs (xs71 :: HList t71) ->+    case letAs (HCons (MkT @"i70") xs71) of { LetAs (xs70 :: HList t70) ->+    -- 69 .. 60+    case letAs (HCons (MkT @"i69") xs70) of { LetAs (xs69 :: HList t69) ->+    case letAs (HCons (MkT @"i68") xs69) of { LetAs (xs68 :: HList t68) ->+    case letAs (HCons (MkT @"i67") xs68) of { LetAs (xs67 :: HList t67) ->+    case letAs (HCons (MkT @"i66") xs67) of { LetAs (xs66 :: HList t66) ->+    case letAs (HCons (MkT @"i65") xs66) of { LetAs (xs65 :: HList t65) ->+    case letAs (HCons (MkT @"i64") xs65) of { LetAs (xs64 :: HList t64) ->+    case letAs (HCons (MkT @"i63") xs64) of { LetAs (xs63 :: HList t63) ->+    case letAs (HCons (MkT @"i62") xs63) of { LetAs (xs62 :: HList t62) ->+    case letAs (HCons (MkT @"i61") xs62) of { LetAs (xs61 :: HList t61) ->+    case letAs (HCons (MkT @"i60") xs61) of { LetAs (xs60 :: HList t60) ->+    -- 59 .. 50+    case letAs (HCons (MkT @"i59") xs60) of { LetAs (xs59 :: HList t59) ->+    case letAs (HCons (MkT @"i58") xs59) of { LetAs (xs58 :: HList t58) ->+    case letAs (HCons (MkT @"i57") xs58) of { LetAs (xs57 :: HList t57) ->+    case letAs (HCons (MkT @"i56") xs57) of { LetAs (xs56 :: HList t56) ->+    case letAs (HCons (MkT @"i55") xs56) of { LetAs (xs55 :: HList t55) ->+    case letAs (HCons (MkT @"i54") xs55) of { LetAs (xs54 :: HList t54) ->+    case letAs (HCons (MkT @"i53") xs54) of { LetAs (xs53 :: HList t53) ->+    case letAs (HCons (MkT @"i52") xs53) of { LetAs (xs52 :: HList t52) ->+    case letAs (HCons (MkT @"i51") xs52) of { LetAs (xs51 :: HList t51) ->+    case letAs (HCons (MkT @"i50") xs51) of { LetAs (xs50 :: HList t50) ->+    -- 49 .. 40+    case letAs (HCons (MkT @"i49") xs50) of { LetAs (xs49 :: HList t49) ->+    case letAs (HCons (MkT @"i48") xs49) of { LetAs (xs48 :: HList t48) ->+    case letAs (HCons (MkT @"i47") xs48) of { LetAs (xs47 :: HList t47) ->+    case letAs (HCons (MkT @"i46") xs47) of { LetAs (xs46 :: HList t46) ->+    case letAs (HCons (MkT @"i45") xs46) of { LetAs (xs45 :: HList t45) ->+    case letAs (HCons (MkT @"i44") xs45) of { LetAs (xs44 :: HList t44) ->+    case letAs (HCons (MkT @"i43") xs44) of { LetAs (xs43 :: HList t43) ->+    case letAs (HCons (MkT @"i42") xs43) of { LetAs (xs42 :: HList t42) ->+    case letAs (HCons (MkT @"i41") xs42) of { LetAs (xs41 :: HList t41) ->+    case letAs (HCons (MkT @"i40") xs41) of { LetAs (xs40 :: HList t40) ->+    -- 39 .. 30+    case letAs (HCons (MkT @"i39") xs40) of { LetAs (xs39 :: HList t39) ->+    case letAs (HCons (MkT @"i38") xs39) of { LetAs (xs38 :: HList t38) ->+    case letAs (HCons (MkT @"i37") xs38) of { LetAs (xs37 :: HList t37) ->+    case letAs (HCons (MkT @"i36") xs37) of { LetAs (xs36 :: HList t36) ->+    case letAs (HCons (MkT @"i35") xs36) of { LetAs (xs35 :: HList t35) ->+    case letAs (HCons (MkT @"i34") xs35) of { LetAs (xs34 :: HList t34) ->+    case letAs (HCons (MkT @"i33") xs34) of { LetAs (xs33 :: HList t33) ->+    case letAs (HCons (MkT @"i32") xs33) of { LetAs (xs32 :: HList t32) ->+    case letAs (HCons (MkT @"i31") xs32) of { LetAs (xs31 :: HList t31) ->+    case letAs (HCons (MkT @"i30") xs31) of { LetAs (xs30 :: HList t30) ->+    -- 29 .. 20+    case letAs (HCons (MkT @"i29") xs30) of { LetAs (xs29 :: HList t29) ->+    case letAs (HCons (MkT @"i28") xs29) of { LetAs (xs28 :: HList t28) ->+    case letAs (HCons (MkT @"i27") xs28) of { LetAs (xs27 :: HList t27) ->+    case letAs (HCons (MkT @"i26") xs27) of { LetAs (xs26 :: HList t26) ->+    case letAs (HCons (MkT @"i25") xs26) of { LetAs (xs25 :: HList t25) ->+    case letAs (HCons (MkT @"i24") xs25) of { LetAs (xs24 :: HList t24) ->+    case letAs (HCons (MkT @"i23") xs24) of { LetAs (xs23 :: HList t23) ->+    case letAs (HCons (MkT @"i22") xs23) of { LetAs (xs22 :: HList t22) ->+    case letAs (HCons (MkT @"i21") xs22) of { LetAs (xs21 :: HList t21) ->+    case letAs (HCons (MkT @"i20") xs21) of { LetAs (xs20 :: HList t20) ->+    -- 19 .. 10+    case letAs (HCons (MkT @"i19") xs20) of { LetAs (xs19 :: HList t19) ->+    case letAs (HCons (MkT @"i18") xs19) of { LetAs (xs18 :: HList t18) ->+    case letAs (HCons (MkT @"i17") xs18) of { LetAs (xs17 :: HList t17) ->+    case letAs (HCons (MkT @"i16") xs17) of { LetAs (xs16 :: HList t16) ->+    case letAs (HCons (MkT @"i15") xs16) of { LetAs (xs15 :: HList t15) ->+    case letAs (HCons (MkT @"i14") xs15) of { LetAs (xs14 :: HList t14) ->+    case letAs (HCons (MkT @"i13") xs14) of { LetAs (xs13 :: HList t13) ->+    case letAs (HCons (MkT @"i12") xs13) of { LetAs (xs12 :: HList t12) ->+    case letAs (HCons (MkT @"i11") xs12) of { LetAs (xs11 :: HList t11) ->+    case letAs (HCons (MkT @"i10") xs11) of { LetAs (xs10 :: HList t10) ->+    -- 09 .. 00+    case letAs (HCons (MkT @"i09") xs10) of { LetAs (xs09 :: HList t09) ->+    case letAs (HCons (MkT @"i08") xs09) of { LetAs (xs08 :: HList t08) ->+    case letAs (HCons (MkT @"i07") xs08) of { LetAs (xs07 :: HList t07) ->+    case letAs (HCons (MkT @"i06") xs07) of { LetAs (xs06 :: HList t06) ->+    case letAs (HCons (MkT @"i05") xs06) of { LetAs (xs05 :: HList t05) ->+    case letAs (HCons (MkT @"i04") xs05) of { LetAs (xs04 :: HList t04) ->+    case letAs (HCons (MkT @"i03") xs04) of { LetAs (xs03 :: HList t03) ->+    case letAs (HCons (MkT @"i02") xs03) of { LetAs (xs02 :: HList t02) ->+    case letAs (HCons (MkT @"i01") xs02) of { LetAs (xs01 :: HList t01) ->+    case letAs (HCons (MkT @"i00") xs01) of { LetAs (xs00 :: HList t00) ->+      castEqual xs00+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}+    }}}}}}}}}}
+ test/Test/Size/HList/LetAsCPS/LetAsCPS010.hs view
@@ -0,0 +1,23 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAsCPS.LetAsCPS010 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix010++hlist :: HList Fields+hlist = letT' (Proxy @Fields) $ \(_ :: Proxy r) -> castEqual $+    -- 09 .. 00+    letAs' @(HList r) (HCons (MkT @"i09") HNil) $ \(xs09 :: HList t09) ->+    letAs' @(HList r) (HCons (MkT @"i08") xs09) $ \(xs08 :: HList t08) ->+    letAs' @(HList r) (HCons (MkT @"i07") xs08) $ \(xs07 :: HList t07) ->+    letAs' @(HList r) (HCons (MkT @"i06") xs07) $ \(xs06 :: HList t06) ->+    letAs' @(HList r) (HCons (MkT @"i05") xs06) $ \(xs05 :: HList t05) ->+    letAs' @(HList r) (HCons (MkT @"i04") xs05) $ \(xs04 :: HList t04) ->+    letAs' @(HList r) (HCons (MkT @"i03") xs04) $ \(xs03 :: HList t03) ->+    letAs' @(HList r) (HCons (MkT @"i02") xs03) $ \(xs02 :: HList t02) ->+    letAs' @(HList r) (HCons (MkT @"i01") xs02) $ \(xs01 :: HList t01) ->+    letAs' @(HList r) (HCons (MkT @"i00") xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00
+ test/Test/Size/HList/LetAsCPS/LetAsCPS020.hs view
@@ -0,0 +1,34 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAsCPS.LetAsCPS020 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix020++hlist :: HList Fields+hlist = letT' (Proxy @Fields) $ \(_ :: Proxy r) -> castEqual $+    -- 19 .. 10+    letAs' @(HList r) (HCons (MkT @"i19") HNil) $ \(xs19 :: HList t19) ->+    letAs' @(HList r) (HCons (MkT @"i18") xs19) $ \(xs18 :: HList t18) ->+    letAs' @(HList r) (HCons (MkT @"i17") xs18) $ \(xs17 :: HList t17) ->+    letAs' @(HList r) (HCons (MkT @"i16") xs17) $ \(xs16 :: HList t16) ->+    letAs' @(HList r) (HCons (MkT @"i15") xs16) $ \(xs15 :: HList t15) ->+    letAs' @(HList r) (HCons (MkT @"i14") xs15) $ \(xs14 :: HList t14) ->+    letAs' @(HList r) (HCons (MkT @"i13") xs14) $ \(xs13 :: HList t13) ->+    letAs' @(HList r) (HCons (MkT @"i12") xs13) $ \(xs12 :: HList t12) ->+    letAs' @(HList r) (HCons (MkT @"i11") xs12) $ \(xs11 :: HList t11) ->+    letAs' @(HList r) (HCons (MkT @"i10") xs11) $ \(xs10 :: HList t10) ->+    -- 09 .. 00+    letAs' @(HList r) (HCons (MkT @"i09") xs10) $ \(xs09 :: HList t09) ->+    letAs' @(HList r) (HCons (MkT @"i08") xs09) $ \(xs08 :: HList t08) ->+    letAs' @(HList r) (HCons (MkT @"i07") xs08) $ \(xs07 :: HList t07) ->+    letAs' @(HList r) (HCons (MkT @"i06") xs07) $ \(xs06 :: HList t06) ->+    letAs' @(HList r) (HCons (MkT @"i05") xs06) $ \(xs05 :: HList t05) ->+    letAs' @(HList r) (HCons (MkT @"i04") xs05) $ \(xs04 :: HList t04) ->+    letAs' @(HList r) (HCons (MkT @"i03") xs04) $ \(xs03 :: HList t03) ->+    letAs' @(HList r) (HCons (MkT @"i02") xs03) $ \(xs02 :: HList t02) ->+    letAs' @(HList r) (HCons (MkT @"i01") xs02) $ \(xs01 :: HList t01) ->+    letAs' @(HList r) (HCons (MkT @"i00") xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00
+ test/Test/Size/HList/LetAsCPS/LetAsCPS030.hs view
@@ -0,0 +1,45 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAsCPS.LetAsCPS030 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix030++hlist :: HList Fields+hlist = letT' (Proxy @Fields) $ \(_ :: Proxy r) -> castEqual $+    -- 29 .. 20+    letAs' @(HList r) (HCons (MkT @"i29") HNil) $ \(xs29 :: HList t29) ->+    letAs' @(HList r) (HCons (MkT @"i28") xs29) $ \(xs28 :: HList t28) ->+    letAs' @(HList r) (HCons (MkT @"i27") xs28) $ \(xs27 :: HList t27) ->+    letAs' @(HList r) (HCons (MkT @"i26") xs27) $ \(xs26 :: HList t26) ->+    letAs' @(HList r) (HCons (MkT @"i25") xs26) $ \(xs25 :: HList t25) ->+    letAs' @(HList r) (HCons (MkT @"i24") xs25) $ \(xs24 :: HList t24) ->+    letAs' @(HList r) (HCons (MkT @"i23") xs24) $ \(xs23 :: HList t23) ->+    letAs' @(HList r) (HCons (MkT @"i22") xs23) $ \(xs22 :: HList t22) ->+    letAs' @(HList r) (HCons (MkT @"i21") xs22) $ \(xs21 :: HList t21) ->+    letAs' @(HList r) (HCons (MkT @"i20") xs21) $ \(xs20 :: HList t20) ->+    -- 19 .. 10+    letAs' @(HList r) (HCons (MkT @"i19") xs20) $ \(xs19 :: HList t19) ->+    letAs' @(HList r) (HCons (MkT @"i18") xs19) $ \(xs18 :: HList t18) ->+    letAs' @(HList r) (HCons (MkT @"i17") xs18) $ \(xs17 :: HList t17) ->+    letAs' @(HList r) (HCons (MkT @"i16") xs17) $ \(xs16 :: HList t16) ->+    letAs' @(HList r) (HCons (MkT @"i15") xs16) $ \(xs15 :: HList t15) ->+    letAs' @(HList r) (HCons (MkT @"i14") xs15) $ \(xs14 :: HList t14) ->+    letAs' @(HList r) (HCons (MkT @"i13") xs14) $ \(xs13 :: HList t13) ->+    letAs' @(HList r) (HCons (MkT @"i12") xs13) $ \(xs12 :: HList t12) ->+    letAs' @(HList r) (HCons (MkT @"i11") xs12) $ \(xs11 :: HList t11) ->+    letAs' @(HList r) (HCons (MkT @"i10") xs11) $ \(xs10 :: HList t10) ->+    -- 09 .. 00+    letAs' @(HList r) (HCons (MkT @"i09") xs10) $ \(xs09 :: HList t09) ->+    letAs' @(HList r) (HCons (MkT @"i08") xs09) $ \(xs08 :: HList t08) ->+    letAs' @(HList r) (HCons (MkT @"i07") xs08) $ \(xs07 :: HList t07) ->+    letAs' @(HList r) (HCons (MkT @"i06") xs07) $ \(xs06 :: HList t06) ->+    letAs' @(HList r) (HCons (MkT @"i05") xs06) $ \(xs05 :: HList t05) ->+    letAs' @(HList r) (HCons (MkT @"i04") xs05) $ \(xs04 :: HList t04) ->+    letAs' @(HList r) (HCons (MkT @"i03") xs04) $ \(xs03 :: HList t03) ->+    letAs' @(HList r) (HCons (MkT @"i02") xs03) $ \(xs02 :: HList t02) ->+    letAs' @(HList r) (HCons (MkT @"i01") xs02) $ \(xs01 :: HList t01) ->+    letAs' @(HList r) (HCons (MkT @"i00") xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00
+ test/Test/Size/HList/LetAsCPS/LetAsCPS040.hs view
@@ -0,0 +1,56 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAsCPS.LetAsCPS040 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix040++hlist :: HList Fields+hlist = letT' (Proxy @Fields) $ \(_ :: Proxy r) -> castEqual $+    -- 39 .. 30+    letAs' @(HList r) (HCons (MkT @"i39") HNil) $ \(xs39 :: HList t39) ->+    letAs' @(HList r) (HCons (MkT @"i38") xs39) $ \(xs38 :: HList t38) ->+    letAs' @(HList r) (HCons (MkT @"i37") xs38) $ \(xs37 :: HList t37) ->+    letAs' @(HList r) (HCons (MkT @"i36") xs37) $ \(xs36 :: HList t36) ->+    letAs' @(HList r) (HCons (MkT @"i35") xs36) $ \(xs35 :: HList t35) ->+    letAs' @(HList r) (HCons (MkT @"i34") xs35) $ \(xs34 :: HList t34) ->+    letAs' @(HList r) (HCons (MkT @"i33") xs34) $ \(xs33 :: HList t33) ->+    letAs' @(HList r) (HCons (MkT @"i32") xs33) $ \(xs32 :: HList t32) ->+    letAs' @(HList r) (HCons (MkT @"i31") xs32) $ \(xs31 :: HList t31) ->+    letAs' @(HList r) (HCons (MkT @"i30") xs31) $ \(xs30 :: HList t30) ->+    -- 29 .. 20+    letAs' @(HList r) (HCons (MkT @"i29") xs30) $ \(xs29 :: HList t29) ->+    letAs' @(HList r) (HCons (MkT @"i28") xs29) $ \(xs28 :: HList t28) ->+    letAs' @(HList r) (HCons (MkT @"i27") xs28) $ \(xs27 :: HList t27) ->+    letAs' @(HList r) (HCons (MkT @"i26") xs27) $ \(xs26 :: HList t26) ->+    letAs' @(HList r) (HCons (MkT @"i25") xs26) $ \(xs25 :: HList t25) ->+    letAs' @(HList r) (HCons (MkT @"i24") xs25) $ \(xs24 :: HList t24) ->+    letAs' @(HList r) (HCons (MkT @"i23") xs24) $ \(xs23 :: HList t23) ->+    letAs' @(HList r) (HCons (MkT @"i22") xs23) $ \(xs22 :: HList t22) ->+    letAs' @(HList r) (HCons (MkT @"i21") xs22) $ \(xs21 :: HList t21) ->+    letAs' @(HList r) (HCons (MkT @"i20") xs21) $ \(xs20 :: HList t20) ->+    -- 19 .. 10+    letAs' @(HList r) (HCons (MkT @"i19") xs20) $ \(xs19 :: HList t19) ->+    letAs' @(HList r) (HCons (MkT @"i18") xs19) $ \(xs18 :: HList t18) ->+    letAs' @(HList r) (HCons (MkT @"i17") xs18) $ \(xs17 :: HList t17) ->+    letAs' @(HList r) (HCons (MkT @"i16") xs17) $ \(xs16 :: HList t16) ->+    letAs' @(HList r) (HCons (MkT @"i15") xs16) $ \(xs15 :: HList t15) ->+    letAs' @(HList r) (HCons (MkT @"i14") xs15) $ \(xs14 :: HList t14) ->+    letAs' @(HList r) (HCons (MkT @"i13") xs14) $ \(xs13 :: HList t13) ->+    letAs' @(HList r) (HCons (MkT @"i12") xs13) $ \(xs12 :: HList t12) ->+    letAs' @(HList r) (HCons (MkT @"i11") xs12) $ \(xs11 :: HList t11) ->+    letAs' @(HList r) (HCons (MkT @"i10") xs11) $ \(xs10 :: HList t10) ->+    -- 09 .. 00+    letAs' @(HList r) (HCons (MkT @"i09") xs10) $ \(xs09 :: HList t09) ->+    letAs' @(HList r) (HCons (MkT @"i08") xs09) $ \(xs08 :: HList t08) ->+    letAs' @(HList r) (HCons (MkT @"i07") xs08) $ \(xs07 :: HList t07) ->+    letAs' @(HList r) (HCons (MkT @"i06") xs07) $ \(xs06 :: HList t06) ->+    letAs' @(HList r) (HCons (MkT @"i05") xs06) $ \(xs05 :: HList t05) ->+    letAs' @(HList r) (HCons (MkT @"i04") xs05) $ \(xs04 :: HList t04) ->+    letAs' @(HList r) (HCons (MkT @"i03") xs04) $ \(xs03 :: HList t03) ->+    letAs' @(HList r) (HCons (MkT @"i02") xs03) $ \(xs02 :: HList t02) ->+    letAs' @(HList r) (HCons (MkT @"i01") xs02) $ \(xs01 :: HList t01) ->+    letAs' @(HList r) (HCons (MkT @"i00") xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00
+ test/Test/Size/HList/LetAsCPS/LetAsCPS050.hs view
@@ -0,0 +1,67 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAsCPS.LetAsCPS050 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix050++hlist :: HList Fields+hlist = letT' (Proxy @Fields) $ \(_ :: Proxy r) -> castEqual $+    -- 49 .. 40+    letAs' @(HList r) (HCons (MkT @"i49") HNil) $ \(xs49 :: HList t49) ->+    letAs' @(HList r) (HCons (MkT @"i48") xs49) $ \(xs48 :: HList t48) ->+    letAs' @(HList r) (HCons (MkT @"i47") xs48) $ \(xs47 :: HList t47) ->+    letAs' @(HList r) (HCons (MkT @"i46") xs47) $ \(xs46 :: HList t46) ->+    letAs' @(HList r) (HCons (MkT @"i45") xs46) $ \(xs45 :: HList t45) ->+    letAs' @(HList r) (HCons (MkT @"i44") xs45) $ \(xs44 :: HList t44) ->+    letAs' @(HList r) (HCons (MkT @"i43") xs44) $ \(xs43 :: HList t43) ->+    letAs' @(HList r) (HCons (MkT @"i42") xs43) $ \(xs42 :: HList t42) ->+    letAs' @(HList r) (HCons (MkT @"i41") xs42) $ \(xs41 :: HList t41) ->+    letAs' @(HList r) (HCons (MkT @"i40") xs41) $ \(xs40 :: HList t40) ->+    -- 39 .. 30+    letAs' @(HList r) (HCons (MkT @"i39") xs40) $ \(xs39 :: HList t39) ->+    letAs' @(HList r) (HCons (MkT @"i38") xs39) $ \(xs38 :: HList t38) ->+    letAs' @(HList r) (HCons (MkT @"i37") xs38) $ \(xs37 :: HList t37) ->+    letAs' @(HList r) (HCons (MkT @"i36") xs37) $ \(xs36 :: HList t36) ->+    letAs' @(HList r) (HCons (MkT @"i35") xs36) $ \(xs35 :: HList t35) ->+    letAs' @(HList r) (HCons (MkT @"i34") xs35) $ \(xs34 :: HList t34) ->+    letAs' @(HList r) (HCons (MkT @"i33") xs34) $ \(xs33 :: HList t33) ->+    letAs' @(HList r) (HCons (MkT @"i32") xs33) $ \(xs32 :: HList t32) ->+    letAs' @(HList r) (HCons (MkT @"i31") xs32) $ \(xs31 :: HList t31) ->+    letAs' @(HList r) (HCons (MkT @"i30") xs31) $ \(xs30 :: HList t30) ->+    -- 29 .. 20+    letAs' @(HList r) (HCons (MkT @"i29") xs30) $ \(xs29 :: HList t29) ->+    letAs' @(HList r) (HCons (MkT @"i28") xs29) $ \(xs28 :: HList t28) ->+    letAs' @(HList r) (HCons (MkT @"i27") xs28) $ \(xs27 :: HList t27) ->+    letAs' @(HList r) (HCons (MkT @"i26") xs27) $ \(xs26 :: HList t26) ->+    letAs' @(HList r) (HCons (MkT @"i25") xs26) $ \(xs25 :: HList t25) ->+    letAs' @(HList r) (HCons (MkT @"i24") xs25) $ \(xs24 :: HList t24) ->+    letAs' @(HList r) (HCons (MkT @"i23") xs24) $ \(xs23 :: HList t23) ->+    letAs' @(HList r) (HCons (MkT @"i22") xs23) $ \(xs22 :: HList t22) ->+    letAs' @(HList r) (HCons (MkT @"i21") xs22) $ \(xs21 :: HList t21) ->+    letAs' @(HList r) (HCons (MkT @"i20") xs21) $ \(xs20 :: HList t20) ->+    -- 19 .. 10+    letAs' @(HList r) (HCons (MkT @"i19") xs20) $ \(xs19 :: HList t19) ->+    letAs' @(HList r) (HCons (MkT @"i18") xs19) $ \(xs18 :: HList t18) ->+    letAs' @(HList r) (HCons (MkT @"i17") xs18) $ \(xs17 :: HList t17) ->+    letAs' @(HList r) (HCons (MkT @"i16") xs17) $ \(xs16 :: HList t16) ->+    letAs' @(HList r) (HCons (MkT @"i15") xs16) $ \(xs15 :: HList t15) ->+    letAs' @(HList r) (HCons (MkT @"i14") xs15) $ \(xs14 :: HList t14) ->+    letAs' @(HList r) (HCons (MkT @"i13") xs14) $ \(xs13 :: HList t13) ->+    letAs' @(HList r) (HCons (MkT @"i12") xs13) $ \(xs12 :: HList t12) ->+    letAs' @(HList r) (HCons (MkT @"i11") xs12) $ \(xs11 :: HList t11) ->+    letAs' @(HList r) (HCons (MkT @"i10") xs11) $ \(xs10 :: HList t10) ->+    -- 09 .. 00+    letAs' @(HList r) (HCons (MkT @"i09") xs10) $ \(xs09 :: HList t09) ->+    letAs' @(HList r) (HCons (MkT @"i08") xs09) $ \(xs08 :: HList t08) ->+    letAs' @(HList r) (HCons (MkT @"i07") xs08) $ \(xs07 :: HList t07) ->+    letAs' @(HList r) (HCons (MkT @"i06") xs07) $ \(xs06 :: HList t06) ->+    letAs' @(HList r) (HCons (MkT @"i05") xs06) $ \(xs05 :: HList t05) ->+    letAs' @(HList r) (HCons (MkT @"i04") xs05) $ \(xs04 :: HList t04) ->+    letAs' @(HList r) (HCons (MkT @"i03") xs04) $ \(xs03 :: HList t03) ->+    letAs' @(HList r) (HCons (MkT @"i02") xs03) $ \(xs02 :: HList t02) ->+    letAs' @(HList r) (HCons (MkT @"i01") xs02) $ \(xs01 :: HList t01) ->+    letAs' @(HList r) (HCons (MkT @"i00") xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00
+ test/Test/Size/HList/LetAsCPS/LetAsCPS060.hs view
@@ -0,0 +1,78 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAsCPS.LetAsCPS060 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix060++hlist :: HList Fields+hlist = letT' (Proxy @Fields) $ \(_ :: Proxy r) -> castEqual $+    -- 59 .. 50+    letAs' @(HList r) (HCons (MkT @"i59") HNil) $ \(xs59 :: HList t59) ->+    letAs' @(HList r) (HCons (MkT @"i58") xs59) $ \(xs58 :: HList t58) ->+    letAs' @(HList r) (HCons (MkT @"i57") xs58) $ \(xs57 :: HList t57) ->+    letAs' @(HList r) (HCons (MkT @"i56") xs57) $ \(xs56 :: HList t56) ->+    letAs' @(HList r) (HCons (MkT @"i55") xs56) $ \(xs55 :: HList t55) ->+    letAs' @(HList r) (HCons (MkT @"i54") xs55) $ \(xs54 :: HList t54) ->+    letAs' @(HList r) (HCons (MkT @"i53") xs54) $ \(xs53 :: HList t53) ->+    letAs' @(HList r) (HCons (MkT @"i52") xs53) $ \(xs52 :: HList t52) ->+    letAs' @(HList r) (HCons (MkT @"i51") xs52) $ \(xs51 :: HList t51) ->+    letAs' @(HList r) (HCons (MkT @"i50") xs51) $ \(xs50 :: HList t50) ->+    -- 49 .. 40+    letAs' @(HList r) (HCons (MkT @"i49") xs50) $ \(xs49 :: HList t49) ->+    letAs' @(HList r) (HCons (MkT @"i48") xs49) $ \(xs48 :: HList t48) ->+    letAs' @(HList r) (HCons (MkT @"i47") xs48) $ \(xs47 :: HList t47) ->+    letAs' @(HList r) (HCons (MkT @"i46") xs47) $ \(xs46 :: HList t46) ->+    letAs' @(HList r) (HCons (MkT @"i45") xs46) $ \(xs45 :: HList t45) ->+    letAs' @(HList r) (HCons (MkT @"i44") xs45) $ \(xs44 :: HList t44) ->+    letAs' @(HList r) (HCons (MkT @"i43") xs44) $ \(xs43 :: HList t43) ->+    letAs' @(HList r) (HCons (MkT @"i42") xs43) $ \(xs42 :: HList t42) ->+    letAs' @(HList r) (HCons (MkT @"i41") xs42) $ \(xs41 :: HList t41) ->+    letAs' @(HList r) (HCons (MkT @"i40") xs41) $ \(xs40 :: HList t40) ->+    -- 39 .. 30+    letAs' @(HList r) (HCons (MkT @"i39") xs40) $ \(xs39 :: HList t39) ->+    letAs' @(HList r) (HCons (MkT @"i38") xs39) $ \(xs38 :: HList t38) ->+    letAs' @(HList r) (HCons (MkT @"i37") xs38) $ \(xs37 :: HList t37) ->+    letAs' @(HList r) (HCons (MkT @"i36") xs37) $ \(xs36 :: HList t36) ->+    letAs' @(HList r) (HCons (MkT @"i35") xs36) $ \(xs35 :: HList t35) ->+    letAs' @(HList r) (HCons (MkT @"i34") xs35) $ \(xs34 :: HList t34) ->+    letAs' @(HList r) (HCons (MkT @"i33") xs34) $ \(xs33 :: HList t33) ->+    letAs' @(HList r) (HCons (MkT @"i32") xs33) $ \(xs32 :: HList t32) ->+    letAs' @(HList r) (HCons (MkT @"i31") xs32) $ \(xs31 :: HList t31) ->+    letAs' @(HList r) (HCons (MkT @"i30") xs31) $ \(xs30 :: HList t30) ->+    -- 29 .. 20+    letAs' @(HList r) (HCons (MkT @"i29") xs30) $ \(xs29 :: HList t29) ->+    letAs' @(HList r) (HCons (MkT @"i28") xs29) $ \(xs28 :: HList t28) ->+    letAs' @(HList r) (HCons (MkT @"i27") xs28) $ \(xs27 :: HList t27) ->+    letAs' @(HList r) (HCons (MkT @"i26") xs27) $ \(xs26 :: HList t26) ->+    letAs' @(HList r) (HCons (MkT @"i25") xs26) $ \(xs25 :: HList t25) ->+    letAs' @(HList r) (HCons (MkT @"i24") xs25) $ \(xs24 :: HList t24) ->+    letAs' @(HList r) (HCons (MkT @"i23") xs24) $ \(xs23 :: HList t23) ->+    letAs' @(HList r) (HCons (MkT @"i22") xs23) $ \(xs22 :: HList t22) ->+    letAs' @(HList r) (HCons (MkT @"i21") xs22) $ \(xs21 :: HList t21) ->+    letAs' @(HList r) (HCons (MkT @"i20") xs21) $ \(xs20 :: HList t20) ->+    -- 19 .. 10+    letAs' @(HList r) (HCons (MkT @"i19") xs20) $ \(xs19 :: HList t19) ->+    letAs' @(HList r) (HCons (MkT @"i18") xs19) $ \(xs18 :: HList t18) ->+    letAs' @(HList r) (HCons (MkT @"i17") xs18) $ \(xs17 :: HList t17) ->+    letAs' @(HList r) (HCons (MkT @"i16") xs17) $ \(xs16 :: HList t16) ->+    letAs' @(HList r) (HCons (MkT @"i15") xs16) $ \(xs15 :: HList t15) ->+    letAs' @(HList r) (HCons (MkT @"i14") xs15) $ \(xs14 :: HList t14) ->+    letAs' @(HList r) (HCons (MkT @"i13") xs14) $ \(xs13 :: HList t13) ->+    letAs' @(HList r) (HCons (MkT @"i12") xs13) $ \(xs12 :: HList t12) ->+    letAs' @(HList r) (HCons (MkT @"i11") xs12) $ \(xs11 :: HList t11) ->+    letAs' @(HList r) (HCons (MkT @"i10") xs11) $ \(xs10 :: HList t10) ->+    -- 09 .. 00+    letAs' @(HList r) (HCons (MkT @"i09") xs10) $ \(xs09 :: HList t09) ->+    letAs' @(HList r) (HCons (MkT @"i08") xs09) $ \(xs08 :: HList t08) ->+    letAs' @(HList r) (HCons (MkT @"i07") xs08) $ \(xs07 :: HList t07) ->+    letAs' @(HList r) (HCons (MkT @"i06") xs07) $ \(xs06 :: HList t06) ->+    letAs' @(HList r) (HCons (MkT @"i05") xs06) $ \(xs05 :: HList t05) ->+    letAs' @(HList r) (HCons (MkT @"i04") xs05) $ \(xs04 :: HList t04) ->+    letAs' @(HList r) (HCons (MkT @"i03") xs04) $ \(xs03 :: HList t03) ->+    letAs' @(HList r) (HCons (MkT @"i02") xs03) $ \(xs02 :: HList t02) ->+    letAs' @(HList r) (HCons (MkT @"i01") xs02) $ \(xs01 :: HList t01) ->+    letAs' @(HList r) (HCons (MkT @"i00") xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00
+ test/Test/Size/HList/LetAsCPS/LetAsCPS070.hs view
@@ -0,0 +1,89 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAsCPS.LetAsCPS070 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix070++hlist :: HList Fields+hlist = letT' (Proxy @Fields) $ \(_ :: Proxy r) -> castEqual $+    -- 69 .. 60+    letAs' @(HList r) (HCons (MkT @"i69") HNil) $ \(xs69 :: HList t69) ->+    letAs' @(HList r) (HCons (MkT @"i68") xs69) $ \(xs68 :: HList t68) ->+    letAs' @(HList r) (HCons (MkT @"i67") xs68) $ \(xs67 :: HList t67) ->+    letAs' @(HList r) (HCons (MkT @"i66") xs67) $ \(xs66 :: HList t66) ->+    letAs' @(HList r) (HCons (MkT @"i65") xs66) $ \(xs65 :: HList t65) ->+    letAs' @(HList r) (HCons (MkT @"i64") xs65) $ \(xs64 :: HList t64) ->+    letAs' @(HList r) (HCons (MkT @"i63") xs64) $ \(xs63 :: HList t63) ->+    letAs' @(HList r) (HCons (MkT @"i62") xs63) $ \(xs62 :: HList t62) ->+    letAs' @(HList r) (HCons (MkT @"i61") xs62) $ \(xs61 :: HList t61) ->+    letAs' @(HList r) (HCons (MkT @"i60") xs61) $ \(xs60 :: HList t60) ->+    -- 59 .. 50+    letAs' @(HList r) (HCons (MkT @"i59") xs60) $ \(xs59 :: HList t59) ->+    letAs' @(HList r) (HCons (MkT @"i58") xs59) $ \(xs58 :: HList t58) ->+    letAs' @(HList r) (HCons (MkT @"i57") xs58) $ \(xs57 :: HList t57) ->+    letAs' @(HList r) (HCons (MkT @"i56") xs57) $ \(xs56 :: HList t56) ->+    letAs' @(HList r) (HCons (MkT @"i55") xs56) $ \(xs55 :: HList t55) ->+    letAs' @(HList r) (HCons (MkT @"i54") xs55) $ \(xs54 :: HList t54) ->+    letAs' @(HList r) (HCons (MkT @"i53") xs54) $ \(xs53 :: HList t53) ->+    letAs' @(HList r) (HCons (MkT @"i52") xs53) $ \(xs52 :: HList t52) ->+    letAs' @(HList r) (HCons (MkT @"i51") xs52) $ \(xs51 :: HList t51) ->+    letAs' @(HList r) (HCons (MkT @"i50") xs51) $ \(xs50 :: HList t50) ->+    -- 49 .. 40+    letAs' @(HList r) (HCons (MkT @"i49") xs50) $ \(xs49 :: HList t49) ->+    letAs' @(HList r) (HCons (MkT @"i48") xs49) $ \(xs48 :: HList t48) ->+    letAs' @(HList r) (HCons (MkT @"i47") xs48) $ \(xs47 :: HList t47) ->+    letAs' @(HList r) (HCons (MkT @"i46") xs47) $ \(xs46 :: HList t46) ->+    letAs' @(HList r) (HCons (MkT @"i45") xs46) $ \(xs45 :: HList t45) ->+    letAs' @(HList r) (HCons (MkT @"i44") xs45) $ \(xs44 :: HList t44) ->+    letAs' @(HList r) (HCons (MkT @"i43") xs44) $ \(xs43 :: HList t43) ->+    letAs' @(HList r) (HCons (MkT @"i42") xs43) $ \(xs42 :: HList t42) ->+    letAs' @(HList r) (HCons (MkT @"i41") xs42) $ \(xs41 :: HList t41) ->+    letAs' @(HList r) (HCons (MkT @"i40") xs41) $ \(xs40 :: HList t40) ->+    -- 39 .. 30+    letAs' @(HList r) (HCons (MkT @"i39") xs40) $ \(xs39 :: HList t39) ->+    letAs' @(HList r) (HCons (MkT @"i38") xs39) $ \(xs38 :: HList t38) ->+    letAs' @(HList r) (HCons (MkT @"i37") xs38) $ \(xs37 :: HList t37) ->+    letAs' @(HList r) (HCons (MkT @"i36") xs37) $ \(xs36 :: HList t36) ->+    letAs' @(HList r) (HCons (MkT @"i35") xs36) $ \(xs35 :: HList t35) ->+    letAs' @(HList r) (HCons (MkT @"i34") xs35) $ \(xs34 :: HList t34) ->+    letAs' @(HList r) (HCons (MkT @"i33") xs34) $ \(xs33 :: HList t33) ->+    letAs' @(HList r) (HCons (MkT @"i32") xs33) $ \(xs32 :: HList t32) ->+    letAs' @(HList r) (HCons (MkT @"i31") xs32) $ \(xs31 :: HList t31) ->+    letAs' @(HList r) (HCons (MkT @"i30") xs31) $ \(xs30 :: HList t30) ->+    -- 29 .. 20+    letAs' @(HList r) (HCons (MkT @"i29") xs30) $ \(xs29 :: HList t29) ->+    letAs' @(HList r) (HCons (MkT @"i28") xs29) $ \(xs28 :: HList t28) ->+    letAs' @(HList r) (HCons (MkT @"i27") xs28) $ \(xs27 :: HList t27) ->+    letAs' @(HList r) (HCons (MkT @"i26") xs27) $ \(xs26 :: HList t26) ->+    letAs' @(HList r) (HCons (MkT @"i25") xs26) $ \(xs25 :: HList t25) ->+    letAs' @(HList r) (HCons (MkT @"i24") xs25) $ \(xs24 :: HList t24) ->+    letAs' @(HList r) (HCons (MkT @"i23") xs24) $ \(xs23 :: HList t23) ->+    letAs' @(HList r) (HCons (MkT @"i22") xs23) $ \(xs22 :: HList t22) ->+    letAs' @(HList r) (HCons (MkT @"i21") xs22) $ \(xs21 :: HList t21) ->+    letAs' @(HList r) (HCons (MkT @"i20") xs21) $ \(xs20 :: HList t20) ->+    -- 19 .. 10+    letAs' @(HList r) (HCons (MkT @"i19") xs20) $ \(xs19 :: HList t19) ->+    letAs' @(HList r) (HCons (MkT @"i18") xs19) $ \(xs18 :: HList t18) ->+    letAs' @(HList r) (HCons (MkT @"i17") xs18) $ \(xs17 :: HList t17) ->+    letAs' @(HList r) (HCons (MkT @"i16") xs17) $ \(xs16 :: HList t16) ->+    letAs' @(HList r) (HCons (MkT @"i15") xs16) $ \(xs15 :: HList t15) ->+    letAs' @(HList r) (HCons (MkT @"i14") xs15) $ \(xs14 :: HList t14) ->+    letAs' @(HList r) (HCons (MkT @"i13") xs14) $ \(xs13 :: HList t13) ->+    letAs' @(HList r) (HCons (MkT @"i12") xs13) $ \(xs12 :: HList t12) ->+    letAs' @(HList r) (HCons (MkT @"i11") xs12) $ \(xs11 :: HList t11) ->+    letAs' @(HList r) (HCons (MkT @"i10") xs11) $ \(xs10 :: HList t10) ->+    -- 09 .. 00+    letAs' @(HList r) (HCons (MkT @"i09") xs10) $ \(xs09 :: HList t09) ->+    letAs' @(HList r) (HCons (MkT @"i08") xs09) $ \(xs08 :: HList t08) ->+    letAs' @(HList r) (HCons (MkT @"i07") xs08) $ \(xs07 :: HList t07) ->+    letAs' @(HList r) (HCons (MkT @"i06") xs07) $ \(xs06 :: HList t06) ->+    letAs' @(HList r) (HCons (MkT @"i05") xs06) $ \(xs05 :: HList t05) ->+    letAs' @(HList r) (HCons (MkT @"i04") xs05) $ \(xs04 :: HList t04) ->+    letAs' @(HList r) (HCons (MkT @"i03") xs04) $ \(xs03 :: HList t03) ->+    letAs' @(HList r) (HCons (MkT @"i02") xs03) $ \(xs02 :: HList t02) ->+    letAs' @(HList r) (HCons (MkT @"i01") xs02) $ \(xs01 :: HList t01) ->+    letAs' @(HList r) (HCons (MkT @"i00") xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00
+ test/Test/Size/HList/LetAsCPS/LetAsCPS080.hs view
@@ -0,0 +1,100 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAsCPS.LetAsCPS080 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix080++hlist :: HList Fields+hlist = letT' (Proxy @Fields) $ \(_ :: Proxy r) -> castEqual $+    -- 79 .. 70+    letAs' @(HList r) (HCons (MkT @"i79") HNil) $ \(xs79 :: HList t79) ->+    letAs' @(HList r) (HCons (MkT @"i78") xs79) $ \(xs78 :: HList t78) ->+    letAs' @(HList r) (HCons (MkT @"i77") xs78) $ \(xs77 :: HList t77) ->+    letAs' @(HList r) (HCons (MkT @"i76") xs77) $ \(xs76 :: HList t76) ->+    letAs' @(HList r) (HCons (MkT @"i75") xs76) $ \(xs75 :: HList t75) ->+    letAs' @(HList r) (HCons (MkT @"i74") xs75) $ \(xs74 :: HList t74) ->+    letAs' @(HList r) (HCons (MkT @"i73") xs74) $ \(xs73 :: HList t73) ->+    letAs' @(HList r) (HCons (MkT @"i72") xs73) $ \(xs72 :: HList t72) ->+    letAs' @(HList r) (HCons (MkT @"i71") xs72) $ \(xs71 :: HList t71) ->+    letAs' @(HList r) (HCons (MkT @"i70") xs71) $ \(xs70 :: HList t70) ->+    -- 69 .. 60+    letAs' @(HList r) (HCons (MkT @"i69") xs70) $ \(xs69 :: HList t69) ->+    letAs' @(HList r) (HCons (MkT @"i68") xs69) $ \(xs68 :: HList t68) ->+    letAs' @(HList r) (HCons (MkT @"i67") xs68) $ \(xs67 :: HList t67) ->+    letAs' @(HList r) (HCons (MkT @"i66") xs67) $ \(xs66 :: HList t66) ->+    letAs' @(HList r) (HCons (MkT @"i65") xs66) $ \(xs65 :: HList t65) ->+    letAs' @(HList r) (HCons (MkT @"i64") xs65) $ \(xs64 :: HList t64) ->+    letAs' @(HList r) (HCons (MkT @"i63") xs64) $ \(xs63 :: HList t63) ->+    letAs' @(HList r) (HCons (MkT @"i62") xs63) $ \(xs62 :: HList t62) ->+    letAs' @(HList r) (HCons (MkT @"i61") xs62) $ \(xs61 :: HList t61) ->+    letAs' @(HList r) (HCons (MkT @"i60") xs61) $ \(xs60 :: HList t60) ->+    -- 59 .. 50+    letAs' @(HList r) (HCons (MkT @"i59") xs60) $ \(xs59 :: HList t59) ->+    letAs' @(HList r) (HCons (MkT @"i58") xs59) $ \(xs58 :: HList t58) ->+    letAs' @(HList r) (HCons (MkT @"i57") xs58) $ \(xs57 :: HList t57) ->+    letAs' @(HList r) (HCons (MkT @"i56") xs57) $ \(xs56 :: HList t56) ->+    letAs' @(HList r) (HCons (MkT @"i55") xs56) $ \(xs55 :: HList t55) ->+    letAs' @(HList r) (HCons (MkT @"i54") xs55) $ \(xs54 :: HList t54) ->+    letAs' @(HList r) (HCons (MkT @"i53") xs54) $ \(xs53 :: HList t53) ->+    letAs' @(HList r) (HCons (MkT @"i52") xs53) $ \(xs52 :: HList t52) ->+    letAs' @(HList r) (HCons (MkT @"i51") xs52) $ \(xs51 :: HList t51) ->+    letAs' @(HList r) (HCons (MkT @"i50") xs51) $ \(xs50 :: HList t50) ->+    -- 49 .. 40+    letAs' @(HList r) (HCons (MkT @"i49") xs50) $ \(xs49 :: HList t49) ->+    letAs' @(HList r) (HCons (MkT @"i48") xs49) $ \(xs48 :: HList t48) ->+    letAs' @(HList r) (HCons (MkT @"i47") xs48) $ \(xs47 :: HList t47) ->+    letAs' @(HList r) (HCons (MkT @"i46") xs47) $ \(xs46 :: HList t46) ->+    letAs' @(HList r) (HCons (MkT @"i45") xs46) $ \(xs45 :: HList t45) ->+    letAs' @(HList r) (HCons (MkT @"i44") xs45) $ \(xs44 :: HList t44) ->+    letAs' @(HList r) (HCons (MkT @"i43") xs44) $ \(xs43 :: HList t43) ->+    letAs' @(HList r) (HCons (MkT @"i42") xs43) $ \(xs42 :: HList t42) ->+    letAs' @(HList r) (HCons (MkT @"i41") xs42) $ \(xs41 :: HList t41) ->+    letAs' @(HList r) (HCons (MkT @"i40") xs41) $ \(xs40 :: HList t40) ->+    -- 39 .. 30+    letAs' @(HList r) (HCons (MkT @"i39") xs40) $ \(xs39 :: HList t39) ->+    letAs' @(HList r) (HCons (MkT @"i38") xs39) $ \(xs38 :: HList t38) ->+    letAs' @(HList r) (HCons (MkT @"i37") xs38) $ \(xs37 :: HList t37) ->+    letAs' @(HList r) (HCons (MkT @"i36") xs37) $ \(xs36 :: HList t36) ->+    letAs' @(HList r) (HCons (MkT @"i35") xs36) $ \(xs35 :: HList t35) ->+    letAs' @(HList r) (HCons (MkT @"i34") xs35) $ \(xs34 :: HList t34) ->+    letAs' @(HList r) (HCons (MkT @"i33") xs34) $ \(xs33 :: HList t33) ->+    letAs' @(HList r) (HCons (MkT @"i32") xs33) $ \(xs32 :: HList t32) ->+    letAs' @(HList r) (HCons (MkT @"i31") xs32) $ \(xs31 :: HList t31) ->+    letAs' @(HList r) (HCons (MkT @"i30") xs31) $ \(xs30 :: HList t30) ->+    -- 29 .. 20+    letAs' @(HList r) (HCons (MkT @"i29") xs30) $ \(xs29 :: HList t29) ->+    letAs' @(HList r) (HCons (MkT @"i28") xs29) $ \(xs28 :: HList t28) ->+    letAs' @(HList r) (HCons (MkT @"i27") xs28) $ \(xs27 :: HList t27) ->+    letAs' @(HList r) (HCons (MkT @"i26") xs27) $ \(xs26 :: HList t26) ->+    letAs' @(HList r) (HCons (MkT @"i25") xs26) $ \(xs25 :: HList t25) ->+    letAs' @(HList r) (HCons (MkT @"i24") xs25) $ \(xs24 :: HList t24) ->+    letAs' @(HList r) (HCons (MkT @"i23") xs24) $ \(xs23 :: HList t23) ->+    letAs' @(HList r) (HCons (MkT @"i22") xs23) $ \(xs22 :: HList t22) ->+    letAs' @(HList r) (HCons (MkT @"i21") xs22) $ \(xs21 :: HList t21) ->+    letAs' @(HList r) (HCons (MkT @"i20") xs21) $ \(xs20 :: HList t20) ->+    -- 19 .. 10+    letAs' @(HList r) (HCons (MkT @"i19") xs20) $ \(xs19 :: HList t19) ->+    letAs' @(HList r) (HCons (MkT @"i18") xs19) $ \(xs18 :: HList t18) ->+    letAs' @(HList r) (HCons (MkT @"i17") xs18) $ \(xs17 :: HList t17) ->+    letAs' @(HList r) (HCons (MkT @"i16") xs17) $ \(xs16 :: HList t16) ->+    letAs' @(HList r) (HCons (MkT @"i15") xs16) $ \(xs15 :: HList t15) ->+    letAs' @(HList r) (HCons (MkT @"i14") xs15) $ \(xs14 :: HList t14) ->+    letAs' @(HList r) (HCons (MkT @"i13") xs14) $ \(xs13 :: HList t13) ->+    letAs' @(HList r) (HCons (MkT @"i12") xs13) $ \(xs12 :: HList t12) ->+    letAs' @(HList r) (HCons (MkT @"i11") xs12) $ \(xs11 :: HList t11) ->+    letAs' @(HList r) (HCons (MkT @"i10") xs11) $ \(xs10 :: HList t10) ->+    -- 09 .. 00+    letAs' @(HList r) (HCons (MkT @"i09") xs10) $ \(xs09 :: HList t09) ->+    letAs' @(HList r) (HCons (MkT @"i08") xs09) $ \(xs08 :: HList t08) ->+    letAs' @(HList r) (HCons (MkT @"i07") xs08) $ \(xs07 :: HList t07) ->+    letAs' @(HList r) (HCons (MkT @"i06") xs07) $ \(xs06 :: HList t06) ->+    letAs' @(HList r) (HCons (MkT @"i05") xs06) $ \(xs05 :: HList t05) ->+    letAs' @(HList r) (HCons (MkT @"i04") xs05) $ \(xs04 :: HList t04) ->+    letAs' @(HList r) (HCons (MkT @"i03") xs04) $ \(xs03 :: HList t03) ->+    letAs' @(HList r) (HCons (MkT @"i02") xs03) $ \(xs02 :: HList t02) ->+    letAs' @(HList r) (HCons (MkT @"i01") xs02) $ \(xs01 :: HList t01) ->+    letAs' @(HList r) (HCons (MkT @"i00") xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00
+ test/Test/Size/HList/LetAsCPS/LetAsCPS090.hs view
@@ -0,0 +1,111 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAsCPS.LetAsCPS090 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix090++hlist :: HList Fields+hlist = letT' (Proxy @Fields) $ \(_ :: Proxy r) -> castEqual $+    -- 89 .. 80+    letAs' @(HList r) (HCons (MkT @"i89") HNil) $ \(xs89 :: HList t89) ->+    letAs' @(HList r) (HCons (MkT @"i88") xs89) $ \(xs88 :: HList t88) ->+    letAs' @(HList r) (HCons (MkT @"i87") xs88) $ \(xs87 :: HList t87) ->+    letAs' @(HList r) (HCons (MkT @"i86") xs87) $ \(xs86 :: HList t86) ->+    letAs' @(HList r) (HCons (MkT @"i85") xs86) $ \(xs85 :: HList t85) ->+    letAs' @(HList r) (HCons (MkT @"i84") xs85) $ \(xs84 :: HList t84) ->+    letAs' @(HList r) (HCons (MkT @"i83") xs84) $ \(xs83 :: HList t83) ->+    letAs' @(HList r) (HCons (MkT @"i82") xs83) $ \(xs82 :: HList t82) ->+    letAs' @(HList r) (HCons (MkT @"i81") xs82) $ \(xs81 :: HList t81) ->+    letAs' @(HList r) (HCons (MkT @"i80") xs81) $ \(xs80 :: HList t80) ->+    -- 79 .. 70+    letAs' @(HList r) (HCons (MkT @"i79") xs80) $ \(xs79 :: HList t79) ->+    letAs' @(HList r) (HCons (MkT @"i78") xs79) $ \(xs78 :: HList t78) ->+    letAs' @(HList r) (HCons (MkT @"i77") xs78) $ \(xs77 :: HList t77) ->+    letAs' @(HList r) (HCons (MkT @"i76") xs77) $ \(xs76 :: HList t76) ->+    letAs' @(HList r) (HCons (MkT @"i75") xs76) $ \(xs75 :: HList t75) ->+    letAs' @(HList r) (HCons (MkT @"i74") xs75) $ \(xs74 :: HList t74) ->+    letAs' @(HList r) (HCons (MkT @"i73") xs74) $ \(xs73 :: HList t73) ->+    letAs' @(HList r) (HCons (MkT @"i72") xs73) $ \(xs72 :: HList t72) ->+    letAs' @(HList r) (HCons (MkT @"i71") xs72) $ \(xs71 :: HList t71) ->+    letAs' @(HList r) (HCons (MkT @"i70") xs71) $ \(xs70 :: HList t70) ->+    -- 69 .. 60+    letAs' @(HList r) (HCons (MkT @"i69") xs70) $ \(xs69 :: HList t69) ->+    letAs' @(HList r) (HCons (MkT @"i68") xs69) $ \(xs68 :: HList t68) ->+    letAs' @(HList r) (HCons (MkT @"i67") xs68) $ \(xs67 :: HList t67) ->+    letAs' @(HList r) (HCons (MkT @"i66") xs67) $ \(xs66 :: HList t66) ->+    letAs' @(HList r) (HCons (MkT @"i65") xs66) $ \(xs65 :: HList t65) ->+    letAs' @(HList r) (HCons (MkT @"i64") xs65) $ \(xs64 :: HList t64) ->+    letAs' @(HList r) (HCons (MkT @"i63") xs64) $ \(xs63 :: HList t63) ->+    letAs' @(HList r) (HCons (MkT @"i62") xs63) $ \(xs62 :: HList t62) ->+    letAs' @(HList r) (HCons (MkT @"i61") xs62) $ \(xs61 :: HList t61) ->+    letAs' @(HList r) (HCons (MkT @"i60") xs61) $ \(xs60 :: HList t60) ->+    -- 59 .. 50+    letAs' @(HList r) (HCons (MkT @"i59") xs60) $ \(xs59 :: HList t59) ->+    letAs' @(HList r) (HCons (MkT @"i58") xs59) $ \(xs58 :: HList t58) ->+    letAs' @(HList r) (HCons (MkT @"i57") xs58) $ \(xs57 :: HList t57) ->+    letAs' @(HList r) (HCons (MkT @"i56") xs57) $ \(xs56 :: HList t56) ->+    letAs' @(HList r) (HCons (MkT @"i55") xs56) $ \(xs55 :: HList t55) ->+    letAs' @(HList r) (HCons (MkT @"i54") xs55) $ \(xs54 :: HList t54) ->+    letAs' @(HList r) (HCons (MkT @"i53") xs54) $ \(xs53 :: HList t53) ->+    letAs' @(HList r) (HCons (MkT @"i52") xs53) $ \(xs52 :: HList t52) ->+    letAs' @(HList r) (HCons (MkT @"i51") xs52) $ \(xs51 :: HList t51) ->+    letAs' @(HList r) (HCons (MkT @"i50") xs51) $ \(xs50 :: HList t50) ->+    -- 49 .. 40+    letAs' @(HList r) (HCons (MkT @"i49") xs50) $ \(xs49 :: HList t49) ->+    letAs' @(HList r) (HCons (MkT @"i48") xs49) $ \(xs48 :: HList t48) ->+    letAs' @(HList r) (HCons (MkT @"i47") xs48) $ \(xs47 :: HList t47) ->+    letAs' @(HList r) (HCons (MkT @"i46") xs47) $ \(xs46 :: HList t46) ->+    letAs' @(HList r) (HCons (MkT @"i45") xs46) $ \(xs45 :: HList t45) ->+    letAs' @(HList r) (HCons (MkT @"i44") xs45) $ \(xs44 :: HList t44) ->+    letAs' @(HList r) (HCons (MkT @"i43") xs44) $ \(xs43 :: HList t43) ->+    letAs' @(HList r) (HCons (MkT @"i42") xs43) $ \(xs42 :: HList t42) ->+    letAs' @(HList r) (HCons (MkT @"i41") xs42) $ \(xs41 :: HList t41) ->+    letAs' @(HList r) (HCons (MkT @"i40") xs41) $ \(xs40 :: HList t40) ->+    -- 39 .. 30+    letAs' @(HList r) (HCons (MkT @"i39") xs40) $ \(xs39 :: HList t39) ->+    letAs' @(HList r) (HCons (MkT @"i38") xs39) $ \(xs38 :: HList t38) ->+    letAs' @(HList r) (HCons (MkT @"i37") xs38) $ \(xs37 :: HList t37) ->+    letAs' @(HList r) (HCons (MkT @"i36") xs37) $ \(xs36 :: HList t36) ->+    letAs' @(HList r) (HCons (MkT @"i35") xs36) $ \(xs35 :: HList t35) ->+    letAs' @(HList r) (HCons (MkT @"i34") xs35) $ \(xs34 :: HList t34) ->+    letAs' @(HList r) (HCons (MkT @"i33") xs34) $ \(xs33 :: HList t33) ->+    letAs' @(HList r) (HCons (MkT @"i32") xs33) $ \(xs32 :: HList t32) ->+    letAs' @(HList r) (HCons (MkT @"i31") xs32) $ \(xs31 :: HList t31) ->+    letAs' @(HList r) (HCons (MkT @"i30") xs31) $ \(xs30 :: HList t30) ->+    -- 29 .. 20+    letAs' @(HList r) (HCons (MkT @"i29") xs30) $ \(xs29 :: HList t29) ->+    letAs' @(HList r) (HCons (MkT @"i28") xs29) $ \(xs28 :: HList t28) ->+    letAs' @(HList r) (HCons (MkT @"i27") xs28) $ \(xs27 :: HList t27) ->+    letAs' @(HList r) (HCons (MkT @"i26") xs27) $ \(xs26 :: HList t26) ->+    letAs' @(HList r) (HCons (MkT @"i25") xs26) $ \(xs25 :: HList t25) ->+    letAs' @(HList r) (HCons (MkT @"i24") xs25) $ \(xs24 :: HList t24) ->+    letAs' @(HList r) (HCons (MkT @"i23") xs24) $ \(xs23 :: HList t23) ->+    letAs' @(HList r) (HCons (MkT @"i22") xs23) $ \(xs22 :: HList t22) ->+    letAs' @(HList r) (HCons (MkT @"i21") xs22) $ \(xs21 :: HList t21) ->+    letAs' @(HList r) (HCons (MkT @"i20") xs21) $ \(xs20 :: HList t20) ->+    -- 19 .. 10+    letAs' @(HList r) (HCons (MkT @"i19") xs20) $ \(xs19 :: HList t19) ->+    letAs' @(HList r) (HCons (MkT @"i18") xs19) $ \(xs18 :: HList t18) ->+    letAs' @(HList r) (HCons (MkT @"i17") xs18) $ \(xs17 :: HList t17) ->+    letAs' @(HList r) (HCons (MkT @"i16") xs17) $ \(xs16 :: HList t16) ->+    letAs' @(HList r) (HCons (MkT @"i15") xs16) $ \(xs15 :: HList t15) ->+    letAs' @(HList r) (HCons (MkT @"i14") xs15) $ \(xs14 :: HList t14) ->+    letAs' @(HList r) (HCons (MkT @"i13") xs14) $ \(xs13 :: HList t13) ->+    letAs' @(HList r) (HCons (MkT @"i12") xs13) $ \(xs12 :: HList t12) ->+    letAs' @(HList r) (HCons (MkT @"i11") xs12) $ \(xs11 :: HList t11) ->+    letAs' @(HList r) (HCons (MkT @"i10") xs11) $ \(xs10 :: HList t10) ->+    -- 09 .. 00+    letAs' @(HList r) (HCons (MkT @"i09") xs10) $ \(xs09 :: HList t09) ->+    letAs' @(HList r) (HCons (MkT @"i08") xs09) $ \(xs08 :: HList t08) ->+    letAs' @(HList r) (HCons (MkT @"i07") xs08) $ \(xs07 :: HList t07) ->+    letAs' @(HList r) (HCons (MkT @"i06") xs07) $ \(xs06 :: HList t06) ->+    letAs' @(HList r) (HCons (MkT @"i05") xs06) $ \(xs05 :: HList t05) ->+    letAs' @(HList r) (HCons (MkT @"i04") xs05) $ \(xs04 :: HList t04) ->+    letAs' @(HList r) (HCons (MkT @"i03") xs04) $ \(xs03 :: HList t03) ->+    letAs' @(HList r) (HCons (MkT @"i02") xs03) $ \(xs02 :: HList t02) ->+    letAs' @(HList r) (HCons (MkT @"i01") xs02) $ \(xs01 :: HList t01) ->+    letAs' @(HList r) (HCons (MkT @"i00") xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00
+ test/Test/Size/HList/LetAsCPS/LetAsCPS100.hs view
@@ -0,0 +1,122 @@+{-# OPTIONS_GHC -fplugin=TypeLet #-}++module Test.Size.HList.LetAsCPS.LetAsCPS100 where++import TypeLet++import Test.Infra+import Test.Size.HList.Index.Ix100++hlist :: HList Fields+hlist = letT' (Proxy @Fields) $ \(_ :: Proxy r) -> castEqual $+    -- 99 .. 90+    letAs' @(HList r) (HCons (MkT @"i99") HNil) $ \(xs99 :: HList t99) ->+    letAs' @(HList r) (HCons (MkT @"i98") xs99) $ \(xs98 :: HList t98) ->+    letAs' @(HList r) (HCons (MkT @"i97") xs98) $ \(xs97 :: HList t97) ->+    letAs' @(HList r) (HCons (MkT @"i96") xs97) $ \(xs96 :: HList t96) ->+    letAs' @(HList r) (HCons (MkT @"i95") xs96) $ \(xs95 :: HList t95) ->+    letAs' @(HList r) (HCons (MkT @"i94") xs95) $ \(xs94 :: HList t94) ->+    letAs' @(HList r) (HCons (MkT @"i93") xs94) $ \(xs93 :: HList t93) ->+    letAs' @(HList r) (HCons (MkT @"i92") xs93) $ \(xs92 :: HList t92) ->+    letAs' @(HList r) (HCons (MkT @"i91") xs92) $ \(xs91 :: HList t91) ->+    letAs' @(HList r) (HCons (MkT @"i90") xs91) $ \(xs90 :: HList t90) ->+    -- 89 .. 80+    letAs' @(HList r) (HCons (MkT @"i89") xs90) $ \(xs89 :: HList t89) ->+    letAs' @(HList r) (HCons (MkT @"i88") xs89) $ \(xs88 :: HList t88) ->+    letAs' @(HList r) (HCons (MkT @"i87") xs88) $ \(xs87 :: HList t87) ->+    letAs' @(HList r) (HCons (MkT @"i86") xs87) $ \(xs86 :: HList t86) ->+    letAs' @(HList r) (HCons (MkT @"i85") xs86) $ \(xs85 :: HList t85) ->+    letAs' @(HList r) (HCons (MkT @"i84") xs85) $ \(xs84 :: HList t84) ->+    letAs' @(HList r) (HCons (MkT @"i83") xs84) $ \(xs83 :: HList t83) ->+    letAs' @(HList r) (HCons (MkT @"i82") xs83) $ \(xs82 :: HList t82) ->+    letAs' @(HList r) (HCons (MkT @"i81") xs82) $ \(xs81 :: HList t81) ->+    letAs' @(HList r) (HCons (MkT @"i80") xs81) $ \(xs80 :: HList t80) ->+    -- 79 .. 70+    letAs' @(HList r) (HCons (MkT @"i79") xs80) $ \(xs79 :: HList t79) ->+    letAs' @(HList r) (HCons (MkT @"i78") xs79) $ \(xs78 :: HList t78) ->+    letAs' @(HList r) (HCons (MkT @"i77") xs78) $ \(xs77 :: HList t77) ->+    letAs' @(HList r) (HCons (MkT @"i76") xs77) $ \(xs76 :: HList t76) ->+    letAs' @(HList r) (HCons (MkT @"i75") xs76) $ \(xs75 :: HList t75) ->+    letAs' @(HList r) (HCons (MkT @"i74") xs75) $ \(xs74 :: HList t74) ->+    letAs' @(HList r) (HCons (MkT @"i73") xs74) $ \(xs73 :: HList t73) ->+    letAs' @(HList r) (HCons (MkT @"i72") xs73) $ \(xs72 :: HList t72) ->+    letAs' @(HList r) (HCons (MkT @"i71") xs72) $ \(xs71 :: HList t71) ->+    letAs' @(HList r) (HCons (MkT @"i70") xs71) $ \(xs70 :: HList t70) ->+    -- 69 .. 60+    letAs' @(HList r) (HCons (MkT @"i69") xs70) $ \(xs69 :: HList t69) ->+    letAs' @(HList r) (HCons (MkT @"i68") xs69) $ \(xs68 :: HList t68) ->+    letAs' @(HList r) (HCons (MkT @"i67") xs68) $ \(xs67 :: HList t67) ->+    letAs' @(HList r) (HCons (MkT @"i66") xs67) $ \(xs66 :: HList t66) ->+    letAs' @(HList r) (HCons (MkT @"i65") xs66) $ \(xs65 :: HList t65) ->+    letAs' @(HList r) (HCons (MkT @"i64") xs65) $ \(xs64 :: HList t64) ->+    letAs' @(HList r) (HCons (MkT @"i63") xs64) $ \(xs63 :: HList t63) ->+    letAs' @(HList r) (HCons (MkT @"i62") xs63) $ \(xs62 :: HList t62) ->+    letAs' @(HList r) (HCons (MkT @"i61") xs62) $ \(xs61 :: HList t61) ->+    letAs' @(HList r) (HCons (MkT @"i60") xs61) $ \(xs60 :: HList t60) ->+    -- 59 .. 50+    letAs' @(HList r) (HCons (MkT @"i59") xs60) $ \(xs59 :: HList t59) ->+    letAs' @(HList r) (HCons (MkT @"i58") xs59) $ \(xs58 :: HList t58) ->+    letAs' @(HList r) (HCons (MkT @"i57") xs58) $ \(xs57 :: HList t57) ->+    letAs' @(HList r) (HCons (MkT @"i56") xs57) $ \(xs56 :: HList t56) ->+    letAs' @(HList r) (HCons (MkT @"i55") xs56) $ \(xs55 :: HList t55) ->+    letAs' @(HList r) (HCons (MkT @"i54") xs55) $ \(xs54 :: HList t54) ->+    letAs' @(HList r) (HCons (MkT @"i53") xs54) $ \(xs53 :: HList t53) ->+    letAs' @(HList r) (HCons (MkT @"i52") xs53) $ \(xs52 :: HList t52) ->+    letAs' @(HList r) (HCons (MkT @"i51") xs52) $ \(xs51 :: HList t51) ->+    letAs' @(HList r) (HCons (MkT @"i50") xs51) $ \(xs50 :: HList t50) ->+    -- 49 .. 40+    letAs' @(HList r) (HCons (MkT @"i49") xs50) $ \(xs49 :: HList t49) ->+    letAs' @(HList r) (HCons (MkT @"i48") xs49) $ \(xs48 :: HList t48) ->+    letAs' @(HList r) (HCons (MkT @"i47") xs48) $ \(xs47 :: HList t47) ->+    letAs' @(HList r) (HCons (MkT @"i46") xs47) $ \(xs46 :: HList t46) ->+    letAs' @(HList r) (HCons (MkT @"i45") xs46) $ \(xs45 :: HList t45) ->+    letAs' @(HList r) (HCons (MkT @"i44") xs45) $ \(xs44 :: HList t44) ->+    letAs' @(HList r) (HCons (MkT @"i43") xs44) $ \(xs43 :: HList t43) ->+    letAs' @(HList r) (HCons (MkT @"i42") xs43) $ \(xs42 :: HList t42) ->+    letAs' @(HList r) (HCons (MkT @"i41") xs42) $ \(xs41 :: HList t41) ->+    letAs' @(HList r) (HCons (MkT @"i40") xs41) $ \(xs40 :: HList t40) ->+    -- 39 .. 30+    letAs' @(HList r) (HCons (MkT @"i39") xs40) $ \(xs39 :: HList t39) ->+    letAs' @(HList r) (HCons (MkT @"i38") xs39) $ \(xs38 :: HList t38) ->+    letAs' @(HList r) (HCons (MkT @"i37") xs38) $ \(xs37 :: HList t37) ->+    letAs' @(HList r) (HCons (MkT @"i36") xs37) $ \(xs36 :: HList t36) ->+    letAs' @(HList r) (HCons (MkT @"i35") xs36) $ \(xs35 :: HList t35) ->+    letAs' @(HList r) (HCons (MkT @"i34") xs35) $ \(xs34 :: HList t34) ->+    letAs' @(HList r) (HCons (MkT @"i33") xs34) $ \(xs33 :: HList t33) ->+    letAs' @(HList r) (HCons (MkT @"i32") xs33) $ \(xs32 :: HList t32) ->+    letAs' @(HList r) (HCons (MkT @"i31") xs32) $ \(xs31 :: HList t31) ->+    letAs' @(HList r) (HCons (MkT @"i30") xs31) $ \(xs30 :: HList t30) ->+    -- 29 .. 20+    letAs' @(HList r) (HCons (MkT @"i29") xs30) $ \(xs29 :: HList t29) ->+    letAs' @(HList r) (HCons (MkT @"i28") xs29) $ \(xs28 :: HList t28) ->+    letAs' @(HList r) (HCons (MkT @"i27") xs28) $ \(xs27 :: HList t27) ->+    letAs' @(HList r) (HCons (MkT @"i26") xs27) $ \(xs26 :: HList t26) ->+    letAs' @(HList r) (HCons (MkT @"i25") xs26) $ \(xs25 :: HList t25) ->+    letAs' @(HList r) (HCons (MkT @"i24") xs25) $ \(xs24 :: HList t24) ->+    letAs' @(HList r) (HCons (MkT @"i23") xs24) $ \(xs23 :: HList t23) ->+    letAs' @(HList r) (HCons (MkT @"i22") xs23) $ \(xs22 :: HList t22) ->+    letAs' @(HList r) (HCons (MkT @"i21") xs22) $ \(xs21 :: HList t21) ->+    letAs' @(HList r) (HCons (MkT @"i20") xs21) $ \(xs20 :: HList t20) ->+    -- 19 .. 10+    letAs' @(HList r) (HCons (MkT @"i19") xs20) $ \(xs19 :: HList t19) ->+    letAs' @(HList r) (HCons (MkT @"i18") xs19) $ \(xs18 :: HList t18) ->+    letAs' @(HList r) (HCons (MkT @"i17") xs18) $ \(xs17 :: HList t17) ->+    letAs' @(HList r) (HCons (MkT @"i16") xs17) $ \(xs16 :: HList t16) ->+    letAs' @(HList r) (HCons (MkT @"i15") xs16) $ \(xs15 :: HList t15) ->+    letAs' @(HList r) (HCons (MkT @"i14") xs15) $ \(xs14 :: HList t14) ->+    letAs' @(HList r) (HCons (MkT @"i13") xs14) $ \(xs13 :: HList t13) ->+    letAs' @(HList r) (HCons (MkT @"i12") xs13) $ \(xs12 :: HList t12) ->+    letAs' @(HList r) (HCons (MkT @"i11") xs12) $ \(xs11 :: HList t11) ->+    letAs' @(HList r) (HCons (MkT @"i10") xs11) $ \(xs10 :: HList t10) ->+    -- 09 .. 00+    letAs' @(HList r) (HCons (MkT @"i09") xs10) $ \(xs09 :: HList t09) ->+    letAs' @(HList r) (HCons (MkT @"i08") xs09) $ \(xs08 :: HList t08) ->+    letAs' @(HList r) (HCons (MkT @"i07") xs08) $ \(xs07 :: HList t07) ->+    letAs' @(HList r) (HCons (MkT @"i06") xs07) $ \(xs06 :: HList t06) ->+    letAs' @(HList r) (HCons (MkT @"i05") xs06) $ \(xs05 :: HList t05) ->+    letAs' @(HList r) (HCons (MkT @"i04") xs05) $ \(xs04 :: HList t04) ->+    letAs' @(HList r) (HCons (MkT @"i03") xs04) $ \(xs03 :: HList t03) ->+    letAs' @(HList r) (HCons (MkT @"i02") xs03) $ \(xs02 :: HList t02) ->+    letAs' @(HList r) (HCons (MkT @"i01") xs02) $ \(xs01 :: HList t01) ->+    letAs' @(HList r) (HCons (MkT @"i00") xs01) $ \(xs00 :: HList t00) ->+      castEqual xs00
+ test/Test/WithoutPlugin.hs view
@@ -0,0 +1,101 @@+{-# OPTIONS_GHC -ddump-ds-preopt -ddump-ds -ddump-simpl -ddump-to-file #-}++-- | Show that we do not /need/ the plugin; it's just more convenient.+module Test.WithoutPlugin where++import Data.Kind+import Data.Type.Equality++import Test.Infra++data LetT :: a -> Type where+  LetT :: (b :~: a) -> LetT a++-- The NOINLINE pragma is essential, otherwise the inliner just undoes our work+{-# NOINLINE letT #-}+letT :: LetT a+letT = LetT Refl++castSingleLet :: Int -> Int+castSingleLet x =+    case letT of { LetT (p :: b :~: Int) ->+      let x' :: b+          x' = case p of Refl -> x+      in case p of Refl -> x'+    }++-- | Correct version (albeit somewhat clunky)+hlist1 :: HList '[A, B, C]+hlist1 =+   case letT of { LetT (p2 :: r2 :~: (C : '[])) ->+   case letT of { LetT (p1 :: r1 :~: (B : r2 )) ->+   case letT of { LetT (p0 :: r0 :~: (A : r1 )) ->++     let xs2 :: HList r2+         xs1 :: HList r1+         xs0 :: HList r0++         xs2 = case p2 of Refl -> HCons C HNil+         xs1 = case p1 of Refl -> HCons B xs2+         xs0 = case p0 of Refl -> HCons A xs1++     in case p0 of { Refl ->+        case p1 of { Refl ->+        case p2 of { Refl ->+          xs0+        }}}++   }}}++-- | Unpacking the equalities in the wrong order (leading to quadratic code)+hlist2 :: HList '[A, B, C]+hlist2 =+   case letT of { LetT (p2 :: r2 :~: (C : '[])) ->+   case letT of { LetT (p1 :: r1 :~: (B : r2 )) ->+   case letT of { LetT (p0 :: r0 :~: (A : r1 )) ->++     let xs2 :: HList r2+         xs1 :: HList r1+         xs0 :: HList r0++         xs2 = case p2 of Refl -> HCons C HNil+         xs1 = case p1 of Refl -> HCons B xs2+         xs0 = case p0 of Refl -> HCons A xs1++     in case p2 of { Refl ->+        case p1 of { Refl ->+        case p0 of { Refl ->+          xs0+        }}}++   }}}++-- | Just for completeness, a version where /we/ construct equality proofs+hlist3 :: HList '[A, B, C]+hlist3 =+   case letT of { LetT (p2 :: r2 :~: (C : '[])) ->+   case letT of { LetT (p1 :: r1 :~: (B : r2 )) ->+   case letT of { LetT (p0 :: r0 :~: (A : r1 )) ->++     let xs2 :: HList r2+         xs1 :: HList r1+         xs0 :: HList r0++         xs2 = castWith (cong (sym p2)) (HCons C HNil)+         xs1 = castWith (cong (sym p1)) (HCons B xs2)+         xs0 = castWith (cong (sym p0)) (HCons A xs1)++     in castWith (cong (comp p0 (comp p1 p2))) xs0++   }}}++{-------------------------------------------------------------------------------+  Auxiliary+-------------------------------------------------------------------------------}++cong :: (a :~: b) -> f a :~: f b+cong Refl = Refl++comp :: (a :~: x : b) -> b :~: c -> a :~: x : c+comp Refl Refl = Refl+
+ test/TestTypeLet.hs view
@@ -0,0 +1,10 @@+module Main (main) where++import Test.Tasty++import qualified Test.Sanity++main :: IO ()+main = defaultMain $ testGroup "TestTypeLet" [+      Test.Sanity.tests+    ]
+ typelet.cabal view
@@ -0,0 +1,226 @@+cabal-version:      2.4+build-type:         Custom+name:               typelet+version:            0.1.0.0+synopsis:           Plugin to faciliate type-level let+description:        For a certain class of programs, type-level let is essential+                    in order to be able to write these programs in such a way+                    that they do not result in ghc core that is quadratic in+                    size. Type-level let is not explicitly supported in ghc,+                    but we can encode it. The @typelet@ library provides a+                    type-checker plugin that makes the encoding more convenient+                    to use as well as more effective.+bug-reports:        https://github.com/well-typed/typelet/issues+license:            BSD-3-Clause+author:             Edsko de Vries+maintainer:         edsko@well-typed.com+copyright:          Well-Typed LLP, Juspay Technologies Pvt Ltd+category:           Plugin+extra-source-files: CHANGELOG.md++source-repository head+  type:     git+  location: https://github.com/well-typed/typelet++custom-setup+    setup-depends:+        base >= 4 && <5+      , cabal-doctest >= 1 && <1.1++library+    exposed-modules:+        TypeLet+        TypeLet.UserAPI+        TypeLet.Plugin+    other-modules:+        TypeLet.Plugin.Constraints+        TypeLet.Plugin.GhcTcPluginAPI+        TypeLet.Plugin.NameResolution+        TypeLet.Plugin.Substitution+    build-depends:+        base >= 4.13 && < 4.17+      , ghc-tcplugin-api >= 0.6 && < 0.7++        -- whichever versions are bundled with ghc:+      , containers+      , ghc+    hs-source-dirs:+        src+    default-language:+        Haskell2010+    default-extensions:+        DataKinds+        DeriveFunctor+        FlexibleInstances+        GADTs+        KindSignatures+        LambdaCase+        MultiParamTypeClasses+        PolyKinds+        RankNTypes+        RecordWildCards+        ScopedTypeVariables+        TupleSections+    other-extensions:+        CPP+    ghc-options:+        -Wall++test-suite test-typelet+    default-language:+        Haskell2010+    default-extensions:+        DataKinds+        FlexibleContexts+        FlexibleInstances+        GADTs+        KindSignatures+        MultiParamTypeClasses+        PolyKinds+        RankNTypes+        ScopedTypeVariables+        StandaloneDeriving+        TypeApplications+        TypeFamilies+        TypeOperators+        UndecidableInstances+    type:+        exitcode-stdio-1.0+    hs-source-dirs:+        test+    main-is:+        TestTypeLet.hs+    other-modules:+        Test.Infra+        Test.Sanity+        Test.WithoutPlugin++    if flag(include-size-tests)+      -- Currently the size tests are built, but not actually part of the test+      -- suite proper. We are just interested in the size of their core.+      other-modules:+          Test.Size.Ap.Baseline.Baseline010+          Test.Size.Ap.Baseline.Baseline020+          Test.Size.Ap.Baseline.Baseline030+          Test.Size.Ap.Baseline.Baseline040+          Test.Size.Ap.Baseline.Baseline050+          Test.Size.Ap.Baseline.Baseline060+          Test.Size.Ap.Baseline.Baseline070+          Test.Size.Ap.Baseline.Baseline080+          Test.Size.Ap.Baseline.Baseline090+          Test.Size.Ap.Baseline.Baseline100+          Test.Size.Ap.Index.Ix010+          Test.Size.Ap.Index.Ix020+          Test.Size.Ap.Index.Ix030+          Test.Size.Ap.Index.Ix040+          Test.Size.Ap.Index.Ix050+          Test.Size.Ap.Index.Ix060+          Test.Size.Ap.Index.Ix070+          Test.Size.Ap.Index.Ix080+          Test.Size.Ap.Index.Ix090+          Test.Size.Ap.Index.Ix100+          Test.Size.Ap.Let.Let010+          Test.Size.Ap.Let.Let020+          Test.Size.Ap.Let.Let030+          Test.Size.Ap.Let.Let040+          Test.Size.Ap.Let.Let050+          Test.Size.Ap.Let.Let060+          Test.Size.Ap.Let.Let070+          Test.Size.Ap.Let.Let080+          Test.Size.Ap.Let.Let090+          Test.Size.Ap.Let.Let100+          Test.Size.HList.Baseline.Baseline010+          Test.Size.HList.Baseline.Baseline020+          Test.Size.HList.Baseline.Baseline030+          Test.Size.HList.Baseline.Baseline040+          Test.Size.HList.Baseline.Baseline050+          Test.Size.HList.Baseline.Baseline060+          Test.Size.HList.Baseline.Baseline070+          Test.Size.HList.Baseline.Baseline080+          Test.Size.HList.Baseline.Baseline090+          Test.Size.HList.Baseline.Baseline100+          Test.Size.HList.Index.Ix010+          Test.Size.HList.Index.Ix020+          Test.Size.HList.Index.Ix030+          Test.Size.HList.Index.Ix040+          Test.Size.HList.Index.Ix050+          Test.Size.HList.Index.Ix060+          Test.Size.HList.Index.Ix070+          Test.Size.HList.Index.Ix080+          Test.Size.HList.Index.Ix090+          Test.Size.HList.Index.Ix100+          Test.Size.HList.LetAs.LetAs010+          Test.Size.HList.LetAs.LetAs020+          Test.Size.HList.LetAs.LetAs030+          Test.Size.HList.LetAs.LetAs040+          Test.Size.HList.LetAs.LetAs050+          Test.Size.HList.LetAs.LetAs060+          Test.Size.HList.LetAs.LetAs070+          Test.Size.HList.LetAs.LetAs080+          Test.Size.HList.LetAs.LetAs090+          Test.Size.HList.LetAs.LetAs100+          Test.Size.HList.LetAsCPS.LetAsCPS010+          Test.Size.HList.LetAsCPS.LetAsCPS020+          Test.Size.HList.LetAsCPS.LetAsCPS030+          Test.Size.HList.LetAsCPS.LetAsCPS040+          Test.Size.HList.LetAsCPS.LetAsCPS050+          Test.Size.HList.LetAsCPS.LetAsCPS060+          Test.Size.HList.LetAsCPS.LetAsCPS070+          Test.Size.HList.LetAsCPS.LetAsCPS080+          Test.Size.HList.LetAsCPS.LetAsCPS090+          Test.Size.HList.LetAsCPS.LetAsCPS100++    build-depends:+        base+      , typelet+      , tasty+      , tasty-hunit+      , tasty-quickcheck+    ghc-options:+        -Wall++-- To use the doctest tests, enable flag build-doctest-examples+test-suite doctest-typelet+    type:+        exitcode-stdio-1.0+    default-language:+        Haskell2010+    hs-source-dirs:+        doctest+    main-is:+        DoctestTypeLet.hs+    build-depends:+        base+      , doctest+      , typelet+    x-doctest-components:+        exe:doctest-examples-typelet++    if !flag(build-doctest-examples)+      buildable: False++executable doctest-examples-typelet+    main-is:+        DoctestExamplesTypeLet.hs+    default-language:+        Haskell2010+    default-extensions:+        FlexibleContexts+    hs-source-dirs:+        doctest-examples+    build-depends:+        base+      , typelet+    ghc-options:+        -Wwarn++    if !flag(build-doctest-examples)+      buildable: False++Flag build-doctest-examples+  Description: Build doctest-examples-typelet (for testing only)+  Default: False++Flag include-size-tests+  Description: Include size tests in the test suite+  Default: True