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 +5/−0
- Setup.hs +9/−0
- doctest-examples/DoctestExamplesTypeLet.hs +168/−0
- doctest/DoctestTypeLet.hs +19/−0
- src/TypeLet.hs +4/−0
- src/TypeLet/Plugin.hs +111/−0
- src/TypeLet/Plugin/Constraints.hs +172/−0
- src/TypeLet/Plugin/GhcTcPluginAPI.hs +58/−0
- src/TypeLet/Plugin/NameResolution.hs +43/−0
- src/TypeLet/Plugin/Substitution.hs +114/−0
- src/TypeLet/UserAPI.hs +131/−0
- test/Test/Infra.hs +36/−0
- test/Test/Sanity.hs +162/−0
- test/Test/Size/Ap/Baseline/Baseline010.hs +19/−0
- test/Test/Size/Ap/Baseline/Baseline020.hs +30/−0
- test/Test/Size/Ap/Baseline/Baseline030.hs +41/−0
- test/Test/Size/Ap/Baseline/Baseline040.hs +52/−0
- test/Test/Size/Ap/Baseline/Baseline050.hs +63/−0
- test/Test/Size/Ap/Baseline/Baseline060.hs +74/−0
- test/Test/Size/Ap/Baseline/Baseline070.hs +85/−0
- test/Test/Size/Ap/Baseline/Baseline080.hs +96/−0
- test/Test/Size/Ap/Baseline/Baseline090.hs +107/−0
- test/Test/Size/Ap/Baseline/Baseline100.hs +120/−0
- test/Test/Size/Ap/Index/Ix010.hs +17/−0
- test/Test/Size/Ap/Index/Ix020.hs +28/−0
- test/Test/Size/Ap/Index/Ix030.hs +39/−0
- test/Test/Size/Ap/Index/Ix040.hs +50/−0
- test/Test/Size/Ap/Index/Ix050.hs +61/−0
- test/Test/Size/Ap/Index/Ix060.hs +72/−0
- test/Test/Size/Ap/Index/Ix070.hs +83/−0
- test/Test/Size/Ap/Index/Ix080.hs +94/−0
- test/Test/Size/Ap/Index/Ix090.hs +105/−0
- test/Test/Size/Ap/Index/Ix100.hs +116/−0
- test/Test/Size/Ap/Let/Let010.hs +54/−0
- test/Test/Size/Ap/Let/Let020.hs +88/−0
- test/Test/Size/Ap/Let/Let030.hs +122/−0
- test/Test/Size/Ap/Let/Let040.hs +156/−0
- test/Test/Size/Ap/Let/Let050.hs +190/−0
- test/Test/Size/Ap/Let/Let060.hs +224/−0
- test/Test/Size/Ap/Let/Let070.hs +258/−0
- test/Test/Size/Ap/Let/Let080.hs +292/−0
- test/Test/Size/Ap/Let/Let090.hs +326/−0
- test/Test/Size/Ap/Let/Let100.hs +360/−0
- test/Test/Size/HList/Baseline/Baseline010.hs +20/−0
- test/Test/Size/HList/Baseline/Baseline020.hs +31/−0
- test/Test/Size/HList/Baseline/Baseline030.hs +42/−0
- test/Test/Size/HList/Baseline/Baseline040.hs +53/−0
- test/Test/Size/HList/Baseline/Baseline050.hs +64/−0
- test/Test/Size/HList/Baseline/Baseline060.hs +75/−0
- test/Test/Size/HList/Baseline/Baseline070.hs +86/−0
- test/Test/Size/HList/Baseline/Baseline080.hs +97/−0
- test/Test/Size/HList/Baseline/Baseline090.hs +108/−0
- test/Test/Size/HList/Baseline/Baseline100.hs +119/−0
- test/Test/Size/HList/Index/Ix010.hs +17/−0
- test/Test/Size/HList/Index/Ix020.hs +28/−0
- test/Test/Size/HList/Index/Ix030.hs +39/−0
- test/Test/Size/HList/Index/Ix040.hs +50/−0
- test/Test/Size/HList/Index/Ix050.hs +61/−0
- test/Test/Size/HList/Index/Ix060.hs +72/−0
- test/Test/Size/HList/Index/Ix070.hs +83/−0
- test/Test/Size/HList/Index/Ix080.hs +94/−0
- test/Test/Size/HList/Index/Ix090.hs +105/−0
- test/Test/Size/HList/Index/Ix100.hs +116/−0
- test/Test/Size/HList/LetAs/LetAs010.hs +24/−0
- test/Test/Size/HList/LetAs/LetAs020.hs +36/−0
- test/Test/Size/HList/LetAs/LetAs030.hs +48/−0
- test/Test/Size/HList/LetAs/LetAs040.hs +60/−0
- test/Test/Size/HList/LetAs/LetAs050.hs +72/−0
- test/Test/Size/HList/LetAs/LetAs060.hs +84/−0
- test/Test/Size/HList/LetAs/LetAs070.hs +96/−0
- test/Test/Size/HList/LetAs/LetAs080.hs +108/−0
- test/Test/Size/HList/LetAs/LetAs090.hs +120/−0
- test/Test/Size/HList/LetAs/LetAs100.hs +132/−0
- test/Test/Size/HList/LetAsCPS/LetAsCPS010.hs +23/−0
- test/Test/Size/HList/LetAsCPS/LetAsCPS020.hs +34/−0
- test/Test/Size/HList/LetAsCPS/LetAsCPS030.hs +45/−0
- test/Test/Size/HList/LetAsCPS/LetAsCPS040.hs +56/−0
- test/Test/Size/HList/LetAsCPS/LetAsCPS050.hs +67/−0
- test/Test/Size/HList/LetAsCPS/LetAsCPS060.hs +78/−0
- test/Test/Size/HList/LetAsCPS/LetAsCPS070.hs +89/−0
- test/Test/Size/HList/LetAsCPS/LetAsCPS080.hs +100/−0
- test/Test/Size/HList/LetAsCPS/LetAsCPS090.hs +111/−0
- test/Test/Size/HList/LetAsCPS/LetAsCPS100.hs +122/−0
- test/Test/WithoutPlugin.hs +101/−0
- test/TestTypeLet.hs +10/−0
- typelet.cabal +226/−0
+ 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