[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 12 commits: Do not use mkCast during typechecking
by Marge Bot (@marge-bot) 18 May '26
by Marge Bot (@marge-bot) 18 May '26
18 May '26
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
c6acdd1b by Simon Peyton Jones at 2026-05-18T02:59:21-04:00
Do not use mkCast during typechecking
This commit fixes #27219. The problem was that the typechecker was using
`mkCast`, whose assertion checks legitimately fail when applied to types
that contain unification variables.
- - - - -
e4c444a0 by Simon Peyton Jones at 2026-05-18T02:59:22-04:00
Major refactor of the Simplifier
The main payload of this patch is to refactor the Simplifer to avoid
repeated simplification when using Plan (AFTER) for rule rewrites.
The need for this was shown up by #26989.
See Note [Avoid repeated simplification] in GHC.Core.Opt.Simplify.Iteration.
Related refactoring:
* Refactor the two fields `sc_dup` and `sc_env` in `ApplyToVal` into one, `sc_env`.
Reason: the envt is irrelevant in the "simplified" case, so the data type describes
the possiblitiies much more accurately now.
* Some refactoring in `knownCon` to split off `wrapDataConFloats`.
* Refactor `lookupRule` and its auxiliary functions to return `RuleMatch`,
a new data type. See Note [data RuleMatch] in GHC.Core. Ditto for BuiltinRule.
This RuleMatch returns fragments of the target in rm_args and rm_floats,
leaving `rm_rhs` to be the stuff from the RULE itself.
Doing this has routine consequences in GHC.Core.Opt.ConstantFold. Many changes
there but all routine.
* When doing occurrence analysis on RULEs, make the occ-info on the rule
binders relate just to the RHS, not the LHS. See (OUR1) in
Note Note [OccInfo in unfoldings and rules]
This means that Lint must not complain about the fact that the patterns
in the RULE mentions binders that are marked dead.
See Note [Dead occurrences] in GHC.Core.Lint.
I changed the Core pretty-printer so that it didn't suppress dead binders,
else I can't see those binders in RULEs. That led to quite a lot of testsuite wibbles.
* Refactor FloatBinds, so that it is used both by
`exprIsConApp_mabye` and by `lookupRule`
* Move the definition of FloatBinds out of GHc.Core.Make, into GHC.Core.
* Add FloatTick as an extra constructor.
* Refactor `lookupRule` to use `FloatBinds` instead of `BindWrapper`.
This refactor just shares more code.
(Rename GHC.Core.Opt.FloatOut.FloatBinds to FloatLets, to avoid gratuitious
name clash with GHC.Core.FloatBinds.)
Corecion optimisation
* In simpleOpt, when composing coercions, call new function `optTransCo`.
This is much lighter weight than full blown coercion optimisation.
* Make `GHC.Core.Opt.Arity.pushCoValArg` and `pushCoTyArg` return the
coercionLKind of the coercion. This saves recomputing that coercionLKind
at the key call sites in GHC.Core.Opt.Simplify.Iteration.pushCast.
* Rename `addCoerce` in GHC.Core.Simplify.Iteration to become `pushCast`.
* In the `ApplyToVal` case of `pushCast` we had a very unsavoury call to `simplArg`.
I eliminated it by adding a field `sc_cast` to `ApplyToVal` that records any
pending casts. Much nicer now. See Note [The sc_cast field of ApplyToVal].
* Don't optimise coercions if the type-substitution is empty.
See Note [Optimising coercions] in GHC.Core.Opt.Simplify.Iteration.
The fix for #26838 is dramatic. For the test in perf/compiler/T26839 we have
Compiler allocs: Before: 7,363M
After: 688M
Compile time goes down generally. Here are compiler-alloc changes
over 0.5%:
CoOpt_Read(normal) 729,184,920 -0.7%
CoOpt_Singletons(normal) 666,916,960 -4.6% GOOD
LargeRecord(normal) 1,227,056,876 +1.1%
T12227(normal) 256,827,604 -4.6% GOOD
T12425(optasm) 76,879,410 -0.8%
T12545(normal) 787,826,918 -10.8% GOOD
T12707(normal) 775,186,464 -0.9%
T13253(normal) 318,599,596 -0.8%
T14766(normal) 685,857,320 -1.0%
T15304(normal) 1,123,333,422 -2.2%
T15630(normal) 123,142,330 -2.6%
T15630a(normal) 123,092,100 -2.6%
T15703(normal) 299,751,682 -2.9% GOOD
T17516(normal) 964,072,280 +1.0%
T18223(normal) 367,016,820 -6.2% GOOD
T18730(optasm) 130,643,770 -3.3% GOOD
T20261(normal) 535,608,584 -0.7%
T21839c(normal) 340,340,436 -0.9%
T24984(normal) 85,568,392 -1.9%
T3064(normal) 174,631,992 -1.2%
T3294(normal) 1,215,886,432 -0.7%
T5030(normal) 141,449,704 -17.2% GOOD
T5321Fun(normal) 258,484,744 -1.9%
T8095(normal) 770,532,232 -2.7%
T9630(normal) 858,423,408 -14.5% GOOD
T9872c(normal) 1,591,709,448 +0.7%
info_table_map_perf(normal) 19,700,614,458 -1.3%
geo. mean -0.7%
minimum -17.2%
maximum +1.1%
However, strangely there seems to be a 5.0% increase in CoOpt_Read in
the x86_64-linux-fedora43-validate+debug_info+ubsan job, although
there generally a /decrease/ in this test in other builds. The baseline
value looks strange. Anyway I'll just accept it.
Metric Decrease:
CoOpt_Singletons
T12227
T12545
T15703
T18223
T18730
T21839c
T5030
T9630
Metric Increase:
CoOpt_Read
- - - - -
54359609 by Vladislav Zavialov at 2026-05-18T02:59:23-04:00
Add type families: Tuple, Constraints, Tuple#, Sum# (#27179)
These type families map tuples of types to the corresponding Tuple<N>,
Tuple<N>#, CTuple<N>, and Sum<N># types. Some examples at N=2:
Tuple (Int, Bool) = Tuple2 Int Bool
Constraints (Show a, Eq a) = CTuple2 (Show a) (Eq a)
Tuple# (Int#, Float#) = Tuple2# Int# Float#
Sum# (Int#, Float#) = Sum2# Int# Float#
See GHC Proposal #145 "Non-punning list and tuple syntax".
To make the Sum# instance at N=64 possible, this patch also introduces
the Sum64# constructor declaration and bumps mAX_SUM_SIZE from 63 to 64.
Metric Increase:
ghc_experimental_dir
- - - - -
68827ac9 by fendor at 2026-05-18T02:59:23-04:00
Fix regression T27202: `:load` and `:add` work in GHCi
To fix the regression there are conceptually two major things that we
fix:
* We don't remove the `importDirs` from `interactive-session`
* When `:add`ing a module, we don't try to find them via PackageImports
* The PackageImport is wrong as we can't know the package-name at
this stage in ghc/UI.hs
What does it mean to not remove the `importDirs` from
`interactive-session`?
It means that, given some initial `DynFlags`, we will use those
`importDirs` in `interactive-session`.
The initial `DynFlags`, however, depend on how you initialise the GHC
session.
For a simple session, initialised by
ghc -isrc -this-unit-id main
It is simple, just use the `DynFlags` given on the cli.
Thus, `main` and `interactive-session` will have the same `DynFlags`,
except for the `homeUnitId` and `interactive-session` depends on `main`
by construction of the GHCi session.
What about a multiple home unit session, though?
ghc -unit @unit1 -unit @unit2
What are the `DynFlags` in this cli invocation? It shouldn't be either
`@unti1` nor `@unit2`, as the order shouldn't matter or any other
implicit condition.
For consistency, we decide that the initial `DynFlags` are the top
`DynFlags` on the cli, ignoring `-unit` flags.
Thus, in this example, there are no `importsDirs` regardless of what we
might find in `@unit1` and `@unit2`.
But in this invocation:
ghc -isrc -unit @unit1 -unit @unit2
The `interactive-session` will have the `importsDirs` `src`.
Note, `-isrc` will be inherited in `@unit1` and `@unit2`, so you need to
explicitly use `-i` to clear the `importsDirs`, in order to avoid
accidentally adding `src` as an import directory to all other home
units.
This fix has been made possible by the improvements introduced in
!15888, which avoids ambiguity when a home unit shares the `importsDirs`
with the `interactive-session`, on top of being much faster for multiple
home units.
Adds regression tests for T27202 for `:load`ing and `:add`ing modules
that are located in import directories.
- - - - -
f5ad0150 by fendor at 2026-05-18T02:59:24-04:00
Use home unit package db stacks in GHCi prompt and session unit
In order to import modules from home unit dependencies (e.g., `Data.Map`),
the ghci prompt unit needs to populate its `UnitState`.
This is tricky to handle correctly, which `PackageDBFlag`s should we use
to populate the `UnitState`?
We decide, the most intuitive solution for users is to depend on all
`PackageDBFlag`s, so that any dependency can be imported in GHCi.
This assumes consistency in the `PackageDBFlag`s, so no two home units
specify `PackageDBFlag`s that are inconsistent with each other.
We could simply concat all the `PackageDBFlag`s of the existing home
units, but later `PackageDBFlag`s shadow earlier ones, leading to the
last processed home units' `PackageDBFlag`s to shadow the earlier ones.
This is hard to fix, we need to give users the capability to provide ghc
options for the ghci prompt home unit.
However, as this is considerably more work, we decided on an
approximation that should work out most of the time.
Package Db stacks in cabal and stack follow a certain structure:
-no-user-package-db > -package-db $cabal-store > -package-db $local-db
The first two arguments are always the same, namely the
`-no-user-package-db` and `-package-db`.
We compute the longest common prefix over all home units, and use that
as the start of the package db stack. Then, over the rest of the
`PackageDBFlag`s, we simply take the union and append them to our
initial stack.
We assume, that the rest of package dbs only defines very few, "local"
units that are usually not shadowing each other.
This allows us to get a relatively consistent package database stack for
the ghci prompt home unit.
Similar reasoning applies to the session unit in order to add modules to
the session and have dependencies available in the module.
We do something similar for `-package` flags, to make sure only the
correct units are actually visible in the ghci session.
This time, we simply take the union of all `PackageFlag`s, allowing us
to import modules from the home unit dependencies.
In the future, it would be beneficial to allow the user to provide the
exact ghc options to control the visibilities. For now, this will have
to do.
- - - - -
c4457765 by Wen Kokke at 2026-05-18T02:59:24-04:00
rts: Add IPE event class for -l
This commit adds a new IPE event class to the -l RTS flag.
Previously, IPE events were enabled unconditionally.
However, the IPE events can easily grow to hundreds or thousands of megabytes.
With the new event class you can pass, e.g., -l-I to disable IPE events.
- - - - -
641e73b5 by Wen Kokke at 2026-05-18T02:59:25-04:00
ghc-internal: Add TraceFlags.traceIPE
- - - - -
51dd2b0c by Wen Kokke at 2026-05-18T02:59:25-04:00
testsuite: Add test for TraceFlags.traceIpe
- - - - -
11a4f6e8 by Wen Kokke at 2026-05-18T02:59:25-04:00
ghc-internal: Add DebugFlags.ipe
- - - - -
40d1e212 by Wen Kokke at 2026-05-18T02:59:25-04:00
testsuite: Add test for DebugFlags.ipe
- - - - -
635f3d7f by Duncan Coutts at 2026-05-18T02:59:26-04:00
Document removal of the signal-based interval timer
Update mentions within the RTS section of the users guide.
Add a changelog entry.
- - - - -
31528dd9 by Duncan Coutts at 2026-05-18T02:59:26-04:00
Fix section for an recent changelog entry
- - - - -
164 changed files:
- + changelog.d/T27202
- changelog.d/dynamic-trace-flags
- + changelog.d/ipe-event-class
- + changelog.d/lib-add-tuple-tyfam-27179
- + changelog.d/no-more-timer-signal
- compiler/GHC/Core.hs
- compiler/GHC/Core/Coercion.hs
- compiler/GHC/Core/Coercion/Opt.hs
- compiler/GHC/Core/Lint.hs
- compiler/GHC/Core/Make.hs
- compiler/GHC/Core/Opt/Arity.hs
- compiler/GHC/Core/Opt/ConstantFold.hs
- compiler/GHC/Core/Opt/FloatIn.hs
- compiler/GHC/Core/Opt/FloatOut.hs
- compiler/GHC/Core/Opt/OccurAnal.hs
- compiler/GHC/Core/Opt/Simplify/Env.hs
- compiler/GHC/Core/Opt/Simplify/Iteration.hs
- compiler/GHC/Core/Opt/Simplify/Utils.hs
- compiler/GHC/Core/Opt/SpecConstr.hs
- compiler/GHC/Core/Opt/Specialise.hs
- compiler/GHC/Core/Ppr.hs
- compiler/GHC/Core/Rules.hs
- compiler/GHC/Core/SimpleOpt.hs
- compiler/GHC/Core/TyCo/Subst.hs
- compiler/GHC/CoreToStg/Prep.hs
- compiler/GHC/Data/List/SetOps.hs
- compiler/GHC/Driver/Config/Core/Lint.hs
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/HsToCore/Pmc/Solver.hs
- compiler/GHC/IfaceToCore.hs
- compiler/GHC/Settings/Constants.hs
- compiler/GHC/Tc/Types/Evidence.hs
- compiler/GHC/Types/Id/Make.hs
- compiler/GHC/Unit/State.hs
- docs/users_guide/profiling.rst
- docs/users_guide/runtime_control.rst
- ghc/GHCi/UI.hs
- ghc/Main.hs
- libraries/base/src/GHC/Base.hs
- libraries/base/src/GHC/Exts.hs
- libraries/ghc-experimental/src/Data/Sum/Experimental.hs
- libraries/ghc-experimental/src/Data/Tuple/Experimental.hs
- libraries/ghc-internal/src/GHC/Internal/Base.hs
- libraries/ghc-internal/src/GHC/Internal/Exts.hs
- libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc
- libraries/ghc-internal/src/GHC/Internal/Types.hs
- rts/IPE.c
- rts/RtsFlags.c
- rts/Trace.c
- rts/Trace.h
- rts/include/rts/EventLogWriter.h
- rts/include/rts/Flags.h
- testsuite/tests/codeGen/should_compile/T25177.stderr
- testsuite/tests/deSugar/should_compile/T13208.stdout
- testsuite/tests/driver/fat-iface/fat014.stdout
- + testsuite/tests/ghci/prog-mhu006/Makefile
- + testsuite/tests/ghci/prog-mhu006/a/A.hs
- + testsuite/tests/ghci/prog-mhu006/all.T
- + testsuite/tests/ghci/prog-mhu006/b/B.hs
- + testsuite/tests/ghci/prog-mhu006/prog-mhu006a.script
- + testsuite/tests/ghci/prog-mhu006/prog-mhu006a.stdout
- + testsuite/tests/ghci/prog-mhu006/unitA
- + testsuite/tests/ghci/prog-mhu006/unitB
- testsuite/tests/ghci/prog018/prog018.stdout
- testsuite/tests/ghci/prog020/Makefile
- testsuite/tests/ghci/prog020/all.T
- testsuite/tests/ghci/prog020/ghci.prog020.script → testsuite/tests/ghci/prog020/ghci.prog020a.script
- testsuite/tests/ghci/prog020/ghci.prog020.stderr → testsuite/tests/ghci/prog020/ghci.prog020a.stderr
- testsuite/tests/ghci/prog020/ghci.prog020.stdout → testsuite/tests/ghci/prog020/ghci.prog020a.stdout
- + testsuite/tests/ghci/prog020/ghci.prog020b.script
- + testsuite/tests/ghci/prog020/ghci.prog020b.stderr
- + testsuite/tests/ghci/prog020/ghci.prog020b.stdout
- + testsuite/tests/ghci/prog023/Makefile
- + testsuite/tests/ghci/prog023/all.T
- + testsuite/tests/ghci/prog023/prog023a.script
- + testsuite/tests/ghci/prog023/prog023a.stdout
- + testsuite/tests/ghci/prog023/prog023b.script
- + testsuite/tests/ghci/prog023/prog023b.stdout
- + testsuite/tests/ghci/prog023/src/A.hs
- + testsuite/tests/ghci/prog024/Makefile
- + testsuite/tests/ghci/prog024/all.T
- + testsuite/tests/ghci/prog024/prog024a.script
- + testsuite/tests/ghci/prog024/prog024a.stdout
- + testsuite/tests/ghci/prog024/prog024b.script
- + testsuite/tests/ghci/prog024/prog024b.stdout
- + testsuite/tests/ghci/prog024/prog024c.script
- + testsuite/tests/ghci/prog024/prog024c.stderr
- + testsuite/tests/ghci/prog024/prog024c.stdout
- + testsuite/tests/ghci/prog024/prog024d.script
- + testsuite/tests/ghci/prog024/prog024d.stderr
- + testsuite/tests/ghci/prog024/prog024d.stdout
- + testsuite/tests/ghci/prog024/prog024e.script
- + testsuite/tests/ghci/prog024/prog024e.stdout
- + testsuite/tests/ghci/prog024/prog024f.script
- + testsuite/tests/ghci/prog024/prog024f.stdout
- + testsuite/tests/ghci/prog024/src/A.hs
- + testsuite/tests/ghci/prog024/src/B.hs
- + testsuite/tests/ghci/prog025/Makefile
- + testsuite/tests/ghci/prog025/a/A.hs
- + testsuite/tests/ghci/prog025/all.T
- + testsuite/tests/ghci/prog025/prog025a.script
- + testsuite/tests/ghci/prog025/prog025a.stdout
- + testsuite/tests/ghci/prog025/prog025b.script
- + testsuite/tests/ghci/prog025/prog025b.stdout
- + testsuite/tests/ghci/prog025/testpkg/Test.hs
- + testsuite/tests/ghci/prog025/testpkg/testpkg-0.1.0.0.pkg
- + testsuite/tests/ghci/prog025/testpkg/testpkg-0.2.0.0.pkg
- + testsuite/tests/ghci/prog025/unitA
- testsuite/tests/ghci/scripts/ListTuplePunsPprNoAbbrevTuple.stdout
- testsuite/tests/ghci/scripts/T13997.stdout
- testsuite/tests/ghci/scripts/T1914.stdout
- testsuite/tests/ghci/scripts/T20217.stdout
- testsuite/tests/ghci/scripts/T8042.stdout
- testsuite/tests/ghci/scripts/T8042recomp.stdout
- testsuite/tests/ghci/scripts/all.T
- testsuite/tests/ghci/should_run/T10920.stderr
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
- testsuite/tests/interface-stability/ghc-prim-exports.stdout
- testsuite/tests/interface-stability/ghc-prim-exports.stdout-mingw32
- testsuite/tests/linters/notes.stdout
- testsuite/tests/numeric/should_compile/T15547.stderr
- testsuite/tests/numeric/should_compile/T20347.stderr
- testsuite/tests/numeric/should_compile/T20374.stderr
- testsuite/tests/numeric/should_compile/T20376.stderr
- testsuite/tests/parser/should_compile/ListTuplePunsSuccess1.hs
- testsuite/tests/parser/should_compile/all.T
- + testsuite/tests/parser/should_fail/ListTuplePunsFail6.hs
- + testsuite/tests/parser/should_fail/ListTuplePunsFail6.stderr
- testsuite/tests/parser/should_fail/all.T
- testsuite/tests/parser/should_run/ListTuplePunsConstraints.hs
- + testsuite/tests/perf/compiler/T26989.hs
- + testsuite/tests/perf/compiler/T26989a.hs
- testsuite/tests/perf/compiler/all.T
- testsuite/tests/printer/T18052a.stderr
- testsuite/tests/profiling/should_run/callstack001.stdout
- + testsuite/tests/rts/T25275/DebugIpe.hs
- + testsuite/tests/rts/T25275/T25275_A.stdout
- + testsuite/tests/rts/T25275/T25275_B.stdout
- + testsuite/tests/rts/T25275/T25275_C.stdout
- + testsuite/tests/rts/T25275/T25275_D.stdout
- + testsuite/tests/rts/T25275/TraceIpe.hs
- + testsuite/tests/rts/T25275/all.T
- testsuite/tests/simplCore/should_compile/DsSpecPragmas.stderr
- testsuite/tests/simplCore/should_compile/RewriteHigherOrderPatterns.stderr
- testsuite/tests/simplCore/should_compile/T15205.stderr
- testsuite/tests/simplCore/should_compile/T18668.stderr
- testsuite/tests/simplCore/should_compile/T19246.stderr
- testsuite/tests/simplCore/should_compile/T19599.stderr
- testsuite/tests/simplCore/should_compile/T19599a.stderr
- testsuite/tests/simplCore/should_compile/T21917.stderr
- testsuite/tests/simplCore/should_compile/T23074.stderr
- testsuite/tests/simplCore/should_compile/T24359a.stderr
- testsuite/tests/simplCore/should_compile/T25160.stderr
- testsuite/tests/simplCore/should_compile/T25718c.stderr-ws-32
- testsuite/tests/simplCore/should_compile/T25718c.stderr-ws-64
- testsuite/tests/simplCore/should_compile/T26051.stderr
- testsuite/tests/simplCore/should_compile/T26116.stderr
- testsuite/tests/simplCore/should_compile/T8331.stderr
- testsuite/tests/simplCore/should_compile/T8848a.stderr
- testsuite/tests/simplCore/should_compile/spec004.stderr
- testsuite/tests/typecheck/should_compile/T13032.stderr
- + testsuite/tests/typecheck/should_compile/T23135.hs
- testsuite/tests/typecheck/should_compile/all.T
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f35007a36c04c8b76b8e3b43a42baf…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f35007a36c04c8b76b8e3b43a42baf…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 12 commits: Do not use mkCast during typechecking
by Marge Bot (@marge-bot) 18 May '26
by Marge Bot (@marge-bot) 18 May '26
18 May '26
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
c5199fe4 by Simon Peyton Jones at 2026-05-17T21:05:29-04:00
Do not use mkCast during typechecking
This commit fixes #27219. The problem was that the typechecker was using
`mkCast`, whose assertion checks legitimately fail when applied to types
that contain unification variables.
- - - - -
5b844ed5 by Simon Peyton Jones at 2026-05-17T21:05:29-04:00
Major refactor of the Simplifier
The main payload of this patch is to refactor the Simplifer to avoid
repeated simplification when using Plan (AFTER) for rule rewrites.
The need for this was shown up by #26989.
See Note [Avoid repeated simplification] in GHC.Core.Opt.Simplify.Iteration.
Related refactoring:
* Refactor the two fields `sc_dup` and `sc_env` in `ApplyToVal` into one, `sc_env`.
Reason: the envt is irrelevant in the "simplified" case, so the data type describes
the possiblitiies much more accurately now.
* Some refactoring in `knownCon` to split off `wrapDataConFloats`.
* Refactor `lookupRule` and its auxiliary functions to return `RuleMatch`,
a new data type. See Note [data RuleMatch] in GHC.Core. Ditto for BuiltinRule.
This RuleMatch returns fragments of the target in rm_args and rm_floats,
leaving `rm_rhs` to be the stuff from the RULE itself.
Doing this has routine consequences in GHC.Core.Opt.ConstantFold. Many changes
there but all routine.
* When doing occurrence analysis on RULEs, make the occ-info on the rule
binders relate just to the RHS, not the LHS. See (OUR1) in
Note Note [OccInfo in unfoldings and rules]
This means that Lint must not complain about the fact that the patterns
in the RULE mentions binders that are marked dead.
See Note [Dead occurrences] in GHC.Core.Lint.
I changed the Core pretty-printer so that it didn't suppress dead binders,
else I can't see those binders in RULEs. That led to quite a lot of testsuite wibbles.
* Refactor FloatBinds, so that it is used both by
`exprIsConApp_mabye` and by `lookupRule`
* Move the definition of FloatBinds out of GHc.Core.Make, into GHC.Core.
* Add FloatTick as an extra constructor.
* Refactor `lookupRule` to use `FloatBinds` instead of `BindWrapper`.
This refactor just shares more code.
(Rename GHC.Core.Opt.FloatOut.FloatBinds to FloatLets, to avoid gratuitious
name clash with GHC.Core.FloatBinds.)
Corecion optimisation
* In simpleOpt, when composing coercions, call new function `optTransCo`.
This is much lighter weight than full blown coercion optimisation.
* Make `GHC.Core.Opt.Arity.pushCoValArg` and `pushCoTyArg` return the
coercionLKind of the coercion. This saves recomputing that coercionLKind
at the key call sites in GHC.Core.Opt.Simplify.Iteration.pushCast.
* Rename `addCoerce` in GHC.Core.Simplify.Iteration to become `pushCast`.
* In the `ApplyToVal` case of `pushCast` we had a very unsavoury call to `simplArg`.
I eliminated it by adding a field `sc_cast` to `ApplyToVal` that records any
pending casts. Much nicer now. See Note [The sc_cast field of ApplyToVal].
* Don't optimise coercions if the type-substitution is empty.
See Note [Optimising coercions] in GHC.Core.Opt.Simplify.Iteration.
The fix for #26838 is dramatic. For the test in perf/compiler/T26839 we have
Compiler allocs: Before: 7,363M
After: 688M
Compile time goes down generally. Here are compiler-alloc changes
over 0.5%:
CoOpt_Read(normal) 729,184,920 -0.7%
CoOpt_Singletons(normal) 666,916,960 -4.6% GOOD
LargeRecord(normal) 1,227,056,876 +1.1%
T12227(normal) 256,827,604 -4.6% GOOD
T12425(optasm) 76,879,410 -0.8%
T12545(normal) 787,826,918 -10.8% GOOD
T12707(normal) 775,186,464 -0.9%
T13253(normal) 318,599,596 -0.8%
T14766(normal) 685,857,320 -1.0%
T15304(normal) 1,123,333,422 -2.2%
T15630(normal) 123,142,330 -2.6%
T15630a(normal) 123,092,100 -2.6%
T15703(normal) 299,751,682 -2.9% GOOD
T17516(normal) 964,072,280 +1.0%
T18223(normal) 367,016,820 -6.2% GOOD
T18730(optasm) 130,643,770 -3.3% GOOD
T20261(normal) 535,608,584 -0.7%
T21839c(normal) 340,340,436 -0.9%
T24984(normal) 85,568,392 -1.9%
T3064(normal) 174,631,992 -1.2%
T3294(normal) 1,215,886,432 -0.7%
T5030(normal) 141,449,704 -17.2% GOOD
T5321Fun(normal) 258,484,744 -1.9%
T8095(normal) 770,532,232 -2.7%
T9630(normal) 858,423,408 -14.5% GOOD
T9872c(normal) 1,591,709,448 +0.7%
info_table_map_perf(normal) 19,700,614,458 -1.3%
geo. mean -0.7%
minimum -17.2%
maximum +1.1%
However, strangely there seems to be a 5.0% increase in CoOpt_Read in
the x86_64-linux-fedora43-validate+debug_info+ubsan job, although
there generally a /decrease/ in this test in other builds. The baseline
value looks strange. Anyway I'll just accept it.
Metric Decrease:
CoOpt_Singletons
T12227
T12545
T15703
T18223
T18730
T21839c
T5030
T9630
Metric Increase:
CoOpt_Read
- - - - -
ad3fa224 by Vladislav Zavialov at 2026-05-17T21:05:30-04:00
Add type families: Tuple, Constraints, Tuple#, Sum# (#27179)
These type families map tuples of types to the corresponding Tuple<N>,
Tuple<N>#, CTuple<N>, and Sum<N># types. Some examples at N=2:
Tuple (Int, Bool) = Tuple2 Int Bool
Constraints (Show a, Eq a) = CTuple2 (Show a) (Eq a)
Tuple# (Int#, Float#) = Tuple2# Int# Float#
Sum# (Int#, Float#) = Sum2# Int# Float#
See GHC Proposal #145 "Non-punning list and tuple syntax".
To make the Sum# instance at N=64 possible, this patch also introduces
the Sum64# constructor declaration and bumps mAX_SUM_SIZE from 63 to 64.
Metric Increase:
ghc_experimental_dir
- - - - -
9a6ecdb5 by fendor at 2026-05-17T21:05:31-04:00
Fix regression T27202: `:load` and `:add` work in GHCi
To fix the regression there are conceptually two major things that we
fix:
* We don't remove the `importDirs` from `interactive-session`
* When `:add`ing a module, we don't try to find them via PackageImports
* The PackageImport is wrong as we can't know the package-name at
this stage in ghc/UI.hs
What does it mean to not remove the `importDirs` from
`interactive-session`?
It means that, given some initial `DynFlags`, we will use those
`importDirs` in `interactive-session`.
The initial `DynFlags`, however, depend on how you initialise the GHC
session.
For a simple session, initialised by
ghc -isrc -this-unit-id main
It is simple, just use the `DynFlags` given on the cli.
Thus, `main` and `interactive-session` will have the same `DynFlags`,
except for the `homeUnitId` and `interactive-session` depends on `main`
by construction of the GHCi session.
What about a multiple home unit session, though?
ghc -unit @unit1 -unit @unit2
What are the `DynFlags` in this cli invocation? It shouldn't be either
`@unti1` nor `@unit2`, as the order shouldn't matter or any other
implicit condition.
For consistency, we decide that the initial `DynFlags` are the top
`DynFlags` on the cli, ignoring `-unit` flags.
Thus, in this example, there are no `importsDirs` regardless of what we
might find in `@unit1` and `@unit2`.
But in this invocation:
ghc -isrc -unit @unit1 -unit @unit2
The `interactive-session` will have the `importsDirs` `src`.
Note, `-isrc` will be inherited in `@unit1` and `@unit2`, so you need to
explicitly use `-i` to clear the `importsDirs`, in order to avoid
accidentally adding `src` as an import directory to all other home
units.
This fix has been made possible by the improvements introduced in
!15888, which avoids ambiguity when a home unit shares the `importsDirs`
with the `interactive-session`, on top of being much faster for multiple
home units.
Adds regression tests for T27202 for `:load`ing and `:add`ing modules
that are located in import directories.
- - - - -
260bdb10 by fendor at 2026-05-17T21:05:31-04:00
Use home unit package db stacks in GHCi prompt and session unit
In order to import modules from home unit dependencies (e.g., `Data.Map`),
the ghci prompt unit needs to populate its `UnitState`.
This is tricky to handle correctly, which `PackageDBFlag`s should we use
to populate the `UnitState`?
We decide, the most intuitive solution for users is to depend on all
`PackageDBFlag`s, so that any dependency can be imported in GHCi.
This assumes consistency in the `PackageDBFlag`s, so no two home units
specify `PackageDBFlag`s that are inconsistent with each other.
We could simply concat all the `PackageDBFlag`s of the existing home
units, but later `PackageDBFlag`s shadow earlier ones, leading to the
last processed home units' `PackageDBFlag`s to shadow the earlier ones.
This is hard to fix, we need to give users the capability to provide ghc
options for the ghci prompt home unit.
However, as this is considerably more work, we decided on an
approximation that should work out most of the time.
Package Db stacks in cabal and stack follow a certain structure:
-no-user-package-db > -package-db $cabal-store > -package-db $local-db
The first two arguments are always the same, namely the
`-no-user-package-db` and `-package-db`.
We compute the longest common prefix over all home units, and use that
as the start of the package db stack. Then, over the rest of the
`PackageDBFlag`s, we simply take the union and append them to our
initial stack.
We assume, that the rest of package dbs only defines very few, "local"
units that are usually not shadowing each other.
This allows us to get a relatively consistent package database stack for
the ghci prompt home unit.
Similar reasoning applies to the session unit in order to add modules to
the session and have dependencies available in the module.
We do something similar for `-package` flags, to make sure only the
correct units are actually visible in the ghci session.
This time, we simply take the union of all `PackageFlag`s, allowing us
to import modules from the home unit dependencies.
In the future, it would be beneficial to allow the user to provide the
exact ghc options to control the visibilities. For now, this will have
to do.
- - - - -
f92ec6c7 by Wen Kokke at 2026-05-17T21:05:32-04:00
rts: Add IPE event class for -l
This commit adds a new IPE event class to the -l RTS flag.
Previously, IPE events were enabled unconditionally.
However, the IPE events can easily grow to hundreds or thousands of megabytes.
With the new event class you can pass, e.g., -l-I to disable IPE events.
- - - - -
ea259e9e by Wen Kokke at 2026-05-17T21:05:33-04:00
ghc-internal: Add TraceFlags.traceIPE
- - - - -
908b4c6b by Wen Kokke at 2026-05-17T21:05:33-04:00
testsuite: Add test for TraceFlags.traceIpe
- - - - -
e4465b81 by Wen Kokke at 2026-05-17T21:05:33-04:00
ghc-internal: Add DebugFlags.ipe
- - - - -
49ac48ce by Wen Kokke at 2026-05-17T21:05:33-04:00
testsuite: Add test for DebugFlags.ipe
- - - - -
57b22938 by Duncan Coutts at 2026-05-17T21:05:34-04:00
Document removal of the signal-based interval timer
Update mentions within the RTS section of the users guide.
Add a changelog entry.
- - - - -
f35007a3 by Duncan Coutts at 2026-05-17T21:05:34-04:00
Fix section for an recent changelog entry
- - - - -
164 changed files:
- + changelog.d/T27202
- changelog.d/dynamic-trace-flags
- + changelog.d/ipe-event-class
- + changelog.d/lib-add-tuple-tyfam-27179
- + changelog.d/no-more-timer-signal
- compiler/GHC/Core.hs
- compiler/GHC/Core/Coercion.hs
- compiler/GHC/Core/Coercion/Opt.hs
- compiler/GHC/Core/Lint.hs
- compiler/GHC/Core/Make.hs
- compiler/GHC/Core/Opt/Arity.hs
- compiler/GHC/Core/Opt/ConstantFold.hs
- compiler/GHC/Core/Opt/FloatIn.hs
- compiler/GHC/Core/Opt/FloatOut.hs
- compiler/GHC/Core/Opt/OccurAnal.hs
- compiler/GHC/Core/Opt/Simplify/Env.hs
- compiler/GHC/Core/Opt/Simplify/Iteration.hs
- compiler/GHC/Core/Opt/Simplify/Utils.hs
- compiler/GHC/Core/Opt/SpecConstr.hs
- compiler/GHC/Core/Opt/Specialise.hs
- compiler/GHC/Core/Ppr.hs
- compiler/GHC/Core/Rules.hs
- compiler/GHC/Core/SimpleOpt.hs
- compiler/GHC/Core/TyCo/Subst.hs
- compiler/GHC/CoreToStg/Prep.hs
- compiler/GHC/Data/List/SetOps.hs
- compiler/GHC/Driver/Config/Core/Lint.hs
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/HsToCore/Pmc/Solver.hs
- compiler/GHC/IfaceToCore.hs
- compiler/GHC/Settings/Constants.hs
- compiler/GHC/Tc/Types/Evidence.hs
- compiler/GHC/Types/Id/Make.hs
- compiler/GHC/Unit/State.hs
- docs/users_guide/profiling.rst
- docs/users_guide/runtime_control.rst
- ghc/GHCi/UI.hs
- ghc/Main.hs
- libraries/base/src/GHC/Base.hs
- libraries/base/src/GHC/Exts.hs
- libraries/ghc-experimental/src/Data/Sum/Experimental.hs
- libraries/ghc-experimental/src/Data/Tuple/Experimental.hs
- libraries/ghc-internal/src/GHC/Internal/Base.hs
- libraries/ghc-internal/src/GHC/Internal/Exts.hs
- libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc
- libraries/ghc-internal/src/GHC/Internal/Types.hs
- rts/IPE.c
- rts/RtsFlags.c
- rts/Trace.c
- rts/Trace.h
- rts/include/rts/EventLogWriter.h
- rts/include/rts/Flags.h
- testsuite/tests/codeGen/should_compile/T25177.stderr
- testsuite/tests/deSugar/should_compile/T13208.stdout
- testsuite/tests/driver/fat-iface/fat014.stdout
- + testsuite/tests/ghci/prog-mhu006/Makefile
- + testsuite/tests/ghci/prog-mhu006/a/A.hs
- + testsuite/tests/ghci/prog-mhu006/all.T
- + testsuite/tests/ghci/prog-mhu006/b/B.hs
- + testsuite/tests/ghci/prog-mhu006/prog-mhu006a.script
- + testsuite/tests/ghci/prog-mhu006/prog-mhu006a.stdout
- + testsuite/tests/ghci/prog-mhu006/unitA
- + testsuite/tests/ghci/prog-mhu006/unitB
- testsuite/tests/ghci/prog018/prog018.stdout
- testsuite/tests/ghci/prog020/Makefile
- testsuite/tests/ghci/prog020/all.T
- testsuite/tests/ghci/prog020/ghci.prog020.script → testsuite/tests/ghci/prog020/ghci.prog020a.script
- testsuite/tests/ghci/prog020/ghci.prog020.stderr → testsuite/tests/ghci/prog020/ghci.prog020a.stderr
- testsuite/tests/ghci/prog020/ghci.prog020.stdout → testsuite/tests/ghci/prog020/ghci.prog020a.stdout
- + testsuite/tests/ghci/prog020/ghci.prog020b.script
- + testsuite/tests/ghci/prog020/ghci.prog020b.stderr
- + testsuite/tests/ghci/prog020/ghci.prog020b.stdout
- + testsuite/tests/ghci/prog023/Makefile
- + testsuite/tests/ghci/prog023/all.T
- + testsuite/tests/ghci/prog023/prog023a.script
- + testsuite/tests/ghci/prog023/prog023a.stdout
- + testsuite/tests/ghci/prog023/prog023b.script
- + testsuite/tests/ghci/prog023/prog023b.stdout
- + testsuite/tests/ghci/prog023/src/A.hs
- + testsuite/tests/ghci/prog024/Makefile
- + testsuite/tests/ghci/prog024/all.T
- + testsuite/tests/ghci/prog024/prog024a.script
- + testsuite/tests/ghci/prog024/prog024a.stdout
- + testsuite/tests/ghci/prog024/prog024b.script
- + testsuite/tests/ghci/prog024/prog024b.stdout
- + testsuite/tests/ghci/prog024/prog024c.script
- + testsuite/tests/ghci/prog024/prog024c.stderr
- + testsuite/tests/ghci/prog024/prog024c.stdout
- + testsuite/tests/ghci/prog024/prog024d.script
- + testsuite/tests/ghci/prog024/prog024d.stderr
- + testsuite/tests/ghci/prog024/prog024d.stdout
- + testsuite/tests/ghci/prog024/prog024e.script
- + testsuite/tests/ghci/prog024/prog024e.stdout
- + testsuite/tests/ghci/prog024/prog024f.script
- + testsuite/tests/ghci/prog024/prog024f.stdout
- + testsuite/tests/ghci/prog024/src/A.hs
- + testsuite/tests/ghci/prog024/src/B.hs
- + testsuite/tests/ghci/prog025/Makefile
- + testsuite/tests/ghci/prog025/a/A.hs
- + testsuite/tests/ghci/prog025/all.T
- + testsuite/tests/ghci/prog025/prog025a.script
- + testsuite/tests/ghci/prog025/prog025a.stdout
- + testsuite/tests/ghci/prog025/prog025b.script
- + testsuite/tests/ghci/prog025/prog025b.stdout
- + testsuite/tests/ghci/prog025/testpkg/Test.hs
- + testsuite/tests/ghci/prog025/testpkg/testpkg-0.1.0.0.pkg
- + testsuite/tests/ghci/prog025/testpkg/testpkg-0.2.0.0.pkg
- + testsuite/tests/ghci/prog025/unitA
- testsuite/tests/ghci/scripts/ListTuplePunsPprNoAbbrevTuple.stdout
- testsuite/tests/ghci/scripts/T13997.stdout
- testsuite/tests/ghci/scripts/T1914.stdout
- testsuite/tests/ghci/scripts/T20217.stdout
- testsuite/tests/ghci/scripts/T8042.stdout
- testsuite/tests/ghci/scripts/T8042recomp.stdout
- testsuite/tests/ghci/scripts/all.T
- testsuite/tests/ghci/should_run/T10920.stderr
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
- testsuite/tests/interface-stability/ghc-prim-exports.stdout
- testsuite/tests/interface-stability/ghc-prim-exports.stdout-mingw32
- testsuite/tests/linters/notes.stdout
- testsuite/tests/numeric/should_compile/T15547.stderr
- testsuite/tests/numeric/should_compile/T20347.stderr
- testsuite/tests/numeric/should_compile/T20374.stderr
- testsuite/tests/numeric/should_compile/T20376.stderr
- testsuite/tests/parser/should_compile/ListTuplePunsSuccess1.hs
- testsuite/tests/parser/should_compile/all.T
- + testsuite/tests/parser/should_fail/ListTuplePunsFail6.hs
- + testsuite/tests/parser/should_fail/ListTuplePunsFail6.stderr
- testsuite/tests/parser/should_fail/all.T
- testsuite/tests/parser/should_run/ListTuplePunsConstraints.hs
- + testsuite/tests/perf/compiler/T26989.hs
- + testsuite/tests/perf/compiler/T26989a.hs
- testsuite/tests/perf/compiler/all.T
- testsuite/tests/printer/T18052a.stderr
- testsuite/tests/profiling/should_run/callstack001.stdout
- + testsuite/tests/rts/T25275/DebugIpe.hs
- + testsuite/tests/rts/T25275/T25275_A.stdout
- + testsuite/tests/rts/T25275/T25275_B.stdout
- + testsuite/tests/rts/T25275/T25275_C.stdout
- + testsuite/tests/rts/T25275/T25275_D.stdout
- + testsuite/tests/rts/T25275/TraceIpe.hs
- + testsuite/tests/rts/T25275/all.T
- testsuite/tests/simplCore/should_compile/DsSpecPragmas.stderr
- testsuite/tests/simplCore/should_compile/RewriteHigherOrderPatterns.stderr
- testsuite/tests/simplCore/should_compile/T15205.stderr
- testsuite/tests/simplCore/should_compile/T18668.stderr
- testsuite/tests/simplCore/should_compile/T19246.stderr
- testsuite/tests/simplCore/should_compile/T19599.stderr
- testsuite/tests/simplCore/should_compile/T19599a.stderr
- testsuite/tests/simplCore/should_compile/T21917.stderr
- testsuite/tests/simplCore/should_compile/T23074.stderr
- testsuite/tests/simplCore/should_compile/T24359a.stderr
- testsuite/tests/simplCore/should_compile/T25160.stderr
- testsuite/tests/simplCore/should_compile/T25718c.stderr-ws-32
- testsuite/tests/simplCore/should_compile/T25718c.stderr-ws-64
- testsuite/tests/simplCore/should_compile/T26051.stderr
- testsuite/tests/simplCore/should_compile/T26116.stderr
- testsuite/tests/simplCore/should_compile/T8331.stderr
- testsuite/tests/simplCore/should_compile/T8848a.stderr
- testsuite/tests/simplCore/should_compile/spec004.stderr
- testsuite/tests/typecheck/should_compile/T13032.stderr
- + testsuite/tests/typecheck/should_compile/T23135.hs
- testsuite/tests/typecheck/should_compile/all.T
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0d8659989b365bacd3fcb79d4ed187…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0d8659989b365bacd3fcb79d4ed187…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 11 commits: Do not use mkCast during typechecking
by Marge Bot (@marge-bot) 17 May '26
by Marge Bot (@marge-bot) 17 May '26
17 May '26
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
eaf50ac2 by Simon Peyton Jones at 2026-05-17T16:30:05-04:00
Do not use mkCast during typechecking
This commit fixes #27219. The problem was that the typechecker was using
`mkCast`, whose assertion checks legitimately fail when applied to types
that contain unification variables.
- - - - -
07ae785d by Simon Peyton Jones at 2026-05-17T16:30:05-04:00
Major refactor of the Simplifier
The main payload of this patch is to refactor the Simplifer to avoid
repeated simplification when using Plan (AFTER) for rule rewrites.
The need for this was shown up by #26989.
See Note [Avoid repeated simplification] in GHC.Core.Opt.Simplify.Iteration.
Related refactoring:
* Refactor the two fields `sc_dup` and `sc_env` in `ApplyToVal` into one, `sc_env`.
Reason: the envt is irrelevant in the "simplified" case, so the data type describes
the possiblitiies much more accurately now.
* Some refactoring in `knownCon` to split off `wrapDataConFloats`.
* Refactor `lookupRule` and its auxiliary functions to return `RuleMatch`,
a new data type. See Note [data RuleMatch] in GHC.Core. Ditto for BuiltinRule.
This RuleMatch returns fragments of the target in rm_args and rm_floats,
leaving `rm_rhs` to be the stuff from the RULE itself.
Doing this has routine consequences in GHC.Core.Opt.ConstantFold. Many changes
there but all routine.
* When doing occurrence analysis on RULEs, make the occ-info on the rule
binders relate just to the RHS, not the LHS. See (OUR1) in
Note Note [OccInfo in unfoldings and rules]
This means that Lint must not complain about the fact that the patterns
in the RULE mentions binders that are marked dead.
See Note [Dead occurrences] in GHC.Core.Lint.
I changed the Core pretty-printer so that it didn't suppress dead binders,
else I can't see those binders in RULEs. That led to quite a lot of testsuite wibbles.
* Refactor FloatBinds, so that it is used both by
`exprIsConApp_mabye` and by `lookupRule`
* Move the definition of FloatBinds out of GHc.Core.Make, into GHC.Core.
* Add FloatTick as an extra constructor.
* Refactor `lookupRule` to use `FloatBinds` instead of `BindWrapper`.
This refactor just shares more code.
(Rename GHC.Core.Opt.FloatOut.FloatBinds to FloatLets, to avoid gratuitious
name clash with GHC.Core.FloatBinds.)
Corecion optimisation
* In simpleOpt, when composing coercions, call new function `optTransCo`.
This is much lighter weight than full blown coercion optimisation.
* Make `GHC.Core.Opt.Arity.pushCoValArg` and `pushCoTyArg` return the
coercionLKind of the coercion. This saves recomputing that coercionLKind
at the key call sites in GHC.Core.Opt.Simplify.Iteration.pushCast.
* Rename `addCoerce` in GHC.Core.Simplify.Iteration to become `pushCast`.
* In the `ApplyToVal` case of `pushCast` we had a very unsavoury call to `simplArg`.
I eliminated it by adding a field `sc_cast` to `ApplyToVal` that records any
pending casts. Much nicer now. See Note [The sc_cast field of ApplyToVal].
* Don't optimise coercions if the type-substitution is empty.
See Note [Optimising coercions] in GHC.Core.Opt.Simplify.Iteration.
The fix for #26838 is dramatic. For the test in perf/compiler/T26839 we have
Compiler allocs: Before: 7,363M
After: 688M
Compile time goes down generally. Here are compiler-alloc changes
over 0.5%:
CoOpt_Read(normal) 729,184,920 -0.7%
CoOpt_Singletons(normal) 666,916,960 -4.6% GOOD
LargeRecord(normal) 1,227,056,876 +1.1%
T12227(normal) 256,827,604 -4.6% GOOD
T12425(optasm) 76,879,410 -0.8%
T12545(normal) 787,826,918 -10.8% GOOD
T12707(normal) 775,186,464 -0.9%
T13253(normal) 318,599,596 -0.8%
T14766(normal) 685,857,320 -1.0%
T15304(normal) 1,123,333,422 -2.2%
T15630(normal) 123,142,330 -2.6%
T15630a(normal) 123,092,100 -2.6%
T15703(normal) 299,751,682 -2.9% GOOD
T17516(normal) 964,072,280 +1.0%
T18223(normal) 367,016,820 -6.2% GOOD
T18730(optasm) 130,643,770 -3.3% GOOD
T20261(normal) 535,608,584 -0.7%
T21839c(normal) 340,340,436 -0.9%
T24984(normal) 85,568,392 -1.9%
T3064(normal) 174,631,992 -1.2%
T3294(normal) 1,215,886,432 -0.7%
T5030(normal) 141,449,704 -17.2% GOOD
T5321Fun(normal) 258,484,744 -1.9%
T8095(normal) 770,532,232 -2.7%
T9630(normal) 858,423,408 -14.5% GOOD
T9872c(normal) 1,591,709,448 +0.7%
info_table_map_perf(normal) 19,700,614,458 -1.3%
geo. mean -0.7%
minimum -17.2%
maximum +1.1%
However, strangely there seems to be a 5.0% increase in CoOpt_Read in
the x86_64-linux-fedora43-validate+debug_info+ubsan job, although
there generally a /decrease/ in this test in other builds. The baseline
value looks strange. Anyway I'll just accept it.
Metric Decrease:
CoOpt_Singletons
T12227
T12545
T15703
T18223
T18730
T21839c
T5030
T9630
Metric Increase:
CoOpt_Read
- - - - -
d21e020d by fendor at 2026-05-17T16:30:06-04:00
Fix regression T27202: `:load` and `:add` work in GHCi
To fix the regression there are conceptually two major things that we
fix:
* We don't remove the `importDirs` from `interactive-session`
* When `:add`ing a module, we don't try to find them via PackageImports
* The PackageImport is wrong as we can't know the package-name at
this stage in ghc/UI.hs
What does it mean to not remove the `importDirs` from
`interactive-session`?
It means that, given some initial `DynFlags`, we will use those
`importDirs` in `interactive-session`.
The initial `DynFlags`, however, depend on how you initialise the GHC
session.
For a simple session, initialised by
ghc -isrc -this-unit-id main
It is simple, just use the `DynFlags` given on the cli.
Thus, `main` and `interactive-session` will have the same `DynFlags`,
except for the `homeUnitId` and `interactive-session` depends on `main`
by construction of the GHCi session.
What about a multiple home unit session, though?
ghc -unit @unit1 -unit @unit2
What are the `DynFlags` in this cli invocation? It shouldn't be either
`@unti1` nor `@unit2`, as the order shouldn't matter or any other
implicit condition.
For consistency, we decide that the initial `DynFlags` are the top
`DynFlags` on the cli, ignoring `-unit` flags.
Thus, in this example, there are no `importsDirs` regardless of what we
might find in `@unit1` and `@unit2`.
But in this invocation:
ghc -isrc -unit @unit1 -unit @unit2
The `interactive-session` will have the `importsDirs` `src`.
Note, `-isrc` will be inherited in `@unit1` and `@unit2`, so you need to
explicitly use `-i` to clear the `importsDirs`, in order to avoid
accidentally adding `src` as an import directory to all other home
units.
This fix has been made possible by the improvements introduced in
!15888, which avoids ambiguity when a home unit shares the `importsDirs`
with the `interactive-session`, on top of being much faster for multiple
home units.
Adds regression tests for T27202 for `:load`ing and `:add`ing modules
that are located in import directories.
- - - - -
1488ef59 by fendor at 2026-05-17T16:30:06-04:00
Use home unit package db stacks in GHCi prompt and session unit
In order to import modules from home unit dependencies (e.g., `Data.Map`),
the ghci prompt unit needs to populate its `UnitState`.
This is tricky to handle correctly, which `PackageDBFlag`s should we use
to populate the `UnitState`?
We decide, the most intuitive solution for users is to depend on all
`PackageDBFlag`s, so that any dependency can be imported in GHCi.
This assumes consistency in the `PackageDBFlag`s, so no two home units
specify `PackageDBFlag`s that are inconsistent with each other.
We could simply concat all the `PackageDBFlag`s of the existing home
units, but later `PackageDBFlag`s shadow earlier ones, leading to the
last processed home units' `PackageDBFlag`s to shadow the earlier ones.
This is hard to fix, we need to give users the capability to provide ghc
options for the ghci prompt home unit.
However, as this is considerably more work, we decided on an
approximation that should work out most of the time.
Package Db stacks in cabal and stack follow a certain structure:
-no-user-package-db > -package-db $cabal-store > -package-db $local-db
The first two arguments are always the same, namely the
`-no-user-package-db` and `-package-db`.
We compute the longest common prefix over all home units, and use that
as the start of the package db stack. Then, over the rest of the
`PackageDBFlag`s, we simply take the union and append them to our
initial stack.
We assume, that the rest of package dbs only defines very few, "local"
units that are usually not shadowing each other.
This allows us to get a relatively consistent package database stack for
the ghci prompt home unit.
Similar reasoning applies to the session unit in order to add modules to
the session and have dependencies available in the module.
We do something similar for `-package` flags, to make sure only the
correct units are actually visible in the ghci session.
This time, we simply take the union of all `PackageFlag`s, allowing us
to import modules from the home unit dependencies.
In the future, it would be beneficial to allow the user to provide the
exact ghc options to control the visibilities. For now, this will have
to do.
- - - - -
e7309be4 by Wen Kokke at 2026-05-17T16:30:07-04:00
rts: Add IPE event class for -l
This commit adds a new IPE event class to the -l RTS flag.
Previously, IPE events were enabled unconditionally.
However, the IPE events can easily grow to hundreds or thousands of megabytes.
With the new event class you can pass, e.g., -l-I to disable IPE events.
- - - - -
60769911 by Wen Kokke at 2026-05-17T16:30:07-04:00
ghc-internal: Add TraceFlags.traceIPE
- - - - -
1727357c by Wen Kokke at 2026-05-17T16:30:07-04:00
testsuite: Add test for TraceFlags.traceIpe
- - - - -
1110425b by Wen Kokke at 2026-05-17T16:30:08-04:00
ghc-internal: Add DebugFlags.ipe
- - - - -
66c4ef08 by Wen Kokke at 2026-05-17T16:30:08-04:00
testsuite: Add test for DebugFlags.ipe
- - - - -
60f611c9 by Duncan Coutts at 2026-05-17T16:30:08-04:00
Document removal of the signal-based interval timer
Update mentions within the RTS section of the users guide.
Add a changelog entry.
- - - - -
0d865998 by Duncan Coutts at 2026-05-17T16:30:08-04:00
Fix section for an recent changelog entry
- - - - -
142 changed files:
- + changelog.d/T27202
- changelog.d/dynamic-trace-flags
- + changelog.d/ipe-event-class
- + changelog.d/no-more-timer-signal
- compiler/GHC/Core.hs
- compiler/GHC/Core/Coercion.hs
- compiler/GHC/Core/Coercion/Opt.hs
- compiler/GHC/Core/Lint.hs
- compiler/GHC/Core/Make.hs
- compiler/GHC/Core/Opt/Arity.hs
- compiler/GHC/Core/Opt/ConstantFold.hs
- compiler/GHC/Core/Opt/FloatIn.hs
- compiler/GHC/Core/Opt/FloatOut.hs
- compiler/GHC/Core/Opt/OccurAnal.hs
- compiler/GHC/Core/Opt/Simplify/Env.hs
- compiler/GHC/Core/Opt/Simplify/Iteration.hs
- compiler/GHC/Core/Opt/Simplify/Utils.hs
- compiler/GHC/Core/Opt/SpecConstr.hs
- compiler/GHC/Core/Opt/Specialise.hs
- compiler/GHC/Core/Ppr.hs
- compiler/GHC/Core/Rules.hs
- compiler/GHC/Core/SimpleOpt.hs
- compiler/GHC/Core/TyCo/Subst.hs
- compiler/GHC/CoreToStg/Prep.hs
- compiler/GHC/Data/List/SetOps.hs
- compiler/GHC/Driver/Config/Core/Lint.hs
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/HsToCore/Pmc/Solver.hs
- compiler/GHC/IfaceToCore.hs
- compiler/GHC/Tc/Types/Evidence.hs
- compiler/GHC/Types/Id/Make.hs
- compiler/GHC/Unit/State.hs
- docs/users_guide/profiling.rst
- docs/users_guide/runtime_control.rst
- ghc/GHCi/UI.hs
- ghc/Main.hs
- libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc
- rts/IPE.c
- rts/RtsFlags.c
- rts/Trace.c
- rts/Trace.h
- rts/include/rts/EventLogWriter.h
- rts/include/rts/Flags.h
- testsuite/tests/codeGen/should_compile/T25177.stderr
- testsuite/tests/deSugar/should_compile/T13208.stdout
- testsuite/tests/driver/fat-iface/fat014.stdout
- + testsuite/tests/ghci/prog-mhu006/Makefile
- + testsuite/tests/ghci/prog-mhu006/a/A.hs
- + testsuite/tests/ghci/prog-mhu006/all.T
- + testsuite/tests/ghci/prog-mhu006/b/B.hs
- + testsuite/tests/ghci/prog-mhu006/prog-mhu006a.script
- + testsuite/tests/ghci/prog-mhu006/prog-mhu006a.stdout
- + testsuite/tests/ghci/prog-mhu006/unitA
- + testsuite/tests/ghci/prog-mhu006/unitB
- testsuite/tests/ghci/prog018/prog018.stdout
- testsuite/tests/ghci/prog020/Makefile
- testsuite/tests/ghci/prog020/all.T
- testsuite/tests/ghci/prog020/ghci.prog020.script → testsuite/tests/ghci/prog020/ghci.prog020a.script
- testsuite/tests/ghci/prog020/ghci.prog020.stderr → testsuite/tests/ghci/prog020/ghci.prog020a.stderr
- testsuite/tests/ghci/prog020/ghci.prog020.stdout → testsuite/tests/ghci/prog020/ghci.prog020a.stdout
- + testsuite/tests/ghci/prog020/ghci.prog020b.script
- + testsuite/tests/ghci/prog020/ghci.prog020b.stderr
- + testsuite/tests/ghci/prog020/ghci.prog020b.stdout
- + testsuite/tests/ghci/prog023/Makefile
- + testsuite/tests/ghci/prog023/all.T
- + testsuite/tests/ghci/prog023/prog023a.script
- + testsuite/tests/ghci/prog023/prog023a.stdout
- + testsuite/tests/ghci/prog023/prog023b.script
- + testsuite/tests/ghci/prog023/prog023b.stdout
- + testsuite/tests/ghci/prog023/src/A.hs
- + testsuite/tests/ghci/prog024/Makefile
- + testsuite/tests/ghci/prog024/all.T
- + testsuite/tests/ghci/prog024/prog024a.script
- + testsuite/tests/ghci/prog024/prog024a.stdout
- + testsuite/tests/ghci/prog024/prog024b.script
- + testsuite/tests/ghci/prog024/prog024b.stdout
- + testsuite/tests/ghci/prog024/prog024c.script
- + testsuite/tests/ghci/prog024/prog024c.stderr
- + testsuite/tests/ghci/prog024/prog024c.stdout
- + testsuite/tests/ghci/prog024/prog024d.script
- + testsuite/tests/ghci/prog024/prog024d.stderr
- + testsuite/tests/ghci/prog024/prog024d.stdout
- + testsuite/tests/ghci/prog024/prog024e.script
- + testsuite/tests/ghci/prog024/prog024e.stdout
- + testsuite/tests/ghci/prog024/prog024f.script
- + testsuite/tests/ghci/prog024/prog024f.stdout
- + testsuite/tests/ghci/prog024/src/A.hs
- + testsuite/tests/ghci/prog024/src/B.hs
- + testsuite/tests/ghci/prog025/Makefile
- + testsuite/tests/ghci/prog025/a/A.hs
- + testsuite/tests/ghci/prog025/all.T
- + testsuite/tests/ghci/prog025/prog025a.script
- + testsuite/tests/ghci/prog025/prog025a.stdout
- + testsuite/tests/ghci/prog025/prog025b.script
- + testsuite/tests/ghci/prog025/prog025b.stdout
- + testsuite/tests/ghci/prog025/testpkg/Test.hs
- + testsuite/tests/ghci/prog025/testpkg/testpkg-0.1.0.0.pkg
- + testsuite/tests/ghci/prog025/testpkg/testpkg-0.2.0.0.pkg
- + testsuite/tests/ghci/prog025/unitA
- testsuite/tests/ghci/scripts/T13997.stdout
- testsuite/tests/ghci/scripts/T1914.stdout
- testsuite/tests/ghci/scripts/T20217.stdout
- testsuite/tests/ghci/scripts/T8042.stdout
- testsuite/tests/ghci/scripts/T8042recomp.stdout
- testsuite/tests/ghci/should_run/T10920.stderr
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
- testsuite/tests/linters/notes.stdout
- testsuite/tests/numeric/should_compile/T15547.stderr
- testsuite/tests/numeric/should_compile/T20347.stderr
- testsuite/tests/numeric/should_compile/T20374.stderr
- testsuite/tests/numeric/should_compile/T20376.stderr
- + testsuite/tests/perf/compiler/T26989.hs
- + testsuite/tests/perf/compiler/T26989a.hs
- testsuite/tests/perf/compiler/all.T
- testsuite/tests/printer/T18052a.stderr
- + testsuite/tests/rts/T25275/DebugIpe.hs
- + testsuite/tests/rts/T25275/T25275_A.stdout
- + testsuite/tests/rts/T25275/T25275_B.stdout
- + testsuite/tests/rts/T25275/T25275_C.stdout
- + testsuite/tests/rts/T25275/T25275_D.stdout
- + testsuite/tests/rts/T25275/TraceIpe.hs
- + testsuite/tests/rts/T25275/all.T
- testsuite/tests/simplCore/should_compile/DsSpecPragmas.stderr
- testsuite/tests/simplCore/should_compile/RewriteHigherOrderPatterns.stderr
- testsuite/tests/simplCore/should_compile/T15205.stderr
- testsuite/tests/simplCore/should_compile/T18668.stderr
- testsuite/tests/simplCore/should_compile/T19246.stderr
- testsuite/tests/simplCore/should_compile/T19599.stderr
- testsuite/tests/simplCore/should_compile/T19599a.stderr
- testsuite/tests/simplCore/should_compile/T21917.stderr
- testsuite/tests/simplCore/should_compile/T23074.stderr
- testsuite/tests/simplCore/should_compile/T24359a.stderr
- testsuite/tests/simplCore/should_compile/T25160.stderr
- testsuite/tests/simplCore/should_compile/T25718c.stderr-ws-32
- testsuite/tests/simplCore/should_compile/T25718c.stderr-ws-64
- testsuite/tests/simplCore/should_compile/T26051.stderr
- testsuite/tests/simplCore/should_compile/T26116.stderr
- testsuite/tests/simplCore/should_compile/T8331.stderr
- testsuite/tests/simplCore/should_compile/T8848a.stderr
- testsuite/tests/simplCore/should_compile/spec004.stderr
- testsuite/tests/typecheck/should_compile/T13032.stderr
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/65dccb9f7ee2c79cec3b4020694b6e…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/65dccb9f7ee2c79cec3b4020694b6e…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/int-index/tuple-tyfam] Add type families: Tuple, Constraints, Tuple#, Sum# (#27179)
by Vladislav Zavialov (@int-index) 17 May '26
by Vladislav Zavialov (@int-index) 17 May '26
17 May '26
Vladislav Zavialov pushed to branch wip/int-index/tuple-tyfam at Glasgow Haskell Compiler / GHC
Commits:
e72e05b0 by Vladislav Zavialov at 2026-05-17T21:52:59+03:00
Add type families: Tuple, Constraints, Tuple#, Sum# (#27179)
These type families map tuples of types to the corresponding Tuple<N>,
Tuple<N>#, CTuple<N>, and Sum<N># types. Some examples at N=2:
Tuple (Int, Bool) = Tuple2 Int Bool
Constraints (Show a, Eq a) = CTuple2 (Show a) (Eq a)
Tuple# (Int#, Float#) = Tuple2# Int# Float#
Sum# (Int#, Float#) = Sum2# Int# Float#
See GHC Proposal #145 "Non-punning list and tuple syntax".
To make the Sum# instance at N=64 possible, this patch also introduces
the Sum64# constructor declaration and bumps mAX_SUM_SIZE from 63 to 64.
Metric Increase:
ghc_experimental_dir
- - - - -
24 changed files:
- + changelog.d/lib-add-tuple-tyfam-27179
- compiler/GHC/Settings/Constants.hs
- libraries/base/src/GHC/Base.hs
- libraries/base/src/GHC/Exts.hs
- libraries/ghc-experimental/src/Data/Sum/Experimental.hs
- libraries/ghc-experimental/src/Data/Tuple/Experimental.hs
- libraries/ghc-internal/src/GHC/Internal/Base.hs
- libraries/ghc-internal/src/GHC/Internal/Exts.hs
- libraries/ghc-internal/src/GHC/Internal/Types.hs
- testsuite/tests/ghci/scripts/ListTuplePunsPprNoAbbrevTuple.stdout
- testsuite/tests/ghci/scripts/all.T
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
- testsuite/tests/interface-stability/ghc-prim-exports.stdout
- testsuite/tests/interface-stability/ghc-prim-exports.stdout-mingw32
- testsuite/tests/parser/should_compile/ListTuplePunsSuccess1.hs
- testsuite/tests/parser/should_compile/all.T
- + testsuite/tests/parser/should_fail/ListTuplePunsFail6.hs
- + testsuite/tests/parser/should_fail/ListTuplePunsFail6.stderr
- testsuite/tests/parser/should_fail/all.T
- testsuite/tests/parser/should_run/ListTuplePunsConstraints.hs
- testsuite/tests/profiling/should_run/callstack001.stdout
- + testsuite/tests/typecheck/should_compile/T23135.hs
- testsuite/tests/typecheck/should_compile/all.T
Changes:
=====================================
changelog.d/lib-add-tuple-tyfam-27179
=====================================
@@ -0,0 +1,4 @@
+section: ghc-experimental
+synopsis: Define and export type families ``Tuple``, ``Constraints``, ``Tuple#``, ``Sum#`` (GHC Proposal `#475 <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0475-t…>`_ "Non-punning list and tuple syntax")
+issues: #27179
+mrs: !15898
=====================================
compiler/GHC/Settings/Constants.hs
=====================================
@@ -17,8 +17,8 @@ mAX_TUPLE_SIZE = 64 -- Should really match the number
mAX_CTUPLE_SIZE :: Int -- Constraint tuples
mAX_CTUPLE_SIZE = 64 -- Should match the number of decls in GHC.Classes
-mAX_SUM_SIZE :: Int -- We use 6 bits to record sum size,
-mAX_SUM_SIZE = 63 -- so max sum size is 63. Sadly inconsistent.
+mAX_SUM_SIZE :: Int
+mAX_SUM_SIZE = 64 -- Should match the number of decls in GHC.Internal.Types
-- | Default maximum depth for both class instance search and type family
-- reduction. See also #5395.
=====================================
libraries/base/src/GHC/Base.hs
=====================================
@@ -527,4 +527,5 @@ import GHC.Types hiding (
Sum61#,
Sum62#,
Sum63#,
+ Sum64#,
)
=====================================
libraries/base/src/GHC/Exts.hs
=====================================
@@ -500,4 +500,5 @@ import GHC.Types hiding (
Sum61#,
Sum62#,
Sum63#,
+ Sum64#,
)
=====================================
libraries/ghc-experimental/src/Data/Sum/Experimental.hs
=====================================
@@ -1,5 +1,6 @@
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE NoImplicitPrelude, MagicHash, UnboxedSums, NoListTuplePuns #-}
+{-# LANGUAGE ExplicitForAll, StandaloneKindSignatures, PolyKinds, DataKinds, TypeFamilyDependencies #-}
{-
Module : Data.Sum.Experimental
@@ -78,8 +79,83 @@ module Data.Sum.Experimental (
Sum61#,
Sum62#,
Sum63#,
+ Sum64#,
+
+ -- * Type families
+ TupleArgKind#,
+ Sum#,
) where
import GHC.Internal.Types
+import GHC.TypeLits
+import Data.Tuple.Experimental (TupleArgKind#)
default ()
+
+type Sum# :: forall (reps :: List RuntimeRep). TupleArgKind# reps -> TYPE (SumRep reps)
+type family Sum# ts where
+ Sum# () = TypeError (Text "GHC does not support empty unboxed sums. Consider Data.Void.Void instead.")
+ Sum# (a :: TYPE r) = TypeError (Text "GHC does not support unary unboxed sums. Consider Data.Tuple.Solo# instead.")
+ Sum# (a, b) = Sum2# a b
+ Sum# (a, b, c) = Sum3# a b c
+ Sum# (a, b, c, d) = Sum4# a b c d
+ Sum# (a, b, c, d, e) = Sum5# a b c d e
+ Sum# (a, b, c, d, e, f) = Sum6# a b c d e f
+ Sum# (a, b, c, d, e, f, g) = Sum7# a b c d e f g
+ Sum# (a, b, c, d, e, f, g, h) = Sum8# a b c d e f g h
+ Sum# (a, b, c, d, e, f, g, h, i) = Sum9# a b c d e f g h i
+ Sum# (a, b, c, d, e, f, g, h, i, j) = Sum10# a b c d e f g h i j
+ Sum# (a, b, c, d, e, f, g, h, i, j, k) = Sum11# a b c d e f g h i j k
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l) = Sum12# a b c d e f g h i j k l
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m) = Sum13# a b c d e f g h i j k l m
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = Sum14# a b c d e f g h i j k l m n
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = Sum15# a b c d e f g h i j k l m n o
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) = Sum16# a b c d e f g h i j k l m n o p
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) = Sum17# a b c d e f g h i j k l m n o p q
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) = Sum18# a b c d e f g h i j k l m n o p q r
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) = Sum19# a b c d e f g h i j k l m n o p q r s
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) = Sum20# a b c d e f g h i j k l m n o p q r s t
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) = Sum21# a b c d e f g h i j k l m n o p q r s t u
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) = Sum22# a b c d e f g h i j k l m n o p q r s t u v
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) = Sum23# a b c d e f g h i j k l m n o p q r s t u v w
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) = Sum24# a b c d e f g h i j k l m n o p q r s t u v w x
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) = Sum25# a b c d e f g h i j k l m n o p q r s t u v w x y
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) = Sum26# a b c d e f g h i j k l m n o p q r s t u v w x y z
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa) = Sum27# a b c d e f g h i j k l m n o p q r s t u v w x y z aa
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab) = Sum28# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac) = Sum29# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad) = Sum30# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae) = Sum31# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af) = Sum32# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag) = Sum33# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah) = Sum34# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai) = Sum35# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj) = Sum36# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak) = Sum37# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al) = Sum38# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am) = Sum39# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an) = Sum40# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao) = Sum41# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap) = Sum42# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq) = Sum43# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar) = Sum44# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as) = Sum45# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at) = Sum46# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au) = Sum47# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av) = Sum48# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw) = Sum49# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax) = Sum50# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay) = Sum51# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az) = Sum52# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba) = Sum53# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb) = Sum54# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc) = Sum55# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd) = Sum56# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be) = Sum57# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf) = Sum58# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg) = Sum59# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh) = Sum60# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi) = Sum61# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj) = Sum62# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk) = Sum63# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk
+ Sum# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl) = Sum64# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl
=====================================
libraries/ghc-experimental/src/Data/Tuple/Experimental.hs
=====================================
@@ -1,5 +1,6 @@
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE NoImplicitPrelude, MagicHash, UnboxedTuples, NoListTuplePuns #-}
+{-# LANGUAGE ExplicitForAll, StandaloneKindSignatures, PolyKinds, DataKinds, TypeFamilyDependencies #-}
{-
Module : Data.Tuple.Experimental
@@ -156,10 +157,427 @@ module Data.Tuple.Experimental (
CTuple62,
CTuple63,
CTuple64,
+
+ -- * Type families
+ TupleArgKind,
+ Tuple,
+ ConstraintsArgKind,
+ Constraints,
+ TupleArgKind#,
+ Tuple#,
) where
import GHC.Internal.Tuple
import GHC.Internal.Types
import GHC.Internal.Classes
+import GHC.TypeLits
default ()
+
+type TupleArgKind :: Nat -> Type
+type family TupleArgKind n = r | r -> n where
+ TupleArgKind 0 = Unit
+ TupleArgKind 1 = Type
+ TupleArgKind 2 = Tuple2 Type Type
+ TupleArgKind 3 = Tuple3 Type Type Type
+ TupleArgKind 4 = Tuple4 Type Type Type Type
+ TupleArgKind 5 = Tuple5 Type Type Type Type Type
+ TupleArgKind 6 = Tuple6 Type Type Type Type Type Type
+ TupleArgKind 7 = Tuple7 Type Type Type Type Type Type Type
+ TupleArgKind 8 = Tuple8 Type Type Type Type Type Type Type Type
+ TupleArgKind 9 = Tuple9 Type Type Type Type Type Type Type Type Type
+ TupleArgKind 10 = Tuple10 Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 11 = Tuple11 Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 12 = Tuple12 Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 13 = Tuple13 Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 14 = Tuple14 Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 15 = Tuple15 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 16 = Tuple16 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 17 = Tuple17 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 18 = Tuple18 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 19 = Tuple19 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 20 = Tuple20 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 21 = Tuple21 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 22 = Tuple22 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 23 = Tuple23 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 24 = Tuple24 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 25 = Tuple25 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 26 = Tuple26 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 27 = Tuple27 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 28 = Tuple28 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 29 = Tuple29 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 30 = Tuple30 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 31 = Tuple31 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 32 = Tuple32 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 33 = Tuple33 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 34 = Tuple34 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 35 = Tuple35 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 36 = Tuple36 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 37 = Tuple37 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 38 = Tuple38 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 39 = Tuple39 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 40 = Tuple40 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 41 = Tuple41 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 42 = Tuple42 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 43 = Tuple43 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 44 = Tuple44 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 45 = Tuple45 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 46 = Tuple46 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 47 = Tuple47 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 48 = Tuple48 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 49 = Tuple49 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 50 = Tuple50 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 51 = Tuple51 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 52 = Tuple52 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 53 = Tuple53 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 54 = Tuple54 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 55 = Tuple55 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 56 = Tuple56 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 57 = Tuple57 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 58 = Tuple58 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 59 = Tuple59 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 60 = Tuple60 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 61 = Tuple61 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 62 = Tuple62 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 63 = Tuple63 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+ TupleArgKind 64 = Tuple64 Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type Type
+
+type Tuple :: forall (n :: Nat). TupleArgKind n -> Type
+type family Tuple ts where
+ Tuple () = Unit
+ Tuple (a :: Type) = a
+ Tuple (a, b) = Tuple2 a b
+ Tuple (a, b, c) = Tuple3 a b c
+ Tuple (a, b, c, d) = Tuple4 a b c d
+ Tuple (a, b, c, d, e) = Tuple5 a b c d e
+ Tuple (a, b, c, d, e, f) = Tuple6 a b c d e f
+ Tuple (a, b, c, d, e, f, g) = Tuple7 a b c d e f g
+ Tuple (a, b, c, d, e, f, g, h) = Tuple8 a b c d e f g h
+ Tuple (a, b, c, d, e, f, g, h, i) = Tuple9 a b c d e f g h i
+ Tuple (a, b, c, d, e, f, g, h, i, j) = Tuple10 a b c d e f g h i j
+ Tuple (a, b, c, d, e, f, g, h, i, j, k) = Tuple11 a b c d e f g h i j k
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l) = Tuple12 a b c d e f g h i j k l
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m) = Tuple13 a b c d e f g h i j k l m
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = Tuple14 a b c d e f g h i j k l m n
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = Tuple15 a b c d e f g h i j k l m n o
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) = Tuple16 a b c d e f g h i j k l m n o p
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) = Tuple17 a b c d e f g h i j k l m n o p q
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) = Tuple18 a b c d e f g h i j k l m n o p q r
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) = Tuple19 a b c d e f g h i j k l m n o p q r s
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) = Tuple20 a b c d e f g h i j k l m n o p q r s t
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) = Tuple21 a b c d e f g h i j k l m n o p q r s t u
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) = Tuple22 a b c d e f g h i j k l m n o p q r s t u v
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) = Tuple23 a b c d e f g h i j k l m n o p q r s t u v w
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) = Tuple24 a b c d e f g h i j k l m n o p q r s t u v w x
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) = Tuple25 a b c d e f g h i j k l m n o p q r s t u v w x y
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) = Tuple26 a b c d e f g h i j k l m n o p q r s t u v w x y z
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa) = Tuple27 a b c d e f g h i j k l m n o p q r s t u v w x y z aa
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab) = Tuple28 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac) = Tuple29 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad) = Tuple30 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae) = Tuple31 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af) = Tuple32 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag) = Tuple33 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah) = Tuple34 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai) = Tuple35 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj) = Tuple36 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak) = Tuple37 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al) = Tuple38 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am) = Tuple39 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an) = Tuple40 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao) = Tuple41 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap) = Tuple42 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq) = Tuple43 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar) = Tuple44 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as) = Tuple45 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at) = Tuple46 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au) = Tuple47 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av) = Tuple48 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw) = Tuple49 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax) = Tuple50 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay) = Tuple51 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az) = Tuple52 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba) = Tuple53 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb) = Tuple54 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc) = Tuple55 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd) = Tuple56 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be) = Tuple57 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf) = Tuple58 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg) = Tuple59 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh) = Tuple60 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi) = Tuple61 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj) = Tuple62 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk) = Tuple63 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk
+ Tuple (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl) = Tuple64 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl
+
+type ConstraintsArgKind :: Nat -> Type
+type family ConstraintsArgKind n = r | r -> n where
+ ConstraintsArgKind 0 = Unit
+ ConstraintsArgKind 1 = Constraint
+ ConstraintsArgKind 2 = Tuple2 Constraint Constraint
+ ConstraintsArgKind 3 = Tuple3 Constraint Constraint Constraint
+ ConstraintsArgKind 4 = Tuple4 Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 5 = Tuple5 Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 6 = Tuple6 Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 7 = Tuple7 Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 8 = Tuple8 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 9 = Tuple9 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 10 = Tuple10 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 11 = Tuple11 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 12 = Tuple12 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 13 = Tuple13 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 14 = Tuple14 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 15 = Tuple15 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 16 = Tuple16 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 17 = Tuple17 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 18 = Tuple18 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 19 = Tuple19 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 20 = Tuple20 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 21 = Tuple21 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 22 = Tuple22 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 23 = Tuple23 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 24 = Tuple24 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 25 = Tuple25 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 26 = Tuple26 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 27 = Tuple27 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 28 = Tuple28 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 29 = Tuple29 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 30 = Tuple30 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 31 = Tuple31 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 32 = Tuple32 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 33 = Tuple33 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 34 = Tuple34 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 35 = Tuple35 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 36 = Tuple36 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 37 = Tuple37 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 38 = Tuple38 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 39 = Tuple39 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 40 = Tuple40 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 41 = Tuple41 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 42 = Tuple42 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 43 = Tuple43 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 44 = Tuple44 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 45 = Tuple45 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 46 = Tuple46 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 47 = Tuple47 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 48 = Tuple48 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 49 = Tuple49 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 50 = Tuple50 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 51 = Tuple51 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 52 = Tuple52 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 53 = Tuple53 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 54 = Tuple54 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 55 = Tuple55 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 56 = Tuple56 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 57 = Tuple57 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 58 = Tuple58 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 59 = Tuple59 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 60 = Tuple60 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 61 = Tuple61 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 62 = Tuple62 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 63 = Tuple63 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+ ConstraintsArgKind 64 = Tuple64 Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint Constraint
+
+type Constraints :: forall (n :: Nat). ConstraintsArgKind n -> Constraint
+type family Constraints ts where
+ Constraints () = CUnit
+ Constraints (a :: Constraint) = a
+ Constraints (a, b) = CTuple2 a b
+ Constraints (a, b, c) = CTuple3 a b c
+ Constraints (a, b, c, d) = CTuple4 a b c d
+ Constraints (a, b, c, d, e) = CTuple5 a b c d e
+ Constraints (a, b, c, d, e, f) = CTuple6 a b c d e f
+ Constraints (a, b, c, d, e, f, g) = CTuple7 a b c d e f g
+ Constraints (a, b, c, d, e, f, g, h) = CTuple8 a b c d e f g h
+ Constraints (a, b, c, d, e, f, g, h, i) = CTuple9 a b c d e f g h i
+ Constraints (a, b, c, d, e, f, g, h, i, j) = CTuple10 a b c d e f g h i j
+ Constraints (a, b, c, d, e, f, g, h, i, j, k) = CTuple11 a b c d e f g h i j k
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l) = CTuple12 a b c d e f g h i j k l
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m) = CTuple13 a b c d e f g h i j k l m
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = CTuple14 a b c d e f g h i j k l m n
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = CTuple15 a b c d e f g h i j k l m n o
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) = CTuple16 a b c d e f g h i j k l m n o p
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) = CTuple17 a b c d e f g h i j k l m n o p q
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) = CTuple18 a b c d e f g h i j k l m n o p q r
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) = CTuple19 a b c d e f g h i j k l m n o p q r s
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) = CTuple20 a b c d e f g h i j k l m n o p q r s t
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) = CTuple21 a b c d e f g h i j k l m n o p q r s t u
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) = CTuple22 a b c d e f g h i j k l m n o p q r s t u v
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) = CTuple23 a b c d e f g h i j k l m n o p q r s t u v w
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) = CTuple24 a b c d e f g h i j k l m n o p q r s t u v w x
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) = CTuple25 a b c d e f g h i j k l m n o p q r s t u v w x y
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) = CTuple26 a b c d e f g h i j k l m n o p q r s t u v w x y z
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa) = CTuple27 a b c d e f g h i j k l m n o p q r s t u v w x y z aa
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab) = CTuple28 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac) = CTuple29 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad) = CTuple30 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae) = CTuple31 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af) = CTuple32 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag) = CTuple33 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah) = CTuple34 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai) = CTuple35 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj) = CTuple36 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak) = CTuple37 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al) = CTuple38 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am) = CTuple39 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an) = CTuple40 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao) = CTuple41 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap) = CTuple42 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq) = CTuple43 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar) = CTuple44 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as) = CTuple45 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at) = CTuple46 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au) = CTuple47 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av) = CTuple48 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw) = CTuple49 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax) = CTuple50 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay) = CTuple51 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az) = CTuple52 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba) = CTuple53 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb) = CTuple54 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc) = CTuple55 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd) = CTuple56 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be) = CTuple57 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf) = CTuple58 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg) = CTuple59 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh) = CTuple60 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi) = CTuple61 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj) = CTuple62 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk) = CTuple63 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk
+ Constraints (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl) = CTuple64 a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl
+
+type TupleArgKind# :: List RuntimeRep -> Type
+type family TupleArgKind# reps where
+ TupleArgKind# [] = Unit
+ TupleArgKind# [r1] = TYPE r1
+ TupleArgKind# [a, b] = Tuple2 (TYPE a) (TYPE b)
+ TupleArgKind# [a, b, c] = Tuple3 (TYPE a) (TYPE b) (TYPE c)
+ TupleArgKind# [a, b, c, d] = Tuple4 (TYPE a) (TYPE b) (TYPE c) (TYPE d)
+ TupleArgKind# [a, b, c, d, e] = Tuple5 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e)
+ TupleArgKind# [a, b, c, d, e, f] = Tuple6 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f)
+ TupleArgKind# [a, b, c, d, e, f, g] = Tuple7 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g)
+ TupleArgKind# [a, b, c, d, e, f, g, h] = Tuple8 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i] = Tuple9 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j] = Tuple10 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k] = Tuple11 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l] = Tuple12 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m] = Tuple13 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n] = Tuple14 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o] = Tuple15 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p] = Tuple16 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q] = Tuple17 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r] = Tuple18 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s] = Tuple19 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t] = Tuple20 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u] = Tuple21 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v] = Tuple22 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w] = Tuple23 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x] = Tuple24 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y] = Tuple25 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z] = Tuple26 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa] = Tuple27 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab] = Tuple28 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac] = Tuple29 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad] = Tuple30 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae] = Tuple31 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af] = Tuple32 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag] = Tuple33 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah] = Tuple34 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai] = Tuple35 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj] = Tuple36 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak] = Tuple37 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al] = Tuple38 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am] = Tuple39 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an] = Tuple40 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao] = Tuple41 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap] = Tuple42 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq] = Tuple43 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar] = Tuple44 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as] = Tuple45 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at] = Tuple46 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au] = Tuple47 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av] = Tuple48 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw] = Tuple49 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax] = Tuple50 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay] = Tuple51 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az] = Tuple52 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba] = Tuple53 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb] = Tuple54 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc] = Tuple55 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb) (TYPE bc)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd] = Tuple56 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb) (TYPE bc) (TYPE bd)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be] = Tuple57 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb) (TYPE bc) (TYPE bd) (TYPE be)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf] = Tuple58 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb) (TYPE bc) (TYPE bd) (TYPE be) (TYPE bf)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg] = Tuple59 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb) (TYPE bc) (TYPE bd) (TYPE be) (TYPE bf) (TYPE bg)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh] = Tuple60 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb) (TYPE bc) (TYPE bd) (TYPE be) (TYPE bf) (TYPE bg) (TYPE bh)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi] = Tuple61 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb) (TYPE bc) (TYPE bd) (TYPE be) (TYPE bf) (TYPE bg) (TYPE bh) (TYPE bi)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj] = Tuple62 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb) (TYPE bc) (TYPE bd) (TYPE be) (TYPE bf) (TYPE bg) (TYPE bh) (TYPE bi) (TYPE bj)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk] = Tuple63 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb) (TYPE bc) (TYPE bd) (TYPE be) (TYPE bf) (TYPE bg) (TYPE bh) (TYPE bi) (TYPE bj) (TYPE bk)
+ TupleArgKind# [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl] = Tuple64 (TYPE a) (TYPE b) (TYPE c) (TYPE d) (TYPE e) (TYPE f) (TYPE g) (TYPE h) (TYPE i) (TYPE j) (TYPE k) (TYPE l) (TYPE m) (TYPE n) (TYPE o) (TYPE p) (TYPE q) (TYPE r) (TYPE s) (TYPE t) (TYPE u) (TYPE v) (TYPE w) (TYPE x) (TYPE y) (TYPE z) (TYPE aa) (TYPE ab) (TYPE ac) (TYPE ad) (TYPE ae) (TYPE af) (TYPE ag) (TYPE ah) (TYPE ai) (TYPE aj) (TYPE ak) (TYPE al) (TYPE am) (TYPE an) (TYPE ao) (TYPE ap) (TYPE aq) (TYPE ar) (TYPE as) (TYPE at) (TYPE au) (TYPE av) (TYPE aw) (TYPE ax) (TYPE ay) (TYPE az) (TYPE ba) (TYPE bb) (TYPE bc) (TYPE bd) (TYPE be) (TYPE bf) (TYPE bg) (TYPE bh) (TYPE bi) (TYPE bj) (TYPE bk) (TYPE bl)
+
+type Tuple# :: forall (reps :: List RuntimeRep). TupleArgKind# reps -> TYPE (TupleRep reps)
+type family Tuple# ts where
+ Tuple# () = Unit#
+ Tuple# (a :: TYPE r) = TypeError (Text "Tuple# does not work for 1-tuples; use Solo#.")
+ Tuple# (a, b) = Tuple2# a b
+ Tuple# (a, b, c) = Tuple3# a b c
+ Tuple# (a, b, c, d) = Tuple4# a b c d
+ Tuple# (a, b, c, d, e) = Tuple5# a b c d e
+ Tuple# (a, b, c, d, e, f) = Tuple6# a b c d e f
+ Tuple# (a, b, c, d, e, f, g) = Tuple7# a b c d e f g
+ Tuple# (a, b, c, d, e, f, g, h) = Tuple8# a b c d e f g h
+ Tuple# (a, b, c, d, e, f, g, h, i) = Tuple9# a b c d e f g h i
+ Tuple# (a, b, c, d, e, f, g, h, i, j) = Tuple10# a b c d e f g h i j
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k) = Tuple11# a b c d e f g h i j k
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l) = Tuple12# a b c d e f g h i j k l
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m) = Tuple13# a b c d e f g h i j k l m
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = Tuple14# a b c d e f g h i j k l m n
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = Tuple15# a b c d e f g h i j k l m n o
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) = Tuple16# a b c d e f g h i j k l m n o p
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) = Tuple17# a b c d e f g h i j k l m n o p q
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) = Tuple18# a b c d e f g h i j k l m n o p q r
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) = Tuple19# a b c d e f g h i j k l m n o p q r s
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) = Tuple20# a b c d e f g h i j k l m n o p q r s t
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) = Tuple21# a b c d e f g h i j k l m n o p q r s t u
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) = Tuple22# a b c d e f g h i j k l m n o p q r s t u v
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) = Tuple23# a b c d e f g h i j k l m n o p q r s t u v w
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) = Tuple24# a b c d e f g h i j k l m n o p q r s t u v w x
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) = Tuple25# a b c d e f g h i j k l m n o p q r s t u v w x y
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) = Tuple26# a b c d e f g h i j k l m n o p q r s t u v w x y z
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa) = Tuple27# a b c d e f g h i j k l m n o p q r s t u v w x y z aa
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab) = Tuple28# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac) = Tuple29# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad) = Tuple30# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae) = Tuple31# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af) = Tuple32# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag) = Tuple33# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah) = Tuple34# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai) = Tuple35# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj) = Tuple36# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak) = Tuple37# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al) = Tuple38# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am) = Tuple39# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an) = Tuple40# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao) = Tuple41# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap) = Tuple42# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq) = Tuple43# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar) = Tuple44# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as) = Tuple45# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at) = Tuple46# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au) = Tuple47# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av) = Tuple48# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw) = Tuple49# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax) = Tuple50# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay) = Tuple51# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az) = Tuple52# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba) = Tuple53# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb) = Tuple54# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc) = Tuple55# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd) = Tuple56# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be) = Tuple57# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf) = Tuple58# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg) = Tuple59# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh) = Tuple60# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi) = Tuple61# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj) = Tuple62# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk) = Tuple63# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk
+ Tuple# (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl) = Tuple64# a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl
=====================================
libraries/ghc-internal/src/GHC/Internal/Base.hs
=====================================
@@ -235,6 +235,7 @@ import GHC.Internal.Types hiding (
Sum61#,
Sum62#,
Sum63#,
+ Sum64#,
)
import GHC.Internal.Classes hiding (
CUnit,
=====================================
libraries/ghc-internal/src/GHC/Internal/Exts.hs
=====================================
@@ -338,6 +338,7 @@ import GHC.Internal.Types
Sum61#,
Sum62#,
Sum63#,
+ Sum64#,
)
import GHC.Internal.Prim.Ext
import GHC.Internal.ArrayArray
=====================================
libraries/ghc-internal/src/GHC/Internal/Types.hs
=====================================
@@ -195,6 +195,7 @@ module GHC.Internal.Types (
Sum61#,
Sum62#,
Sum63#,
+ Sum64#,
) where
@@ -1467,14 +1468,6 @@ data Tuple64# a b c d e f g h i j k l m n o p q r s t u v w x y z a1 b1 c1 d1 e1
(# a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1,q1,r1,s1,t1,
u1,v1,w1,x1,y1,z1,a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2 #)
-{-
-Note [Unboxed sum with arity 64]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-While tuples are defined up to arity 64, sums can maximally have 63 alternatives.
-This is due to the Unique layout for unboxed sums, which allots only six bits
-for encoding the alternative.
--}
-
type Sum2# :: TYPE r1 -> TYPE r2 -> TYPE (SumRep [r1, r2])
data Sum2# a b =
(# a | #)
@@ -3675,3 +3668,70 @@ data Sum63# a b c d e f g h i j k l m n o p q r s t u v w x y z a1 b1 c1 d1 e1 f
| (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | i2 | | #)
| (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | j2 | #)
| (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | k2 #)
+
+type Sum64# :: TYPE r1 -> TYPE r2 -> TYPE r3 -> TYPE r4 -> TYPE r5 -> TYPE r6 -> TYPE r7 -> TYPE r8 -> TYPE r9 -> TYPE r10 -> TYPE r11 -> TYPE r12 -> TYPE r13 -> TYPE r14 -> TYPE r15 -> TYPE r16 -> TYPE r17 -> TYPE r18 -> TYPE r19 -> TYPE r20 -> TYPE r21 -> TYPE r22 -> TYPE r23 -> TYPE r24 -> TYPE r25 -> TYPE r26 -> TYPE r27 -> TYPE r28 -> TYPE r29 -> TYPE r30 -> TYPE r31 -> TYPE r32 -> TYPE r33 -> TYPE r34 -> TYPE r35 -> TYPE r36 -> TYPE r37 -> TYPE r38 -> TYPE r39 -> TYPE r40 -> TYPE r41 -> TYPE r42 -> TYPE r43 -> TYPE r44 -> TYPE r45 -> TYPE r46 -> TYPE r47 -> TYPE r48 -> TYPE r49 -> TYPE r50 -> TYPE r51 -> TYPE r52 -> TYPE r53 -> TYPE r54 -> TYPE r55 -> TYPE r56 -> TYPE r57 -> TYPE r58 -> TYPE r59 -> TYPE r60 -> TYPE r61 -> TYPE r62 -> TYPE r63 -> TYPE r64 -> TYPE (SumRep [r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42, r43, r44, r45, r46, r47, r48, r49, r50, r51, r52, r53, r54, r55, r56, r57, r58, r59, r60, r61, r62, r63, r64])
+data Sum64# a b c d e f g h i j k l m n o p q r s t u v w x y z a1 b1 c1 d1 e1 f1 g1 h1 i1 j1 k1 l1 m1 n1 o1 p1 q1 r1 s1 t1 u1 v1 w1 x1 y1 z1 a2 b2 c2 d2 e2 f2 g2 h2 i2 j2 k2 l2 =
+ (# a | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | b | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | c | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | d | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | e | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | f | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | g | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | h | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | i | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | j | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | k | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | l | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | m | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | n | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | o | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | p | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | q | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | r | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | s | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | t | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | u | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | v | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | w | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | x | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | y | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | z | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | a1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | b1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | c1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | d1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | e1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | f1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | g1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | h1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | i1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | j1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | k1 | | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | l1 | | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | m1 | | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | n1 | | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | o1 | | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | p1 | | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | q1 | | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | r1 | | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | s1 | | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | t1 | | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | u1 | | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | v1 | | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | w1 | | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | x1 | | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | y1 | | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | z1 | | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | a2 | | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b2 | | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | c2 | | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | d2 | | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | e2 | | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | f2 | | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | g2 | | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | h2 | | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | i2 | | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | j2 | | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | k2 | #)
+ | (# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | l2 #)
=====================================
testsuite/tests/ghci/scripts/ListTuplePunsPprNoAbbrevTuple.stdout
=====================================
@@ -1,7 +1,8 @@
-type Tuple :: forall (n :: GHC.TypeNats.Nat).
- Data.Tuple.Experimental.TupleArgKind (*) n -> *
-type family Tuple ts = r | r -> n ts where
+type Tuple :: forall (n :: GHC.Internal.TypeNats.Nat).
+ Data.Tuple.Experimental.TupleArgKind n -> *
+type family Tuple ts where
Tuple () = Unit
+ Tuple a = a
Tuple (a, b) = Tuple2 a b
Tuple (a, b, c) = Tuple3 a b c
Tuple (a, b, c, d) = Tuple4 a b c d
=====================================
testsuite/tests/ghci/scripts/all.T
=====================================
@@ -382,7 +382,7 @@ test('T16468', normal, ghci_script, ['T16468.script'])
test('T23686', normal, ghci_script, ['T23686.script'])
test('T13869', extra_files(['T13869a.hs', 'T13869b.hs']), ghci_script, ['T13869.script'])
test('ListTuplePunsPpr', normal, ghci_script, ['ListTuplePunsPpr.script'])
-test('ListTuplePunsPprNoAbbrevTuple', [expect_broken(23135), limit_stdout_lines(13)], ghci_script, ['ListTuplePunsPprNoAbbrevTuple.script'])
+test('ListTuplePunsPprNoAbbrevTuple', [limit_stdout_lines(14)], ghci_script, ['ListTuplePunsPprNoAbbrevTuple.script'])
test('T24459', normal, ghci_script, ['T24459.script'])
test('T24632', normal, ghci_script, ['T24632.script'])
=====================================
testsuite/tests/interface-stability/ghc-experimental-exports.stdout
=====================================
The diff for this file was not included because it is too large.
=====================================
testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
=====================================
The diff for this file was not included because it is too large.
=====================================
testsuite/tests/interface-stability/ghc-prim-exports.stdout
=====================================
@@ -5373,6 +5373,74 @@ module GHC.Types where
-> TYPE k62
-> TYPE (SumRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k60, k61, k62])
data Sum63# a b c d e f g h i j k l m n o p q r s t u v w x y z t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t60 t61 t62 = ...
+ type Sum64# :: forall (k0 :: RuntimeRep) (k1 :: RuntimeRep) (k2 :: RuntimeRep) (k3 :: RuntimeRep) (k4 :: RuntimeRep) (k5 :: RuntimeRep) (k6 :: RuntimeRep) (k7 :: RuntimeRep) (k8 :: RuntimeRep) (k9 :: RuntimeRep) (k10 :: RuntimeRep) (k11 :: RuntimeRep) (k12 :: RuntimeRep) (k13 :: RuntimeRep) (k14 :: RuntimeRep) (k15 :: RuntimeRep) (k16 :: RuntimeRep) (k17 :: RuntimeRep) (k18 :: RuntimeRep) (k19 :: RuntimeRep) (k20 :: RuntimeRep) (k21 :: RuntimeRep) (k22 :: RuntimeRep) (k23 :: RuntimeRep) (k24 :: RuntimeRep) (k25 :: RuntimeRep) (k26 :: RuntimeRep) (k27 :: RuntimeRep) (k28 :: RuntimeRep) (k29 :: RuntimeRep) (k30 :: RuntimeRep) (k31 :: RuntimeRep)
+ (k32 :: RuntimeRep) (k33 :: RuntimeRep) (k34 :: RuntimeRep) (k35 :: RuntimeRep) (k36 :: RuntimeRep) (k37 :: RuntimeRep) (k38 :: RuntimeRep) (k39 :: RuntimeRep) (k40 :: RuntimeRep) (k41 :: RuntimeRep) (k42 :: RuntimeRep) (k43 :: RuntimeRep) (k44 :: RuntimeRep) (k45 :: RuntimeRep) (k46 :: RuntimeRep) (k47 :: RuntimeRep) (k48 :: RuntimeRep) (k49 :: RuntimeRep) (k50 :: RuntimeRep) (k51 :: RuntimeRep) (k52 :: RuntimeRep) (k53 :: RuntimeRep) (k54 :: RuntimeRep) (k55 :: RuntimeRep) (k56 :: RuntimeRep) (k57 :: RuntimeRep) (k58 :: RuntimeRep) (k59 :: RuntimeRep) (k60 :: RuntimeRep) (k61 :: RuntimeRep) (k62 :: RuntimeRep) (k63 :: RuntimeRep).
+ TYPE k0
+ -> TYPE k1
+ -> TYPE k2
+ -> TYPE k3
+ -> TYPE k4
+ -> TYPE k5
+ -> TYPE k6
+ -> TYPE k7
+ -> TYPE k8
+ -> TYPE k9
+ -> TYPE k10
+ -> TYPE k11
+ -> TYPE k12
+ -> TYPE k13
+ -> TYPE k14
+ -> TYPE k15
+ -> TYPE k16
+ -> TYPE k17
+ -> TYPE k18
+ -> TYPE k19
+ -> TYPE k20
+ -> TYPE k21
+ -> TYPE k22
+ -> TYPE k23
+ -> TYPE k24
+ -> TYPE k25
+ -> TYPE k26
+ -> TYPE k27
+ -> TYPE k28
+ -> TYPE k29
+ -> TYPE k30
+ -> TYPE k31
+ -> TYPE k32
+ -> TYPE k33
+ -> TYPE k34
+ -> TYPE k35
+ -> TYPE k36
+ -> TYPE k37
+ -> TYPE k38
+ -> TYPE k39
+ -> TYPE k40
+ -> TYPE k41
+ -> TYPE k42
+ -> TYPE k43
+ -> TYPE k44
+ -> TYPE k45
+ -> TYPE k46
+ -> TYPE k47
+ -> TYPE k48
+ -> TYPE k49
+ -> TYPE k50
+ -> TYPE k51
+ -> TYPE k52
+ -> TYPE k53
+ -> TYPE k54
+ -> TYPE k55
+ -> TYPE k56
+ -> TYPE k57
+ -> TYPE k58
+ -> TYPE k59
+ -> TYPE k60
+ -> TYPE k61
+ -> TYPE k62
+ -> TYPE k63
+ -> TYPE (SumRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k60, k61, k62, k63])
+ data Sum64# a b c d e f g h i j k l m n o p q r s t u v w x y z t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t60 t61 t62 t63 = ...
type Sum7# :: forall (k0 :: RuntimeRep) (k1 :: RuntimeRep) (k2 :: RuntimeRep) (k3 :: RuntimeRep) (k4 :: RuntimeRep) (k5 :: RuntimeRep) (k6 :: RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE (SumRep [k0, k1, k2, k3, k4, k5, k6])
data Sum7# a b c d e f g = ...
type Sum8# :: forall (k0 :: RuntimeRep) (k1 :: RuntimeRep) (k2 :: RuntimeRep) (k3 :: RuntimeRep) (k4 :: RuntimeRep) (k5 :: RuntimeRep) (k6 :: RuntimeRep) (k7 :: RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE (SumRep [k0, k1, k2, k3, k4, k5, k6, k7])
=====================================
testsuite/tests/interface-stability/ghc-prim-exports.stdout-mingw32
=====================================
@@ -5376,6 +5376,74 @@ module GHC.Types where
-> TYPE k62
-> TYPE (SumRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k60, k61, k62])
data Sum63# a b c d e f g h i j k l m n o p q r s t u v w x y z t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t60 t61 t62 = ...
+ type Sum64# :: forall (k0 :: RuntimeRep) (k1 :: RuntimeRep) (k2 :: RuntimeRep) (k3 :: RuntimeRep) (k4 :: RuntimeRep) (k5 :: RuntimeRep) (k6 :: RuntimeRep) (k7 :: RuntimeRep) (k8 :: RuntimeRep) (k9 :: RuntimeRep) (k10 :: RuntimeRep) (k11 :: RuntimeRep) (k12 :: RuntimeRep) (k13 :: RuntimeRep) (k14 :: RuntimeRep) (k15 :: RuntimeRep) (k16 :: RuntimeRep) (k17 :: RuntimeRep) (k18 :: RuntimeRep) (k19 :: RuntimeRep) (k20 :: RuntimeRep) (k21 :: RuntimeRep) (k22 :: RuntimeRep) (k23 :: RuntimeRep) (k24 :: RuntimeRep) (k25 :: RuntimeRep) (k26 :: RuntimeRep) (k27 :: RuntimeRep) (k28 :: RuntimeRep) (k29 :: RuntimeRep) (k30 :: RuntimeRep) (k31 :: RuntimeRep)
+ (k32 :: RuntimeRep) (k33 :: RuntimeRep) (k34 :: RuntimeRep) (k35 :: RuntimeRep) (k36 :: RuntimeRep) (k37 :: RuntimeRep) (k38 :: RuntimeRep) (k39 :: RuntimeRep) (k40 :: RuntimeRep) (k41 :: RuntimeRep) (k42 :: RuntimeRep) (k43 :: RuntimeRep) (k44 :: RuntimeRep) (k45 :: RuntimeRep) (k46 :: RuntimeRep) (k47 :: RuntimeRep) (k48 :: RuntimeRep) (k49 :: RuntimeRep) (k50 :: RuntimeRep) (k51 :: RuntimeRep) (k52 :: RuntimeRep) (k53 :: RuntimeRep) (k54 :: RuntimeRep) (k55 :: RuntimeRep) (k56 :: RuntimeRep) (k57 :: RuntimeRep) (k58 :: RuntimeRep) (k59 :: RuntimeRep) (k60 :: RuntimeRep) (k61 :: RuntimeRep) (k62 :: RuntimeRep) (k63 :: RuntimeRep).
+ TYPE k0
+ -> TYPE k1
+ -> TYPE k2
+ -> TYPE k3
+ -> TYPE k4
+ -> TYPE k5
+ -> TYPE k6
+ -> TYPE k7
+ -> TYPE k8
+ -> TYPE k9
+ -> TYPE k10
+ -> TYPE k11
+ -> TYPE k12
+ -> TYPE k13
+ -> TYPE k14
+ -> TYPE k15
+ -> TYPE k16
+ -> TYPE k17
+ -> TYPE k18
+ -> TYPE k19
+ -> TYPE k20
+ -> TYPE k21
+ -> TYPE k22
+ -> TYPE k23
+ -> TYPE k24
+ -> TYPE k25
+ -> TYPE k26
+ -> TYPE k27
+ -> TYPE k28
+ -> TYPE k29
+ -> TYPE k30
+ -> TYPE k31
+ -> TYPE k32
+ -> TYPE k33
+ -> TYPE k34
+ -> TYPE k35
+ -> TYPE k36
+ -> TYPE k37
+ -> TYPE k38
+ -> TYPE k39
+ -> TYPE k40
+ -> TYPE k41
+ -> TYPE k42
+ -> TYPE k43
+ -> TYPE k44
+ -> TYPE k45
+ -> TYPE k46
+ -> TYPE k47
+ -> TYPE k48
+ -> TYPE k49
+ -> TYPE k50
+ -> TYPE k51
+ -> TYPE k52
+ -> TYPE k53
+ -> TYPE k54
+ -> TYPE k55
+ -> TYPE k56
+ -> TYPE k57
+ -> TYPE k58
+ -> TYPE k59
+ -> TYPE k60
+ -> TYPE k61
+ -> TYPE k62
+ -> TYPE k63
+ -> TYPE (SumRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k60, k61, k62, k63])
+ data Sum64# a b c d e f g h i j k l m n o p q r s t u v w x y z t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t60 t61 t62 t63 = ...
type Sum7# :: forall (k0 :: RuntimeRep) (k1 :: RuntimeRep) (k2 :: RuntimeRep) (k3 :: RuntimeRep) (k4 :: RuntimeRep) (k5 :: RuntimeRep) (k6 :: RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE (SumRep [k0, k1, k2, k3, k4, k5, k6])
data Sum7# a b c d e f g = ...
type Sum8# :: forall (k0 :: RuntimeRep) (k1 :: RuntimeRep) (k2 :: RuntimeRep) (k3 :: RuntimeRep) (k4 :: RuntimeRep) (k5 :: RuntimeRep) (k6 :: RuntimeRep) (k7 :: RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE (SumRep [k0, k1, k2, k3, k4, k5, k6, k7])
=====================================
testsuite/tests/parser/should_compile/ListTuplePunsSuccess1.hs
=====================================
@@ -3,9 +3,9 @@
module ListTuplePunsSuccess1 where
import Data.Kind (Type)
--- import Data.Tuple.Experimental (Tuple, Tuple#)
-import GHC.Tuple (Unit, Tuple2)
-import GHC.Types (List)
+import Data.List (List)
+import Data.Tuple.Experimental (Unit, Tuple2, Tuple, Constraints, Tuple#)
+import GHC.Exts (TYPE, RuntimeRep(IntRep))
type family F (a :: Tuple2 Type Type) :: Type where
F (a, _) = a
@@ -34,10 +34,14 @@ type Z1 = H [Int, Double]
z1 :: Z1
z1 = (5 :: Int)
--- swap :: Tuple (a, b) -> Tuple (b, a)
--- swap (x, y) = (y, x)
+swap :: Tuple (a, b) -> Tuple (b, a)
+swap (x, y) = (y, x)
--- unboxedSoloFam :: Int
--- unboxedSoloFam =
--- case (# 1 #) :: Tuple# Int of
--- _ -> 0
+swap_mono :: Tuple (Int, Bool) -> Tuple (Bool, Int)
+swap_mono (x, y) = (y, x)
+
+swap_inc :: Constraints (Num a, Num b) => Tuple (a, b) -> Tuple (b, a)
+swap_inc (x, y) = (y + 1, x + 1)
+
+swap# :: forall (a :: TYPE IntRep) (b :: Type). Tuple# (a, b) -> Tuple# (b, a)
+swap# (# x, y #) = (# y, x #)
=====================================
testsuite/tests/parser/should_compile/all.T
=====================================
@@ -198,8 +198,8 @@ test('T20718b', normal, compile, ['-dsuppress-uniques -ddump-parsed-ast -dkeep-
test('T21589', normal, compile, [''])
test('T19372consym', normal, compile, [''])
test('ListTuplePunsSuccess1', extra_files(['ListTuplePunsSuccess1.hs']), ghci_script, ['ListTuplePunsSuccess1.script'])
-test('ListTuplePunsFamiliesCompat', expect_broken(23135), compile, [''])
-test('ListTuplePunsFamilies', [expect_broken(23135), extra_files(['ListTuplePunsFamilies.hs'])], ghci_script, ['ListTuplePunsFamilies.script'])
+test('ListTuplePunsFamiliesCompat', normal, compile, [''])
+test('ListTuplePunsFamilies', [extra_files(['ListTuplePunsFamilies.hs'])], ghci_script, ['ListTuplePunsFamilies.script'])
test('T22155', normal, compile, ['-dsuppress-uniques -ddump-simpl -dsuppress-all -dno-typeable-binds'])
=====================================
testsuite/tests/parser/should_fail/ListTuplePunsFail6.hs
=====================================
@@ -0,0 +1,10 @@
+{-# language DataKinds, MagicHash, UnboxedTuples #-}
+
+module ListTuplePunsFail6 where
+
+import Data.Tuple.Experimental (Tuple#)
+
+unboxedSoloFam :: Int
+unboxedSoloFam =
+ case (# 1 #) :: Tuple# Int of
+ _ -> 0
=====================================
testsuite/tests/parser/should_fail/ListTuplePunsFail6.stderr
=====================================
@@ -0,0 +1,7 @@
+ListTuplePunsFail6.hs:9:8: error: [GHC-64725]
+ • Tuple# does not work for 1-tuples; use Solo#.
+ • In the expression: (# 1 #) :: Tuple# Int
+ In the expression: case (# 1 #) :: Tuple# Int of _ -> 0
+ In an equation for ‘unboxedSoloFam’:
+ unboxedSoloFam = case (# 1 #) :: Tuple# Int of _ -> 0
+
=====================================
testsuite/tests/parser/should_fail/all.T
=====================================
@@ -232,6 +232,7 @@ test('ListTuplePunsFail2', extra_files(['ListTuplePunsFail2.hs']), ghci_script,
test('ListTuplePunsFail3', extra_files(['ListTuplePunsFail3.hs']), ghci_script, ['ListTuplePunsFail3.script'])
test('ListTuplePunsFail4', extra_files(['ListTuplePunsFail4.hs']), ghci_script, ['ListTuplePunsFail4.script'])
test('ListTuplePunsFail5', extra_files(['ListTuplePunsFail5.hs']), ghci_script, ['ListTuplePunsFail5.script'])
+test('ListTuplePunsFail6', normal, compile_fail, [''])
test('T17879a', normal, compile_fail, [''])
test('T17879b', normal, compile_fail, [''])
test('Or1', normal, compile_fail, [''])
=====================================
testsuite/tests/parser/should_run/ListTuplePunsConstraints.hs
=====================================
@@ -2,17 +2,16 @@
module ListTuplePunsConstraints where
--- import Data.Tuple.Experimental (Constraints)
-import GHC.Classes (CTuple2)
+import Data.Tuple.Experimental (CTuple2, Constraints)
--- type C1 m = Constraints (Monad m, Monad m)
+type C1 m = Constraints (Monad m, Monad m)
type C2 m = CTuple2 (Monad m) (Monad m)
f ::
Monad m =>
- -- C1 m =>
+ C1 m =>
C2 m =>
CTuple2 (Monad m) (Monad m) =>
- -- (Monad m, Constraints (Monad m, Monad m)) =>
+ (Monad m, Constraints (Monad m, Monad m)) =>
m Int
f = pure 5
=====================================
testsuite/tests/profiling/should_run/callstack001.stdout
=====================================
@@ -1,2 +1,2 @@
-["GHC.Internal.TopHandler.runMainIO1 (<no location info>)","Main.main (callstack001.hs:17:8-21)","Main.mapM (callstack001.hs:10:13-17)","Main.mapM.go (callstack001.hs:(12,21)-(15,25))","Main.mapM.go (callstack001.hs:13:11-19)","Main.mapM.go (callstack001.hs:13:17-19)","Main.f (callstack001.hs:7:7-49)","Main.f (callstack001.hs:7:10-35)","GHC.Internal.Base.>>= (libraries/ghc-internal/src/GHC/Internal/Base.hs:1347:5-55)","GHC.Internal.Base.$fMonadIO1 (<no location info>)","GHC.Internal.Stack.CCS.currentCallStack (libraries/ghc-internal/src/GHC/Internal/Stack/CCS.hsc:129:1-16)","GHC.Internal.Stack.CCS.currentCallStack1 (<no location info>)"]
-["GHC.Internal.TopHandler.runMainIO1 (<no location info>)","Main.main (callstack001.hs:17:8-21)","Main.mapM (callstack001.hs:10:13-17)","Main.mapM.go (callstack001.hs:(12,21)-(15,25))","Main.mapM.go (callstack001.hs:13:11-19)","GHC.Internal.Base.>>= (libraries/ghc-internal/src/GHC/Internal/Base.hs:1347:5-55)","GHC.Internal.Base.$fMonadIO1 (<no location info>)","GHC.Internal.Stack.CCS.currentCallStack (libraries/ghc-internal/src/GHC/Internal/Stack/CCS.hsc:129:1-16)","GHC.Internal.Stack.CCS.currentCallStack1 (<no location info>)"]
\ No newline at end of file
+["GHC.Internal.TopHandler.runMainIO1 (<no location info>)","Main.main (callstack001.hs:17:8-21)","Main.mapM (callstack001.hs:10:13-17)","Main.mapM.go (callstack001.hs:(12,21)-(15,25))","Main.mapM.go (callstack001.hs:13:11-19)","Main.mapM.go (callstack001.hs:13:17-19)","Main.f (callstack001.hs:7:7-49)","Main.f (callstack001.hs:7:10-35)","GHC.Internal.Base.>>= (libraries/ghc-internal/src/GHC/Internal/Base.hs:1348:5-55)","GHC.Internal.Base.$fMonadIO1 (<no location info>)","GHC.Internal.Stack.CCS.currentCallStack (libraries/ghc-internal/src/GHC/Internal/Stack/CCS.hsc:129:1-16)","GHC.Internal.Stack.CCS.currentCallStack1 (<no location info>)"]
+["GHC.Internal.TopHandler.runMainIO1 (<no location info>)","Main.main (callstack001.hs:17:8-21)","Main.mapM (callstack001.hs:10:13-17)","Main.mapM.go (callstack001.hs:(12,21)-(15,25))","Main.mapM.go (callstack001.hs:13:11-19)","GHC.Internal.Base.>>= (libraries/ghc-internal/src/GHC/Internal/Base.hs:1348:5-55)","GHC.Internal.Base.$fMonadIO1 (<no location info>)","GHC.Internal.Stack.CCS.currentCallStack (libraries/ghc-internal/src/GHC/Internal/Stack/CCS.hsc:129:1-16)","GHC.Internal.Stack.CCS.currentCallStack1 (<no location info>)"]
=====================================
testsuite/tests/typecheck/should_compile/T23135.hs
=====================================
@@ -0,0 +1,28 @@
+{-# LANGUAGE DataKinds, TypeFamilies, TypeFamilyDependencies #-}
+module T23135 where
+
+import Data.Kind
+import GHC.TypeLits
+
+data Tuple2 x y = MkTuple2 x y
+
+type TupleArgKind :: Nat -> Type
+type family TupleArgKind n = r | r -> n where
+ TupleArgKind 2 = Tuple2 Type Type
+
+type Tuple :: forall (n :: Nat). TupleArgKind n -> Type
+type family Tuple ts = r | r -> ts where
+ Tuple (MkTuple2 a b) = Tuple2 a b
+
+-- works
+f :: Tuple (MkTuple2 a b) -> ()
+f (MkTuple2 _ _) = ()
+
+-- works (failed before the fix)
+g :: Tuple (MkTuple2 a b) -> ()
+g x = ()
+
+-- works
+h :: Tuple @2 (MkTuple2 a b) -> ()
+h x = ()
+
=====================================
testsuite/tests/typecheck/should_compile/all.T
=====================================
@@ -966,3 +966,5 @@ test('T26737', normal, compile, [''])
test('T26805a', normal, compile, [''])
test('T24464', normal, compile, [''])
test('ExpansionQLIm', normal, compile, [''])
+test('T23135', normal, compile, [''])
+
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e72e05b0ecf8138225bed4a0412498a…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e72e05b0ecf8138225bed4a0412498a…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/int-index/iethingwith-subwc] WIP: Combining wildcards with names in subordinate import/export lists
by Vladislav Zavialov (@int-index) 17 May '26
by Vladislav Zavialov (@int-index) 17 May '26
17 May '26
Vladislav Zavialov pushed to branch wip/int-index/iethingwith-subwc at Glasgow Haskell Compiler / GHC
Commits:
f7288856 by Vladislav Zavialov at 2026-05-17T21:41:25+03:00
WIP: Combining wildcards with names in subordinate import/export lists
- - - - -
43 changed files:
- compiler/GHC/Hs/ImpExp.hs
- compiler/GHC/Hs/Instances.hs
- compiler/GHC/Parser.y
- compiler/GHC/Parser/Errors/Ppr.hs
- compiler/GHC/Parser/Errors/Types.hs
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Parser/PostProcess/Haddock.hs
- compiler/GHC/Rename/Names.hs
- compiler/GHC/Tc/Gen/Export.hs
- compiler/GHC/Types/Error/Codes.hs
- compiler/GHC/Types/SrcLoc.hs
- compiler/Language/Haskell/Syntax/Extension.hs
- compiler/Language/Haskell/Syntax/ImpExp.hs
- testsuite/tests/parser/should_compile/T14189.stderr
- + testsuite/tests/patsyn/should_compile/ImportSyntax.hs
- testsuite/tests/patsyn/should_compile/all.T
- testsuite/tests/patsyn/should_fail/export-syntax.hs → testsuite/tests/patsyn/should_compile/export-syntax.hs
- + testsuite/tests/patsyn/should_compile/export-syntax.stderr
- testsuite/tests/patsyn/should_fail/import-syntax-no-ext.hs → testsuite/tests/patsyn/should_compile/import-syntax-no-ext.hs
- testsuite/tests/patsyn/should_fail/import-syntax.hs → testsuite/tests/patsyn/should_compile/import-syntax.hs
- testsuite/tests/patsyn/should_fail/all.T
- − testsuite/tests/patsyn/should_fail/export-syntax.stderr
- − testsuite/tests/patsyn/should_fail/import-syntax-no-ext.stderr
- − testsuite/tests/patsyn/should_fail/import-syntax.stderr
- + testsuite/tests/rename/should_compile/T25901_sub_w2_ok.hs
- + testsuite/tests/rename/should_compile/T25901_sub_w3.hs
- + testsuite/tests/rename/should_compile/T25901_sub_w3_helper.hs
- + testsuite/tests/rename/should_compile/T25901_sub_w3_nc.hs
- testsuite/tests/rename/should_compile/all.T
- − testsuite/tests/rename/should_fail/T25901_sub_w.hs
- − testsuite/tests/rename/should_fail/T25901_sub_w.stderr
- + testsuite/tests/rename/should_fail/T25901_sub_w1.hs
- + testsuite/tests/rename/should_fail/T25901_sub_w1.stderr
- + testsuite/tests/rename/should_fail/T25901_sub_w1_helper.hs
- + testsuite/tests/rename/should_fail/T25901_sub_w2_fail.hs
- + testsuite/tests/rename/should_fail/T25901_sub_w2_fail.stderr
- testsuite/tests/rename/should_fail/all.T
- + testsuite/tests/warnings/should_compile/DodgyExports05.hs
- + testsuite/tests/warnings/should_compile/DodgyExports05.stderr
- + testsuite/tests/warnings/should_compile/DodgyImports05.hs
- + testsuite/tests/warnings/should_compile/DodgyImports05.stderr
- testsuite/tests/warnings/should_compile/all.T
- utils/check-exact/ExactPrint.hs
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f7288856130d99eec0d169d5ed83896…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f7288856130d99eec0d169d5ed83896…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 5 commits: Add type families: Tuple, Constraints, Tuple#, Sum#
by Marge Bot (@marge-bot) 17 May '26
by Marge Bot (@marge-bot) 17 May '26
17 May '26
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
57d67da7 by Vladislav Zavialov at 2026-05-17T12:18:14-04:00
Add type families: Tuple, Constraints, Tuple#, Sum#
These type families map tuples of types to the corresponding Tuple<N>,
Tuple<N>#, CTuple<N>, and Sum<N># types. Some examples at N=2:
Tuple (Int, Bool) = Tuple2 Int Bool
Constraints (Show a, Eq a) = CTuple2 (Show a) (Eq a)
Tuple# (Int#, Float#) = Tuple2# Int# Float#
Sum# (Int#, Float#) = Sum2# Int# Float#
See GHC Proposal #145 "Non-punning list and tuple syntax".
To make the Sum# instance at N=64 possible, this patch also introduces
the Sum64# constructor declaration and bumps mAX_SUM_SIZE from 63 to 64.
Metric Increase:
ghc_experimental_dir
- - - - -
167d6b61 by fendor at 2026-05-17T12:18:15-04:00
Fix regression T27202: `:load` and `:add` work in GHCi
To fix the regression there are conceptually two major things that we
fix:
* We don't remove the `importDirs` from `interactive-session`
* When `:add`ing a module, we don't try to find them via PackageImports
* The PackageImport is wrong as we can't know the package-name at
this stage in ghc/UI.hs
What does it mean to not remove the `importDirs` from
`interactive-session`?
It means that, given some initial `DynFlags`, we will use those
`importDirs` in `interactive-session`.
The initial `DynFlags`, however, depend on how you initialise the GHC
session.
For a simple session, initialised by
ghc -isrc -this-unit-id main
It is simple, just use the `DynFlags` given on the cli.
Thus, `main` and `interactive-session` will have the same `DynFlags`,
except for the `homeUnitId` and `interactive-session` depends on `main`
by construction of the GHCi session.
What about a multiple home unit session, though?
ghc -unit @unit1 -unit @unit2
What are the `DynFlags` in this cli invocation? It shouldn't be either
`@unti1` nor `@unit2`, as the order shouldn't matter or any other
implicit condition.
For consistency, we decide that the initial `DynFlags` are the top
`DynFlags` on the cli, ignoring `-unit` flags.
Thus, in this example, there are no `importsDirs` regardless of what we
might find in `@unit1` and `@unit2`.
But in this invocation:
ghc -isrc -unit @unit1 -unit @unit2
The `interactive-session` will have the `importsDirs` `src`.
Note, `-isrc` will be inherited in `@unit1` and `@unit2`, so you need to
explicitly use `-i` to clear the `importsDirs`, in order to avoid
accidentally adding `src` as an import directory to all other home
units.
This fix has been made possible by the improvements introduced in
!15888, which avoids ambiguity when a home unit shares the `importsDirs`
with the `interactive-session`, on top of being much faster for multiple
home units.
Adds regression tests for T27202 for `:load`ing and `:add`ing modules
that are located in import directories.
- - - - -
148200ba by fendor at 2026-05-17T12:18:15-04:00
Use home unit package db stacks in GHCi prompt and session unit
In order to import modules from home unit dependencies (e.g., `Data.Map`),
the ghci prompt unit needs to populate its `UnitState`.
This is tricky to handle correctly, which `PackageDBFlag`s should we use
to populate the `UnitState`?
We decide, the most intuitive solution for users is to depend on all
`PackageDBFlag`s, so that any dependency can be imported in GHCi.
This assumes consistency in the `PackageDBFlag`s, so no two home units
specify `PackageDBFlag`s that are inconsistent with each other.
We could simply concat all the `PackageDBFlag`s of the existing home
units, but later `PackageDBFlag`s shadow earlier ones, leading to the
last processed home units' `PackageDBFlag`s to shadow the earlier ones.
This is hard to fix, we need to give users the capability to provide ghc
options for the ghci prompt home unit.
However, as this is considerably more work, we decided on an
approximation that should work out most of the time.
Package Db stacks in cabal and stack follow a certain structure:
-no-user-package-db > -package-db $cabal-store > -package-db $local-db
The first two arguments are always the same, namely the
`-no-user-package-db` and `-package-db`.
We compute the longest common prefix over all home units, and use that
as the start of the package db stack. Then, over the rest of the
`PackageDBFlag`s, we simply take the union and append them to our
initial stack.
We assume, that the rest of package dbs only defines very few, "local"
units that are usually not shadowing each other.
This allows us to get a relatively consistent package database stack for
the ghci prompt home unit.
Similar reasoning applies to the session unit in order to add modules to
the session and have dependencies available in the module.
We do something similar for `-package` flags, to make sure only the
correct units are actually visible in the ghci session.
This time, we simply take the union of all `PackageFlag`s, allowing us
to import modules from the home unit dependencies.
In the future, it would be beneficial to allow the user to provide the
exact ghc options to control the visibilities. For now, this will have
to do.
- - - - -
8bacb9e0 by Duncan Coutts at 2026-05-17T12:18:16-04:00
Document removal of the signal-based interval timer
Update mentions within the RTS section of the users guide.
Add a changelog entry.
- - - - -
65dccb9f by Duncan Coutts at 2026-05-17T12:18:16-04:00
Fix section for an recent changelog entry
- - - - -
93 changed files:
- + changelog.d/T27202
- changelog.d/dynamic-trace-flags
- + changelog.d/lib-add-tuple-tyfam-27179
- + changelog.d/no-more-timer-signal
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Settings/Constants.hs
- compiler/GHC/Unit/State.hs
- docs/users_guide/profiling.rst
- docs/users_guide/runtime_control.rst
- ghc/GHCi/UI.hs
- ghc/Main.hs
- libraries/base/src/GHC/Base.hs
- libraries/base/src/GHC/Exts.hs
- libraries/ghc-experimental/src/Data/Sum/Experimental.hs
- libraries/ghc-experimental/src/Data/Tuple/Experimental.hs
- libraries/ghc-internal/src/GHC/Internal/Base.hs
- libraries/ghc-internal/src/GHC/Internal/Exts.hs
- libraries/ghc-internal/src/GHC/Internal/Types.hs
- testsuite/tests/driver/fat-iface/fat014.stdout
- + testsuite/tests/ghci/prog-mhu006/Makefile
- + testsuite/tests/ghci/prog-mhu006/a/A.hs
- + testsuite/tests/ghci/prog-mhu006/all.T
- + testsuite/tests/ghci/prog-mhu006/b/B.hs
- + testsuite/tests/ghci/prog-mhu006/prog-mhu006a.script
- + testsuite/tests/ghci/prog-mhu006/prog-mhu006a.stdout
- + testsuite/tests/ghci/prog-mhu006/unitA
- + testsuite/tests/ghci/prog-mhu006/unitB
- testsuite/tests/ghci/prog018/prog018.stdout
- testsuite/tests/ghci/prog020/Makefile
- testsuite/tests/ghci/prog020/all.T
- testsuite/tests/ghci/prog020/ghci.prog020.script → testsuite/tests/ghci/prog020/ghci.prog020a.script
- testsuite/tests/ghci/prog020/ghci.prog020.stderr → testsuite/tests/ghci/prog020/ghci.prog020a.stderr
- testsuite/tests/ghci/prog020/ghci.prog020.stdout → testsuite/tests/ghci/prog020/ghci.prog020a.stdout
- + testsuite/tests/ghci/prog020/ghci.prog020b.script
- + testsuite/tests/ghci/prog020/ghci.prog020b.stderr
- + testsuite/tests/ghci/prog020/ghci.prog020b.stdout
- + testsuite/tests/ghci/prog023/Makefile
- + testsuite/tests/ghci/prog023/all.T
- + testsuite/tests/ghci/prog023/prog023a.script
- + testsuite/tests/ghci/prog023/prog023a.stdout
- + testsuite/tests/ghci/prog023/prog023b.script
- + testsuite/tests/ghci/prog023/prog023b.stdout
- + testsuite/tests/ghci/prog023/src/A.hs
- + testsuite/tests/ghci/prog024/Makefile
- + testsuite/tests/ghci/prog024/all.T
- + testsuite/tests/ghci/prog024/prog024a.script
- + testsuite/tests/ghci/prog024/prog024a.stdout
- + testsuite/tests/ghci/prog024/prog024b.script
- + testsuite/tests/ghci/prog024/prog024b.stdout
- + testsuite/tests/ghci/prog024/prog024c.script
- + testsuite/tests/ghci/prog024/prog024c.stderr
- + testsuite/tests/ghci/prog024/prog024c.stdout
- + testsuite/tests/ghci/prog024/prog024d.script
- + testsuite/tests/ghci/prog024/prog024d.stderr
- + testsuite/tests/ghci/prog024/prog024d.stdout
- + testsuite/tests/ghci/prog024/prog024e.script
- + testsuite/tests/ghci/prog024/prog024e.stdout
- + testsuite/tests/ghci/prog024/prog024f.script
- + testsuite/tests/ghci/prog024/prog024f.stdout
- + testsuite/tests/ghci/prog024/src/A.hs
- + testsuite/tests/ghci/prog024/src/B.hs
- + testsuite/tests/ghci/prog025/Makefile
- + testsuite/tests/ghci/prog025/a/A.hs
- + testsuite/tests/ghci/prog025/all.T
- + testsuite/tests/ghci/prog025/prog025a.script
- + testsuite/tests/ghci/prog025/prog025a.stdout
- + testsuite/tests/ghci/prog025/prog025b.script
- + testsuite/tests/ghci/prog025/prog025b.stdout
- + testsuite/tests/ghci/prog025/testpkg/Test.hs
- + testsuite/tests/ghci/prog025/testpkg/testpkg-0.1.0.0.pkg
- + testsuite/tests/ghci/prog025/testpkg/testpkg-0.2.0.0.pkg
- + testsuite/tests/ghci/prog025/unitA
- testsuite/tests/ghci/scripts/ListTuplePunsPprNoAbbrevTuple.stdout
- testsuite/tests/ghci/scripts/T13997.stdout
- testsuite/tests/ghci/scripts/T1914.stdout
- testsuite/tests/ghci/scripts/T20217.stdout
- testsuite/tests/ghci/scripts/T8042.stdout
- testsuite/tests/ghci/scripts/T8042recomp.stdout
- testsuite/tests/ghci/scripts/all.T
- testsuite/tests/ghci/should_run/T10920.stderr
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
- testsuite/tests/interface-stability/ghc-prim-exports.stdout
- testsuite/tests/interface-stability/ghc-prim-exports.stdout-mingw32
- testsuite/tests/parser/should_compile/ListTuplePunsSuccess1.hs
- testsuite/tests/parser/should_compile/all.T
- + testsuite/tests/parser/should_fail/ListTuplePunsFail6.hs
- + testsuite/tests/parser/should_fail/ListTuplePunsFail6.stderr
- testsuite/tests/parser/should_fail/all.T
- testsuite/tests/parser/should_run/ListTuplePunsConstraints.hs
- testsuite/tests/profiling/should_run/callstack001.stdout
- + testsuite/tests/typecheck/should_compile/T23135.hs
- testsuite/tests/typecheck/should_compile/all.T
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3ebc840e27a28078e16e9074bb6f4f…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3ebc840e27a28078e16e9074bb6f4f…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/wenkokke/trace-ipe] 3 commits: testsuite: Add test for TraceFlags.traceIpe
by Wen Kokke (@wenkokke) 17 May '26
by Wen Kokke (@wenkokke) 17 May '26
17 May '26
Wen Kokke pushed to branch wip/wenkokke/trace-ipe at Glasgow Haskell Compiler / GHC
Commits:
1973f657 by Wen Kokke at 2026-05-17T16:52:04+01:00
testsuite: Add test for TraceFlags.traceIpe
- - - - -
d43aa05a by Wen Kokke at 2026-05-17T16:52:07+01:00
ghc-internal: Add DebugFlags.ipe
- - - - -
26db7027 by Wen Kokke at 2026-05-17T16:52:08+01:00
testsuite: Add test for DebugFlags.ipe
- - - - -
10 changed files:
- libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
- + testsuite/tests/rts/T25275/DebugIpe.hs
- + testsuite/tests/rts/T25275/T25275_A.stdout
- + testsuite/tests/rts/T25275/T25275_B.stdout
- + testsuite/tests/rts/T25275/T25275_C.stdout
- + testsuite/tests/rts/T25275/T25275_D.stdout
- + testsuite/tests/rts/T25275/TraceIpe.hs
- + testsuite/tests/rts/T25275/all.T
Changes:
=====================================
libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc
=====================================
@@ -211,6 +211,8 @@ data DebugFlags = DebugFlags
, squeeze :: Bool -- ^ @z@ stack squeezing & lazy blackholing
, hpc :: Bool -- ^ @c@ coverage
, sparks :: Bool -- ^ @r@
+ , ipe :: Bool -- ^ @I@
+ -- @since ghc-experimental-10.0.0
} deriving ( Show -- ^ @since base-4.8.0.0
, Generic -- ^ @since base-4.15.0.0
)
@@ -590,6 +592,8 @@ getDebugFlags = do
(#{peek DEBUG_FLAGS, hpc} ptr :: IO CBool))
<*> (toBool <$>
(#{peek DEBUG_FLAGS, sparks} ptr :: IO CBool))
+ <*> (toBool <$>
+ (#{peek DEBUG_FLAGS, ipe} ptr :: IO CBool))
getCCFlags :: IO CCFlags
getCCFlags = do
=====================================
testsuite/tests/interface-stability/ghc-experimental-exports.stdout
=====================================
@@ -6428,7 +6428,7 @@ module GHC.RTS.Flags.Experimental where
type ConcFlags :: *
data ConcFlags = ConcFlags {ctxtSwitchTime :: RtsTime, ctxtSwitchTicks :: GHC.Internal.Types.Int}
type DebugFlags :: *
- data DebugFlags = DebugFlags {scheduler :: GHC.Internal.Types.Bool, interpreter :: GHC.Internal.Types.Bool, weak :: GHC.Internal.Types.Bool, gccafs :: GHC.Internal.Types.Bool, gc :: GHC.Internal.Types.Bool, nonmoving_gc :: GHC.Internal.Types.Bool, block_alloc :: GHC.Internal.Types.Bool, sanity :: GHC.Internal.Types.Bool, stable :: GHC.Internal.Types.Bool, prof :: GHC.Internal.Types.Bool, linker :: GHC.Internal.Types.Bool, apply :: GHC.Internal.Types.Bool, stm :: GHC.Internal.Types.Bool, squeeze :: GHC.Internal.Types.Bool, hpc :: GHC.Internal.Types.Bool, sparks :: GHC.Internal.Types.Bool}
+ data DebugFlags = DebugFlags {scheduler :: GHC.Internal.Types.Bool, interpreter :: GHC.Internal.Types.Bool, weak :: GHC.Internal.Types.Bool, gccafs :: GHC.Internal.Types.Bool, gc :: GHC.Internal.Types.Bool, nonmoving_gc :: GHC.Internal.Types.Bool, block_alloc :: GHC.Internal.Types.Bool, sanity :: GHC.Internal.Types.Bool, stable :: GHC.Internal.Types.Bool, prof :: GHC.Internal.Types.Bool, linker :: GHC.Internal.Types.Bool, apply :: GHC.Internal.Types.Bool, stm :: GHC.Internal.Types.Bool, squeeze :: GHC.Internal.Types.Bool, hpc :: GHC.Internal.Types.Bool, sparks :: GHC.Internal.Types.Bool, ipe :: GHC.Internal.Types.Bool}
type DoCostCentres :: *
data DoCostCentres = CostCentresNone | CostCentresSummary | CostCentresVerbose | CostCentresAll | CostCentresJSON
type DoHeapProfile :: *
=====================================
testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
=====================================
@@ -6431,7 +6431,7 @@ module GHC.RTS.Flags.Experimental where
type ConcFlags :: *
data ConcFlags = ConcFlags {ctxtSwitchTime :: RtsTime, ctxtSwitchTicks :: GHC.Internal.Types.Int}
type DebugFlags :: *
- data DebugFlags = DebugFlags {scheduler :: GHC.Internal.Types.Bool, interpreter :: GHC.Internal.Types.Bool, weak :: GHC.Internal.Types.Bool, gccafs :: GHC.Internal.Types.Bool, gc :: GHC.Internal.Types.Bool, nonmoving_gc :: GHC.Internal.Types.Bool, block_alloc :: GHC.Internal.Types.Bool, sanity :: GHC.Internal.Types.Bool, stable :: GHC.Internal.Types.Bool, prof :: GHC.Internal.Types.Bool, linker :: GHC.Internal.Types.Bool, apply :: GHC.Internal.Types.Bool, stm :: GHC.Internal.Types.Bool, squeeze :: GHC.Internal.Types.Bool, hpc :: GHC.Internal.Types.Bool, sparks :: GHC.Internal.Types.Bool}
+ data DebugFlags = DebugFlags {scheduler :: GHC.Internal.Types.Bool, interpreter :: GHC.Internal.Types.Bool, weak :: GHC.Internal.Types.Bool, gccafs :: GHC.Internal.Types.Bool, gc :: GHC.Internal.Types.Bool, nonmoving_gc :: GHC.Internal.Types.Bool, block_alloc :: GHC.Internal.Types.Bool, sanity :: GHC.Internal.Types.Bool, stable :: GHC.Internal.Types.Bool, prof :: GHC.Internal.Types.Bool, linker :: GHC.Internal.Types.Bool, apply :: GHC.Internal.Types.Bool, stm :: GHC.Internal.Types.Bool, squeeze :: GHC.Internal.Types.Bool, hpc :: GHC.Internal.Types.Bool, sparks :: GHC.Internal.Types.Bool, ipe :: GHC.Internal.Types.Bool}
type DoCostCentres :: *
data DoCostCentres = CostCentresNone | CostCentresSummary | CostCentresVerbose | CostCentresAll | CostCentresJSON
type DoHeapProfile :: *
=====================================
testsuite/tests/rts/T25275/DebugIpe.hs
=====================================
@@ -0,0 +1,6 @@
+module Main where
+
+import GHC.RTS.Flags.Experimental (DebugFlags (..), getDebugFlags)
+
+main :: IO ()
+main = print . ipe =<< getDebugFlags
=====================================
testsuite/tests/rts/T25275/T25275_A.stdout
=====================================
@@ -0,0 +1 @@
+False
\ No newline at end of file
=====================================
testsuite/tests/rts/T25275/T25275_B.stdout
=====================================
@@ -0,0 +1 @@
+True
\ No newline at end of file
=====================================
testsuite/tests/rts/T25275/T25275_C.stdout
=====================================
@@ -0,0 +1 @@
+False
\ No newline at end of file
=====================================
testsuite/tests/rts/T25275/T25275_D.stdout
=====================================
@@ -0,0 +1 @@
+True
\ No newline at end of file
=====================================
testsuite/tests/rts/T25275/TraceIpe.hs
=====================================
@@ -0,0 +1,6 @@
+module Main where
+
+import GHC.RTS.Flags.Experimental (TraceFlags (..), getTraceFlags)
+
+main :: IO ()
+main = print . traceIpe =<< getTraceFlags
=====================================
testsuite/tests/rts/T25275/all.T
=====================================
@@ -0,0 +1,45 @@
+# Compile and run with default RTS options
+test(
+ 'T25275_A',
+ [
+ extra_files(['TraceIpe.hs']),
+ js_skip
+ ],
+ multimod_compile_and_run,
+ ['TraceIpe', ''],
+)
+
+# Compile and run with -lI
+test(
+ 'T25275_B',
+ [
+ extra_files(['TraceIpe.hs']),
+ extra_run_opts('+RTS -lI -RTS'),
+ js_skip
+ ],
+ multimod_compile_and_run,
+ ['TraceIpe', ''],
+)
+
+# Compile and run with default RTS options
+test(
+ 'T25275_C',
+ [
+ only_ways(['debug']),
+ extra_files(['DebugIpe.hs']),
+ ],
+ multimod_compile_and_run,
+ ['DebugIpe', ''],
+)
+
+# Compile and run with -DI
+test(
+ 'T25275_D',
+ [
+ only_ways(['debug']),
+ extra_files(['DebugIpe.hs']),
+ extra_run_opts('+RTS -DI -RTS'),
+ ],
+ multimod_compile_and_run,
+ ['DebugIpe', ''],
+)
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/166400be280908d2a78752004ea454…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/166400be280908d2a78752004ea454…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/T26989] Major refactor of the Simplifier
by Simon Peyton Jones (@simonpj) 17 May '26
by Simon Peyton Jones (@simonpj) 17 May '26
17 May '26
Simon Peyton Jones pushed to branch wip/T26989 at Glasgow Haskell Compiler / GHC
Commits:
51e0a77c by Simon Peyton Jones at 2026-05-17T15:56:55+01:00
Major refactor of the Simplifier
The main payload of this patch is to refactor the Simplifer to avoid
repeated simplification when using Plan (AFTER) for rule rewrites.
The need for this was shown up by #26989.
See Note [Avoid repeated simplification] in GHC.Core.Opt.Simplify.Iteration.
Related refactoring:
* Refactor the two fields `sc_dup` and `sc_env` in `ApplyToVal` into one, `sc_env`.
Reason: the envt is irrelevant in the "simplified" case, so the data type describes
the possiblitiies much more accurately now.
* Some refactoring in `knownCon` to split off `wrapDataConFloats`.
* Refactor `lookupRule` and its auxiliary functions to return `RuleMatch`,
a new data type. See Note [data RuleMatch] in GHC.Core. Ditto for BuiltinRule.
This RuleMatch returns fragments of the target in rm_args and rm_floats,
leaving `rm_rhs` to be the stuff from the RULE itself.
Doing this has routine consequences in GHC.Core.Opt.ConstantFold. Many changes
there but all routine.
* When doing occurrence analysis on RULEs, make the occ-info on the rule
binders relate just to the RHS, not the LHS. See (OUR1) in
Note Note [OccInfo in unfoldings and rules]
This means that Lint must not complain about the fact that the patterns
in the RULE mentions binders that are marked dead.
See Note [Dead occurrences] in GHC.Core.Lint.
I changed the Core pretty-printer so that it didn't suppress dead binders,
else I can't see those binders in RULEs. That led to quite a lot of testsuite wibbles.
* Refactor FloatBinds, so that it is used both by
`exprIsConApp_mabye` and by `lookupRule`
* Move the definition of FloatBinds out of GHc.Core.Make, into GHC.Core.
* Add FloatTick as an extra constructor.
* Refactor `lookupRule` to use `FloatBinds` instead of `BindWrapper`.
This refactor just shares more code.
(Rename GHC.Core.Opt.FloatOut.FloatBinds to FloatLets, to avoid gratuitious
name clash with GHC.Core.FloatBinds.)
Corecion optimisation
* In simpleOpt, when composing coercions, call new function `optTransCo`.
This is much lighter weight than full blown coercion optimisation.
* Make `GHC.Core.Opt.Arity.pushCoValArg` and `pushCoTyArg` return the
coercionLKind of the coercion. This saves recomputing that coercionLKind
at the key call sites in GHC.Core.Opt.Simplify.Iteration.pushCast.
* Rename `addCoerce` in GHC.Core.Simplify.Iteration to become `pushCast`.
* In the `ApplyToVal` case of `pushCast` we had a very unsavoury call to `simplArg`.
I eliminated it by adding a field `sc_cast` to `ApplyToVal` that records any
pending casts. Much nicer now. See Note [The sc_cast field of ApplyToVal].
* Don't optimise coercions if the type-substitution is empty.
See Note [Optimising coercions] in GHC.Core.Opt.Simplify.Iteration.
The fix for #26838 is dramatic. For the test in perf/compiler/T26839 we have
Compiler allocs: Before: 7,363M
After: 688M
Compile time goes down generally. Here are compiler-alloc changes
over 0.5%:
CoOpt_Read(normal) 729,184,920 -0.7%
CoOpt_Singletons(normal) 666,916,960 -4.6% GOOD
LargeRecord(normal) 1,227,056,876 +1.1%
T12227(normal) 256,827,604 -4.6% GOOD
T12425(optasm) 76,879,410 -0.8%
T12545(normal) 787,826,918 -10.8% GOOD
T12707(normal) 775,186,464 -0.9%
T13253(normal) 318,599,596 -0.8%
T14766(normal) 685,857,320 -1.0%
T15304(normal) 1,123,333,422 -2.2%
T15630(normal) 123,142,330 -2.6%
T15630a(normal) 123,092,100 -2.6%
T15703(normal) 299,751,682 -2.9% GOOD
T17516(normal) 964,072,280 +1.0%
T18223(normal) 367,016,820 -6.2% GOOD
T18730(optasm) 130,643,770 -3.3% GOOD
T20261(normal) 535,608,584 -0.7%
T21839c(normal) 340,340,436 -0.9%
T24984(normal) 85,568,392 -1.9%
T3064(normal) 174,631,992 -1.2%
T3294(normal) 1,215,886,432 -0.7%
T5030(normal) 141,449,704 -17.2% GOOD
T5321Fun(normal) 258,484,744 -1.9%
T8095(normal) 770,532,232 -2.7%
T9630(normal) 858,423,408 -14.5% GOOD
T9872c(normal) 1,591,709,448 +0.7%
info_table_map_perf(normal) 19,700,614,458 -1.3%
geo. mean -0.7%
minimum -17.2%
maximum +1.1%
However, strangely there seems to be a 5.0% increase in CoOpt_Read in
the x86_64-linux-fedora43-validate+debug_info+ubsan job, although
there generally a /decrease/ in this test in other builds. The baseline
value looks strange. Anyway I'll just accept it.
Metric Decrease:
CoOpt_Singletons
T12227
T12545
T15703
T18223
T18730
T21839c
T5030
T9630
Metric Increase:
CoOpt_Read
- - - - -
55 changed files:
- compiler/GHC/Core.hs
- compiler/GHC/Core/Coercion.hs
- compiler/GHC/Core/Coercion/Opt.hs
- compiler/GHC/Core/Lint.hs
- compiler/GHC/Core/Make.hs
- compiler/GHC/Core/Opt/Arity.hs
- compiler/GHC/Core/Opt/ConstantFold.hs
- compiler/GHC/Core/Opt/FloatIn.hs
- compiler/GHC/Core/Opt/FloatOut.hs
- compiler/GHC/Core/Opt/OccurAnal.hs
- compiler/GHC/Core/Opt/Simplify/Env.hs
- compiler/GHC/Core/Opt/Simplify/Iteration.hs
- compiler/GHC/Core/Opt/Simplify/Utils.hs
- compiler/GHC/Core/Opt/SpecConstr.hs
- compiler/GHC/Core/Opt/Specialise.hs
- compiler/GHC/Core/Ppr.hs
- compiler/GHC/Core/Rules.hs
- compiler/GHC/Core/SimpleOpt.hs
- compiler/GHC/Core/TyCo/Subst.hs
- compiler/GHC/CoreToStg/Prep.hs
- compiler/GHC/Data/List/SetOps.hs
- compiler/GHC/Driver/Config/Core/Lint.hs
- compiler/GHC/HsToCore/Pmc/Solver.hs
- compiler/GHC/IfaceToCore.hs
- compiler/GHC/Types/Id/Make.hs
- testsuite/tests/codeGen/should_compile/T25177.stderr
- testsuite/tests/deSugar/should_compile/T13208.stdout
- testsuite/tests/linters/notes.stdout
- testsuite/tests/numeric/should_compile/T15547.stderr
- testsuite/tests/numeric/should_compile/T20347.stderr
- testsuite/tests/numeric/should_compile/T20374.stderr
- testsuite/tests/numeric/should_compile/T20376.stderr
- + testsuite/tests/perf/compiler/T26989.hs
- + testsuite/tests/perf/compiler/T26989a.hs
- testsuite/tests/perf/compiler/all.T
- testsuite/tests/printer/T18052a.stderr
- testsuite/tests/simplCore/should_compile/DsSpecPragmas.stderr
- testsuite/tests/simplCore/should_compile/RewriteHigherOrderPatterns.stderr
- testsuite/tests/simplCore/should_compile/T15205.stderr
- testsuite/tests/simplCore/should_compile/T18668.stderr
- testsuite/tests/simplCore/should_compile/T19246.stderr
- testsuite/tests/simplCore/should_compile/T19599.stderr
- testsuite/tests/simplCore/should_compile/T19599a.stderr
- testsuite/tests/simplCore/should_compile/T21917.stderr
- testsuite/tests/simplCore/should_compile/T23074.stderr
- testsuite/tests/simplCore/should_compile/T24359a.stderr
- testsuite/tests/simplCore/should_compile/T25160.stderr
- testsuite/tests/simplCore/should_compile/T25718c.stderr-ws-32
- testsuite/tests/simplCore/should_compile/T25718c.stderr-ws-64
- testsuite/tests/simplCore/should_compile/T26051.stderr
- testsuite/tests/simplCore/should_compile/T26116.stderr
- testsuite/tests/simplCore/should_compile/T8331.stderr
- testsuite/tests/simplCore/should_compile/T8848a.stderr
- testsuite/tests/simplCore/should_compile/spec004.stderr
- testsuite/tests/typecheck/should_compile/T13032.stderr
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/51e0a77c83a180aa9d79ed8d757b290…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/51e0a77c83a180aa9d79ed8d757b290…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 5 commits: Add type families: Tuple, Constraints, Tuple#, Sum#
by Marge Bot (@marge-bot) 17 May '26
by Marge Bot (@marge-bot) 17 May '26
17 May '26
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
63ddbc76 by Vladislav Zavialov at 2026-05-17T10:06:08-04:00
Add type families: Tuple, Constraints, Tuple#, Sum#
These type families map tuples of types to the corresponding Tuple<N>,
Tuple<N>#, CTuple<N>, and Sum<N># types. Some examples at N=2:
Tuple (Int, Bool) = Tuple2 Int Bool
Constraints (Show a, Eq a) = CTuple2 (Show a) (Eq a)
Tuple# (Int#, Float#) = Tuple2# Int# Float#
Sum# (Int#, Float#) = Sum2# Int# Float#
See GHC Proposal #145 "Non-punning list and tuple syntax".
To make the Sum# instance at N=64 possible, this patch also introduces
the Sum64# constructor declaration and bumps mAX_SUM_SIZE from 63 to 64.
Metric Increase:
ghc_experimental_dir
- - - - -
348c7f07 by fendor at 2026-05-17T10:06:09-04:00
Fix regression T27202: `:load` and `:add` work in GHCi
To fix the regression there are conceptually two major things that we
fix:
* We don't remove the `importDirs` from `interactive-session`
* When `:add`ing a module, we don't try to find them via PackageImports
* The PackageImport is wrong as we can't know the package-name at
this stage in ghc/UI.hs
What does it mean to not remove the `importDirs` from
`interactive-session`?
It means that, given some initial `DynFlags`, we will use those
`importDirs` in `interactive-session`.
The initial `DynFlags`, however, depend on how you initialise the GHC
session.
For a simple session, initialised by
ghc -isrc -this-unit-id main
It is simple, just use the `DynFlags` given on the cli.
Thus, `main` and `interactive-session` will have the same `DynFlags`,
except for the `homeUnitId` and `interactive-session` depends on `main`
by construction of the GHCi session.
What about a multiple home unit session, though?
ghc -unit @unit1 -unit @unit2
What are the `DynFlags` in this cli invocation? It shouldn't be either
`@unti1` nor `@unit2`, as the order shouldn't matter or any other
implicit condition.
For consistency, we decide that the initial `DynFlags` are the top
`DynFlags` on the cli, ignoring `-unit` flags.
Thus, in this example, there are no `importsDirs` regardless of what we
might find in `@unit1` and `@unit2`.
But in this invocation:
ghc -isrc -unit @unit1 -unit @unit2
The `interactive-session` will have the `importsDirs` `src`.
Note, `-isrc` will be inherited in `@unit1` and `@unit2`, so you need to
explicitly use `-i` to clear the `importsDirs`, in order to avoid
accidentally adding `src` as an import directory to all other home
units.
This fix has been made possible by the improvements introduced in
!15888, which avoids ambiguity when a home unit shares the `importsDirs`
with the `interactive-session`, on top of being much faster for multiple
home units.
Adds regression tests for T27202 for `:load`ing and `:add`ing modules
that are located in import directories.
- - - - -
060cfe18 by fendor at 2026-05-17T10:06:09-04:00
Use home unit package db stacks in GHCi prompt and session unit
In order to import modules from home unit dependencies (e.g., `Data.Map`),
the ghci prompt unit needs to populate its `UnitState`.
This is tricky to handle correctly, which `PackageDBFlag`s should we use
to populate the `UnitState`?
We decide, the most intuitive solution for users is to depend on all
`PackageDBFlag`s, so that any dependency can be imported in GHCi.
This assumes consistency in the `PackageDBFlag`s, so no two home units
specify `PackageDBFlag`s that are inconsistent with each other.
We could simply concat all the `PackageDBFlag`s of the existing home
units, but later `PackageDBFlag`s shadow earlier ones, leading to the
last processed home units' `PackageDBFlag`s to shadow the earlier ones.
This is hard to fix, we need to give users the capability to provide ghc
options for the ghci prompt home unit.
However, as this is considerably more work, we decided on an
approximation that should work out most of the time.
Package Db stacks in cabal and stack follow a certain structure:
-no-user-package-db > -package-db $cabal-store > -package-db $local-db
The first two arguments are always the same, namely the
`-no-user-package-db` and `-package-db`.
We compute the longest common prefix over all home units, and use that
as the start of the package db stack. Then, over the rest of the
`PackageDBFlag`s, we simply take the union and append them to our
initial stack.
We assume, that the rest of package dbs only defines very few, "local"
units that are usually not shadowing each other.
This allows us to get a relatively consistent package database stack for
the ghci prompt home unit.
Similar reasoning applies to the session unit in order to add modules to
the session and have dependencies available in the module.
We do something similar for `-package` flags, to make sure only the
correct units are actually visible in the ghci session.
This time, we simply take the union of all `PackageFlag`s, allowing us
to import modules from the home unit dependencies.
In the future, it would be beneficial to allow the user to provide the
exact ghc options to control the visibilities. For now, this will have
to do.
- - - - -
fcd7ac8c by Duncan Coutts at 2026-05-17T10:06:09-04:00
Document removal of the signal-based interval timer
Update mentions within the RTS section of the users guide.
Add a changelog entry.
- - - - -
3ebc840e by Duncan Coutts at 2026-05-17T10:06:09-04:00
Fix section for an recent changelog entry
- - - - -
93 changed files:
- + changelog.d/T27202
- changelog.d/dynamic-trace-flags
- + changelog.d/lib-add-tuple-tyfam-27179
- + changelog.d/no-more-timer-signal
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Settings/Constants.hs
- compiler/GHC/Unit/State.hs
- docs/users_guide/profiling.rst
- docs/users_guide/runtime_control.rst
- ghc/GHCi/UI.hs
- ghc/Main.hs
- libraries/base/src/GHC/Base.hs
- libraries/base/src/GHC/Exts.hs
- libraries/ghc-experimental/src/Data/Sum/Experimental.hs
- libraries/ghc-experimental/src/Data/Tuple/Experimental.hs
- libraries/ghc-internal/src/GHC/Internal/Base.hs
- libraries/ghc-internal/src/GHC/Internal/Exts.hs
- libraries/ghc-internal/src/GHC/Internal/Types.hs
- testsuite/tests/driver/fat-iface/fat014.stdout
- + testsuite/tests/ghci/prog-mhu006/Makefile
- + testsuite/tests/ghci/prog-mhu006/a/A.hs
- + testsuite/tests/ghci/prog-mhu006/all.T
- + testsuite/tests/ghci/prog-mhu006/b/B.hs
- + testsuite/tests/ghci/prog-mhu006/prog-mhu006a.script
- + testsuite/tests/ghci/prog-mhu006/prog-mhu006a.stdout
- + testsuite/tests/ghci/prog-mhu006/unitA
- + testsuite/tests/ghci/prog-mhu006/unitB
- testsuite/tests/ghci/prog018/prog018.stdout
- testsuite/tests/ghci/prog020/Makefile
- testsuite/tests/ghci/prog020/all.T
- testsuite/tests/ghci/prog020/ghci.prog020.script → testsuite/tests/ghci/prog020/ghci.prog020a.script
- testsuite/tests/ghci/prog020/ghci.prog020.stderr → testsuite/tests/ghci/prog020/ghci.prog020a.stderr
- testsuite/tests/ghci/prog020/ghci.prog020.stdout → testsuite/tests/ghci/prog020/ghci.prog020a.stdout
- + testsuite/tests/ghci/prog020/ghci.prog020b.script
- + testsuite/tests/ghci/prog020/ghci.prog020b.stderr
- + testsuite/tests/ghci/prog020/ghci.prog020b.stdout
- + testsuite/tests/ghci/prog023/Makefile
- + testsuite/tests/ghci/prog023/all.T
- + testsuite/tests/ghci/prog023/prog023a.script
- + testsuite/tests/ghci/prog023/prog023a.stdout
- + testsuite/tests/ghci/prog023/prog023b.script
- + testsuite/tests/ghci/prog023/prog023b.stdout
- + testsuite/tests/ghci/prog023/src/A.hs
- + testsuite/tests/ghci/prog024/Makefile
- + testsuite/tests/ghci/prog024/all.T
- + testsuite/tests/ghci/prog024/prog024a.script
- + testsuite/tests/ghci/prog024/prog024a.stdout
- + testsuite/tests/ghci/prog024/prog024b.script
- + testsuite/tests/ghci/prog024/prog024b.stdout
- + testsuite/tests/ghci/prog024/prog024c.script
- + testsuite/tests/ghci/prog024/prog024c.stderr
- + testsuite/tests/ghci/prog024/prog024c.stdout
- + testsuite/tests/ghci/prog024/prog024d.script
- + testsuite/tests/ghci/prog024/prog024d.stderr
- + testsuite/tests/ghci/prog024/prog024d.stdout
- + testsuite/tests/ghci/prog024/prog024e.script
- + testsuite/tests/ghci/prog024/prog024e.stdout
- + testsuite/tests/ghci/prog024/prog024f.script
- + testsuite/tests/ghci/prog024/prog024f.stdout
- + testsuite/tests/ghci/prog024/src/A.hs
- + testsuite/tests/ghci/prog024/src/B.hs
- + testsuite/tests/ghci/prog025/Makefile
- + testsuite/tests/ghci/prog025/a/A.hs
- + testsuite/tests/ghci/prog025/all.T
- + testsuite/tests/ghci/prog025/prog025a.script
- + testsuite/tests/ghci/prog025/prog025a.stdout
- + testsuite/tests/ghci/prog025/prog025b.script
- + testsuite/tests/ghci/prog025/prog025b.stdout
- + testsuite/tests/ghci/prog025/testpkg/Test.hs
- + testsuite/tests/ghci/prog025/testpkg/testpkg-0.1.0.0.pkg
- + testsuite/tests/ghci/prog025/testpkg/testpkg-0.2.0.0.pkg
- + testsuite/tests/ghci/prog025/unitA
- testsuite/tests/ghci/scripts/ListTuplePunsPprNoAbbrevTuple.stdout
- testsuite/tests/ghci/scripts/T13997.stdout
- testsuite/tests/ghci/scripts/T1914.stdout
- testsuite/tests/ghci/scripts/T20217.stdout
- testsuite/tests/ghci/scripts/T8042.stdout
- testsuite/tests/ghci/scripts/T8042recomp.stdout
- testsuite/tests/ghci/scripts/all.T
- testsuite/tests/ghci/should_run/T10920.stderr
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
- testsuite/tests/interface-stability/ghc-prim-exports.stdout
- testsuite/tests/interface-stability/ghc-prim-exports.stdout-mingw32
- testsuite/tests/parser/should_compile/ListTuplePunsSuccess1.hs
- testsuite/tests/parser/should_compile/all.T
- + testsuite/tests/parser/should_fail/ListTuplePunsFail6.hs
- + testsuite/tests/parser/should_fail/ListTuplePunsFail6.stderr
- testsuite/tests/parser/should_fail/all.T
- testsuite/tests/parser/should_run/ListTuplePunsConstraints.hs
- testsuite/tests/profiling/should_run/callstack001.stdout
- + testsuite/tests/typecheck/should_compile/T23135.hs
- testsuite/tests/typecheck/should_compile/all.T
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8fa4f1d1eb16528efe91918f3ed3c4…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8fa4f1d1eb16528efe91918f3ed3c4…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/wenkokke/trace-ipe] 4 commits: ghc-internal: Add TraceFlags.traceIPE
by Wen Kokke (@wenkokke) 17 May '26
by Wen Kokke (@wenkokke) 17 May '26
17 May '26
Wen Kokke pushed to branch wip/wenkokke/trace-ipe at Glasgow Haskell Compiler / GHC
Commits:
38404984 by Wen Kokke at 2026-05-17T11:01:36+01:00
ghc-internal: Add TraceFlags.traceIPE
- - - - -
0f7c6dc7 by Wen Kokke at 2026-05-17T11:01:39+01:00
testsuite: Add test for TraceFlags.traceIpe
- - - - -
8cad4a0d by Wen Kokke at 2026-05-17T11:01:39+01:00
ghc-internal: Add DebugFlags.ipe
- - - - -
166400be by Wen Kokke at 2026-05-17T11:01:39+01:00
testsuite: Add test for DebugFlags.ipe
- - - - -
10 changed files:
- libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout
- testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
- + testsuite/tests/rts/T25275/DebugIpe.hs
- + testsuite/tests/rts/T25275/T25275_A.stdout
- + testsuite/tests/rts/T25275/T25275_B.stdout
- + testsuite/tests/rts/T25275/T25275_C.stdout
- + testsuite/tests/rts/T25275/T25275_D.stdout
- + testsuite/tests/rts/T25275/TraceIpe.hs
- + testsuite/tests/rts/T25275/all.T
Changes:
=====================================
libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc
=====================================
@@ -211,6 +211,8 @@ data DebugFlags = DebugFlags
, squeeze :: Bool -- ^ @z@ stack squeezing & lazy blackholing
, hpc :: Bool -- ^ @c@ coverage
, sparks :: Bool -- ^ @r@
+ , ipe :: Bool -- ^ @I@
+ -- @since ghc-experimental-10.0.0
} deriving ( Show -- ^ @since base-4.8.0.0
, Generic -- ^ @since base-4.15.0.0
)
@@ -359,6 +361,8 @@ data TraceFlags = TraceFlags
, sparksSampled :: Bool -- ^ trace spark events by a sampled method
, sparksFull :: Bool -- ^ trace spark events 100% accurately
, user :: Bool -- ^ trace user events (emitted from Haskell code)
+ , traceIpe :: Bool -- ^ trace IPE events
+ -- @since ghc-experimental-10.0.0
} deriving ( Show -- ^ @since base-4.8.0.0
, Generic -- ^ @since base-4.15.0.0
)
@@ -588,6 +592,8 @@ getDebugFlags = do
(#{peek DEBUG_FLAGS, hpc} ptr :: IO CBool))
<*> (toBool <$>
(#{peek DEBUG_FLAGS, sparks} ptr :: IO CBool))
+ <*> (toBool <$>
+ (#{peek DEBUG_FLAGS, ipe} ptr :: IO CBool))
getCCFlags :: IO CCFlags
getCCFlags = do
@@ -628,7 +634,7 @@ getTraceFlags :: IO TraceFlags
getTraceFlags = do
#if defined(javascript_HOST_ARCH)
-- The JS backend does not currently have trace flags
- return (TraceFlags TraceNone False False False False False False False)
+ return (TraceFlags TraceNone False False False False False False False False)
#else
let ptr = (#ptr RTS_FLAGS, TraceFlags) rtsFlagsPtr
TraceFlags <$> (toEnum . fromIntegral
@@ -647,6 +653,8 @@ getTraceFlags = do
(#{peek TRACE_FLAGS, sparks_full} ptr :: IO CBool))
<*> (toBool <$>
(#{peek TRACE_FLAGS, user} ptr :: IO CBool))
+ <*> (toBool <$>
+ (#{peek TRACE_FLAGS, ipe} ptr :: IO CBool))
#endif
getTickyFlags :: IO TickyFlags
=====================================
testsuite/tests/interface-stability/ghc-experimental-exports.stdout
=====================================
@@ -6428,7 +6428,7 @@ module GHC.RTS.Flags.Experimental where
type ConcFlags :: *
data ConcFlags = ConcFlags {ctxtSwitchTime :: RtsTime, ctxtSwitchTicks :: GHC.Internal.Types.Int}
type DebugFlags :: *
- data DebugFlags = DebugFlags {scheduler :: GHC.Internal.Types.Bool, interpreter :: GHC.Internal.Types.Bool, weak :: GHC.Internal.Types.Bool, gccafs :: GHC.Internal.Types.Bool, gc :: GHC.Internal.Types.Bool, nonmoving_gc :: GHC.Internal.Types.Bool, block_alloc :: GHC.Internal.Types.Bool, sanity :: GHC.Internal.Types.Bool, stable :: GHC.Internal.Types.Bool, prof :: GHC.Internal.Types.Bool, linker :: GHC.Internal.Types.Bool, apply :: GHC.Internal.Types.Bool, stm :: GHC.Internal.Types.Bool, squeeze :: GHC.Internal.Types.Bool, hpc :: GHC.Internal.Types.Bool, sparks :: GHC.Internal.Types.Bool}
+ data DebugFlags = DebugFlags {scheduler :: GHC.Internal.Types.Bool, interpreter :: GHC.Internal.Types.Bool, weak :: GHC.Internal.Types.Bool, gccafs :: GHC.Internal.Types.Bool, gc :: GHC.Internal.Types.Bool, nonmoving_gc :: GHC.Internal.Types.Bool, block_alloc :: GHC.Internal.Types.Bool, sanity :: GHC.Internal.Types.Bool, stable :: GHC.Internal.Types.Bool, prof :: GHC.Internal.Types.Bool, linker :: GHC.Internal.Types.Bool, apply :: GHC.Internal.Types.Bool, stm :: GHC.Internal.Types.Bool, squeeze :: GHC.Internal.Types.Bool, hpc :: GHC.Internal.Types.Bool, sparks :: GHC.Internal.Types.Bool, ipe :: GHC.Internal.Types.Bool}
type DoCostCentres :: *
data DoCostCentres = CostCentresNone | CostCentresSummary | CostCentresVerbose | CostCentresAll | CostCentresJSON
type DoHeapProfile :: *
@@ -6505,7 +6505,7 @@ module GHC.RTS.Flags.Experimental where
type TickyFlags :: *
data TickyFlags = TickyFlags {showTickyStats :: GHC.Internal.Types.Bool, tickyFile :: GHC.Internal.Maybe.Maybe GHC.Internal.IO.FilePath}
type TraceFlags :: *
- data TraceFlags = TraceFlags {tracing :: DoTrace, timestamp :: GHC.Internal.Types.Bool, traceScheduler :: GHC.Internal.Types.Bool, traceGc :: GHC.Internal.Types.Bool, traceNonmovingGc :: GHC.Internal.Types.Bool, sparksSampled :: GHC.Internal.Types.Bool, sparksFull :: GHC.Internal.Types.Bool, user :: GHC.Internal.Types.Bool}
+ data TraceFlags = TraceFlags {tracing :: DoTrace, timestamp :: GHC.Internal.Types.Bool, traceScheduler :: GHC.Internal.Types.Bool, traceGc :: GHC.Internal.Types.Bool, traceNonmovingGc :: GHC.Internal.Types.Bool, sparksSampled :: GHC.Internal.Types.Bool, sparksFull :: GHC.Internal.Types.Bool, user :: GHC.Internal.Types.Bool, traceIpe :: GHC.Internal.Types.Bool}
getCCFlags :: GHC.Internal.Types.IO CCFlags
getConcFlags :: GHC.Internal.Types.IO ConcFlags
getDebugFlags :: GHC.Internal.Types.IO DebugFlags
=====================================
testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32
=====================================
@@ -6431,7 +6431,7 @@ module GHC.RTS.Flags.Experimental where
type ConcFlags :: *
data ConcFlags = ConcFlags {ctxtSwitchTime :: RtsTime, ctxtSwitchTicks :: GHC.Internal.Types.Int}
type DebugFlags :: *
- data DebugFlags = DebugFlags {scheduler :: GHC.Internal.Types.Bool, interpreter :: GHC.Internal.Types.Bool, weak :: GHC.Internal.Types.Bool, gccafs :: GHC.Internal.Types.Bool, gc :: GHC.Internal.Types.Bool, nonmoving_gc :: GHC.Internal.Types.Bool, block_alloc :: GHC.Internal.Types.Bool, sanity :: GHC.Internal.Types.Bool, stable :: GHC.Internal.Types.Bool, prof :: GHC.Internal.Types.Bool, linker :: GHC.Internal.Types.Bool, apply :: GHC.Internal.Types.Bool, stm :: GHC.Internal.Types.Bool, squeeze :: GHC.Internal.Types.Bool, hpc :: GHC.Internal.Types.Bool, sparks :: GHC.Internal.Types.Bool}
+ data DebugFlags = DebugFlags {scheduler :: GHC.Internal.Types.Bool, interpreter :: GHC.Internal.Types.Bool, weak :: GHC.Internal.Types.Bool, gccafs :: GHC.Internal.Types.Bool, gc :: GHC.Internal.Types.Bool, nonmoving_gc :: GHC.Internal.Types.Bool, block_alloc :: GHC.Internal.Types.Bool, sanity :: GHC.Internal.Types.Bool, stable :: GHC.Internal.Types.Bool, prof :: GHC.Internal.Types.Bool, linker :: GHC.Internal.Types.Bool, apply :: GHC.Internal.Types.Bool, stm :: GHC.Internal.Types.Bool, squeeze :: GHC.Internal.Types.Bool, hpc :: GHC.Internal.Types.Bool, sparks :: GHC.Internal.Types.Bool, ipe :: GHC.Internal.Types.Bool}
type DoCostCentres :: *
data DoCostCentres = CostCentresNone | CostCentresSummary | CostCentresVerbose | CostCentresAll | CostCentresJSON
type DoHeapProfile :: *
@@ -6508,7 +6508,7 @@ module GHC.RTS.Flags.Experimental where
type TickyFlags :: *
data TickyFlags = TickyFlags {showTickyStats :: GHC.Internal.Types.Bool, tickyFile :: GHC.Internal.Maybe.Maybe GHC.Internal.IO.FilePath}
type TraceFlags :: *
- data TraceFlags = TraceFlags {tracing :: DoTrace, timestamp :: GHC.Internal.Types.Bool, traceScheduler :: GHC.Internal.Types.Bool, traceGc :: GHC.Internal.Types.Bool, traceNonmovingGc :: GHC.Internal.Types.Bool, sparksSampled :: GHC.Internal.Types.Bool, sparksFull :: GHC.Internal.Types.Bool, user :: GHC.Internal.Types.Bool}
+ data TraceFlags = TraceFlags {tracing :: DoTrace, timestamp :: GHC.Internal.Types.Bool, traceScheduler :: GHC.Internal.Types.Bool, traceGc :: GHC.Internal.Types.Bool, traceNonmovingGc :: GHC.Internal.Types.Bool, sparksSampled :: GHC.Internal.Types.Bool, sparksFull :: GHC.Internal.Types.Bool, user :: GHC.Internal.Types.Bool, traceIpe :: GHC.Internal.Types.Bool}
getCCFlags :: GHC.Internal.Types.IO CCFlags
getConcFlags :: GHC.Internal.Types.IO ConcFlags
getDebugFlags :: GHC.Internal.Types.IO DebugFlags
=====================================
testsuite/tests/rts/T25275/DebugIpe.hs
=====================================
@@ -0,0 +1,6 @@
+module Main where
+
+import GHC.RTS.Flags.Experimental (DebugFlags (..), getDebugFlags)
+
+main :: IO ()
+main = print . ipe =<< getDebugFlags
=====================================
testsuite/tests/rts/T25275/T25275_A.stdout
=====================================
@@ -0,0 +1 @@
+False
\ No newline at end of file
=====================================
testsuite/tests/rts/T25275/T25275_B.stdout
=====================================
@@ -0,0 +1 @@
+True
\ No newline at end of file
=====================================
testsuite/tests/rts/T25275/T25275_C.stdout
=====================================
@@ -0,0 +1 @@
+False
\ No newline at end of file
=====================================
testsuite/tests/rts/T25275/T25275_D.stdout
=====================================
@@ -0,0 +1 @@
+True
\ No newline at end of file
=====================================
testsuite/tests/rts/T25275/TraceIpe.hs
=====================================
@@ -0,0 +1,6 @@
+module Main where
+
+import GHC.RTS.Flags.Experimental (TraceFlags (..), getTraceFlags)
+
+main :: IO ()
+main = print . traceIpe =<< getTraceFlags
=====================================
testsuite/tests/rts/T25275/all.T
=====================================
@@ -0,0 +1,43 @@
+# Compile and run with default RTS options
+test(
+ 'T25275_A',
+ [
+ extra_files(['TraceIpe.hs']),
+ ],
+ multimod_compile_and_run,
+ ['TraceIpe', ''],
+)
+
+# Compile and run with -lI
+test(
+ 'T25275_B',
+ [
+ extra_files(['TraceIpe.hs']),
+ extra_run_opts('+RTS -lI -RTS'),
+ ],
+ multimod_compile_and_run,
+ ['TraceIpe', ''],
+)
+
+# Compile and run with default RTS options
+test(
+ 'T25275_C',
+ [
+ only_ways(['debug']),
+ extra_files(['DebugIpe.hs']),
+ ],
+ multimod_compile_and_run,
+ ['DebugIpe', ''],
+)
+
+# Compile and run with -DI
+test(
+ 'T25275_D',
+ [
+ only_ways(['debug']),
+ extra_files(['DebugIpe.hs']),
+ extra_run_opts('+RTS -DI -RTS'),
+ ],
+ multimod_compile_and_run,
+ ['DebugIpe', ''],
+)
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/c0709b8bccd3ec0332270758b4e452…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/c0709b8bccd3ec0332270758b4e452…
You're receiving this email because of your account on gitlab.haskell.org.
1
0