singletons 2.5.1 → 2.6
raw patch · 275 files changed
+21482/−20466 lines, 275 filesdep +turtledep ~basedep ~tastydep ~th-desugarsetup-changed
Dependencies added: turtle
Dependency ranges changed: base, tasty, th-desugar
Files
- CHANGES.md +157/−0
- README.md +17/−38
- Setup.hs +1/−1
- singletons.cabal +18/−15
- src/Data/Singletons.hs +107/−6
- src/Data/Singletons/CustomStar.hs +17/−13
- src/Data/Singletons/Decide.hs +26/−13
- src/Data/Singletons/Deriving/Bounded.hs +1/−1
- src/Data/Singletons/Deriving/Enum.hs +4/−4
- src/Data/Singletons/Deriving/Foldable.hs +4/−4
- src/Data/Singletons/Deriving/Functor.hs +5/−5
- src/Data/Singletons/Deriving/Infer.hs +6/−8
- src/Data/Singletons/Deriving/Ord.hs +6/−6
- src/Data/Singletons/Deriving/Show.hs +132/−49
- src/Data/Singletons/Deriving/Traversable.hs +3/−3
- src/Data/Singletons/Deriving/Util.hs +16/−11
- src/Data/Singletons/Internal.hs +122/−7
- src/Data/Singletons/Names.hs +36/−40
- src/Data/Singletons/Partition.hs +39/−30
- src/Data/Singletons/Prelude.hs +10/−12
- src/Data/Singletons/Prelude/Applicative.hs +2/−1
- src/Data/Singletons/Prelude/Base.hs +3/−2
- src/Data/Singletons/Prelude/Bool.hs +1/−10
- src/Data/Singletons/Prelude/Const.hs +5/−8
- src/Data/Singletons/Prelude/Either.hs +3/−11
- src/Data/Singletons/Prelude/Enum.hs +1/−1
- src/Data/Singletons/Prelude/Foldable.hs +12/−7
- src/Data/Singletons/Prelude/Function.hs +2/−2
- src/Data/Singletons/Prelude/Functor.hs +1/−0
- src/Data/Singletons/Prelude/Identity.hs +2/−2
- src/Data/Singletons/Prelude/Instances.hs +7/−2
- src/Data/Singletons/Prelude/IsString.hs +1/−0
- src/Data/Singletons/Prelude/List.hs +2/−10
- src/Data/Singletons/Prelude/List/Internal.hs +2/−6
- src/Data/Singletons/Prelude/List/Internal/Disambiguation.hs +2/−1
- src/Data/Singletons/Prelude/List/NonEmpty.hs +2/−12
- src/Data/Singletons/Prelude/Maybe.hs +3/−11
- src/Data/Singletons/Prelude/Monad.hs +7/−2
- src/Data/Singletons/Prelude/Monad/Fail.hs +64/−0
- src/Data/Singletons/Prelude/Monad/Internal.hs +1/−15
- src/Data/Singletons/Prelude/Monad/Zip.hs +1/−0
- src/Data/Singletons/Prelude/Monoid.hs +4/−5
- src/Data/Singletons/Prelude/Num.hs +3/−2
- src/Data/Singletons/Prelude/Ord.hs +2/−4
- src/Data/Singletons/Prelude/Semigroup.hs +6/−11
- src/Data/Singletons/Prelude/Semigroup/Internal.hs +3/−1
- src/Data/Singletons/Prelude/Show.hs +1/−0
- src/Data/Singletons/Prelude/Traversable.hs +8/−5
- src/Data/Singletons/Prelude/Tuple.hs +4/−3
- src/Data/Singletons/Prelude/Void.hs +1/−0
- src/Data/Singletons/Promote.hs +80/−90
- src/Data/Singletons/Promote/Defun.hs +32/−24
- src/Data/Singletons/Promote/Eq.hs +20/−14
- src/Data/Singletons/Promote/Monad.hs +22/−23
- src/Data/Singletons/Promote/Type.hs +20/−11
- src/Data/Singletons/ShowSing.hs +148/−30
- src/Data/Singletons/Sigma.hs +132/−18
- src/Data/Singletons/Single.hs +233/−68
- src/Data/Singletons/Single/Data.hs +30/−28
- src/Data/Singletons/Single/Defun.hs +13/−61
- src/Data/Singletons/Single/Eq.hs +43/−20
- src/Data/Singletons/Single/Monad.hs +0/−1
- src/Data/Singletons/Single/Type.hs +21/−15
- src/Data/Singletons/Syntax.hs +36/−35
- src/Data/Singletons/TH.hs +6/−4
- src/Data/Singletons/TypeError.hs +7/−23
- src/Data/Singletons/TypeLits.hs +1/−2
- src/Data/Singletons/TypeLits/Internal.hs +7/−13
- src/Data/Singletons/TypeRepTYPE.hs +10/−14
- src/Data/Singletons/Util.hs +5/−59
- tests/ByHand.hs +36/−27
- tests/ByHand2.hs +13/−10
- tests/SingletonsTestSuite.hs +42/−22
- tests/SingletonsTestSuiteUtils.hs +32/−28
- tests/compile-and-dump/GradingClient/Database.ghc86.template +0/−2610
- tests/compile-and-dump/GradingClient/Database.ghc88.template +2663/−0
- tests/compile-and-dump/GradingClient/Main.ghc86.template +0/−123
- tests/compile-and-dump/GradingClient/Main.ghc88.template +123/−0
- tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc86.template +0/−212
- tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc88.template +211/−0
- tests/compile-and-dump/Promote/Constructors.ghc86.template +0/−79
- tests/compile-and-dump/Promote/Constructors.ghc88.template +79/−0
- tests/compile-and-dump/Promote/GenDefunSymbols.ghc86.template +0/−54
- tests/compile-and-dump/Promote/GenDefunSymbols.ghc88.template +54/−0
- tests/compile-and-dump/Promote/Newtypes.ghc86.template +0/−48
- tests/compile-and-dump/Promote/Newtypes.ghc88.template +48/−0
- tests/compile-and-dump/Promote/Pragmas.ghc86.template +0/−12
- tests/compile-and-dump/Promote/Pragmas.ghc88.template +12/−0
- tests/compile-and-dump/Promote/Prelude.ghc86.template +0/−19
- tests/compile-and-dump/Promote/Prelude.ghc88.template +19/−0
- tests/compile-and-dump/Promote/T180.ghc86.template +0/−54
- tests/compile-and-dump/Promote/T180.ghc88.template +54/−0
- tests/compile-and-dump/Promote/T361.ghc86.template +0/−21
- tests/compile-and-dump/Promote/T361.ghc88.template +21/−0
- tests/compile-and-dump/Singletons/AsPattern.ghc86.template +0/−405
- tests/compile-and-dump/Singletons/AsPattern.ghc88.template +395/−0
- tests/compile-and-dump/Singletons/BadBoundedDeriving.ghc86.template +0/−6
- tests/compile-and-dump/Singletons/BadBoundedDeriving.ghc88.template +6/−0
- tests/compile-and-dump/Singletons/BadEnumDeriving.ghc86.template +0/−6
- tests/compile-and-dump/Singletons/BadEnumDeriving.ghc88.template +6/−0
- tests/compile-and-dump/Singletons/BoundedDeriving.ghc86.template +0/−249
- tests/compile-and-dump/Singletons/BoundedDeriving.ghc88.template +242/−0
- tests/compile-and-dump/Singletons/BoxUnBox.ghc86.template +0/−54
- tests/compile-and-dump/Singletons/BoxUnBox.ghc88.template +52/−0
- tests/compile-and-dump/Singletons/CaseExpressions.ghc86.template +0/−319
- tests/compile-and-dump/Singletons/CaseExpressions.ghc88.template +324/−0
- tests/compile-and-dump/Singletons/Classes.ghc86.template +0/−577
- tests/compile-and-dump/Singletons/Classes.ghc88.template +575/−0
- tests/compile-and-dump/Singletons/Classes2.ghc86.template +0/−91
- tests/compile-and-dump/Singletons/Classes2.ghc88.template +89/−0
- tests/compile-and-dump/Singletons/Contains.ghc86.template +0/−50
- tests/compile-and-dump/Singletons/Contains.ghc88.template +50/−0
- tests/compile-and-dump/Singletons/DataValues.ghc86.template +0/−186
- tests/compile-and-dump/Singletons/DataValues.ghc88.template +193/−0
- tests/compile-and-dump/Singletons/Empty.ghc86.template +0/−10
- tests/compile-and-dump/Singletons/Empty.ghc88.template +10/−0
- tests/compile-and-dump/Singletons/EmptyShowDeriving.ghc86.template +0/−68
- tests/compile-and-dump/Singletons/EmptyShowDeriving.ghc88.template +70/−0
- tests/compile-and-dump/Singletons/EnumDeriving.ghc86.template +0/−199
- tests/compile-and-dump/Singletons/EnumDeriving.ghc88.template +204/−0
- tests/compile-and-dump/Singletons/EqInstances.ghc86.template +0/−21
- tests/compile-and-dump/Singletons/EqInstances.ghc88.template +21/−0
- tests/compile-and-dump/Singletons/Error.ghc86.template +0/−30
- tests/compile-and-dump/Singletons/Error.ghc88.template +30/−0
- tests/compile-and-dump/Singletons/Fixity.ghc86.template +0/−86
- tests/compile-and-dump/Singletons/Fixity.ghc88.template +86/−0
- tests/compile-and-dump/Singletons/FunDeps.ghc86.template +0/−96
- tests/compile-and-dump/Singletons/FunDeps.ghc88.template +96/−0
- tests/compile-and-dump/Singletons/FunctorLikeDeriving.ghc86.template +0/−1646
- tests/compile-and-dump/Singletons/FunctorLikeDeriving.ghc88.template +1632/−0
- tests/compile-and-dump/Singletons/HigherOrder.ghc86.template +0/−480
- tests/compile-and-dump/Singletons/HigherOrder.ghc88.template +477/−0
- tests/compile-and-dump/Singletons/LambdaCase.ghc86.template +0/−252
- tests/compile-and-dump/Singletons/LambdaCase.ghc88.template +255/−0
- tests/compile-and-dump/Singletons/Lambdas.ghc86.template +0/−830
- tests/compile-and-dump/Singletons/Lambdas.ghc88.template +832/−0
- tests/compile-and-dump/Singletons/LambdasComprehensive.ghc86.template +0/−71
- tests/compile-and-dump/Singletons/LambdasComprehensive.ghc88.template +71/−0
- tests/compile-and-dump/Singletons/LetStatements.ghc86.template +0/−1002
- tests/compile-and-dump/Singletons/LetStatements.ghc88.template +1004/−0
- tests/compile-and-dump/Singletons/Maybe.ghc86.template +0/−140
- tests/compile-and-dump/Singletons/Maybe.ghc88.template +157/−0
- tests/compile-and-dump/Singletons/Nat.ghc86.template +0/−266
- tests/compile-and-dump/Singletons/Nat.ghc88.template +283/−0
- tests/compile-and-dump/Singletons/NatSymbolReflexive.ghc86.template +0/−0
- tests/compile-and-dump/Singletons/NatSymbolReflexive.ghc88.template +0/−0
- tests/compile-and-dump/Singletons/Operators.ghc86.template +0/−128
- tests/compile-and-dump/Singletons/Operators.ghc88.template +123/−0
- tests/compile-and-dump/Singletons/OrdDeriving.ghc86.template +0/−1235
- tests/compile-and-dump/Singletons/OrdDeriving.ghc88.template +1163/−0
- tests/compile-and-dump/Singletons/OverloadedStrings.ghc86.template +0/−35
- tests/compile-and-dump/Singletons/OverloadedStrings.ghc88.template +35/−0
- tests/compile-and-dump/Singletons/PatternMatching.ghc86.template +0/−574
- tests/compile-and-dump/Singletons/PatternMatching.ghc88.template +587/−0
- tests/compile-and-dump/Singletons/PolyKinds.ghc86.template +0/−28
- tests/compile-and-dump/Singletons/PolyKinds.ghc88.template +28/−0
- tests/compile-and-dump/Singletons/PolyKindsApp.ghc86.template +0/−12
- tests/compile-and-dump/Singletons/PolyKindsApp.ghc88.template +12/−0
- tests/compile-and-dump/Singletons/Records.ghc86.template +0/−79
- tests/compile-and-dump/Singletons/Records.ghc88.template +73/−0
- tests/compile-and-dump/Singletons/ReturnFunc.ghc86.template +0/−98
- tests/compile-and-dump/Singletons/ReturnFunc.ghc88.template +98/−0
- tests/compile-and-dump/Singletons/Sections.ghc86.template +0/−122
- tests/compile-and-dump/Singletons/Sections.ghc88.template +122/−0
- tests/compile-and-dump/Singletons/ShowDeriving.ghc86.template +0/−582
- tests/compile-and-dump/Singletons/ShowDeriving.ghc88.template +618/−0
- tests/compile-and-dump/Singletons/StandaloneDeriving.ghc86.template +0/−447
- tests/compile-and-dump/Singletons/StandaloneDeriving.ghc88.template +475/−0
- tests/compile-and-dump/Singletons/Star.ghc86.template +0/−422
- tests/compile-and-dump/Singletons/Star.ghc88.template +421/−0
- tests/compile-and-dump/Singletons/T124.ghc86.template +0/−33
- tests/compile-and-dump/Singletons/T124.ghc88.template +33/−0
- tests/compile-and-dump/Singletons/T136.ghc86.template +0/−171
- tests/compile-and-dump/Singletons/T136.ghc88.template +174/−0
- tests/compile-and-dump/Singletons/T136b.ghc86.template +0/−53
- tests/compile-and-dump/Singletons/T136b.ghc88.template +53/−0
- tests/compile-and-dump/Singletons/T145.ghc86.template +0/−39
- tests/compile-and-dump/Singletons/T145.ghc88.template +39/−0
- tests/compile-and-dump/Singletons/T153.ghc86.template +0/−0
- tests/compile-and-dump/Singletons/T153.ghc88.template +0/−0
- tests/compile-and-dump/Singletons/T157.ghc86.template +0/−0
- tests/compile-and-dump/Singletons/T157.ghc88.template +0/−0
- tests/compile-and-dump/Singletons/T159.ghc86.template +0/−245
- tests/compile-and-dump/Singletons/T159.ghc88.template +225/−0
- tests/compile-and-dump/Singletons/T160.ghc86.template +0/−85
- tests/compile-and-dump/Singletons/T160.ghc88.template +69/−0
- tests/compile-and-dump/Singletons/T163.ghc86.template +0/−51
- tests/compile-and-dump/Singletons/T163.ghc88.template +47/−0
- tests/compile-and-dump/Singletons/T166.ghc86.template +0/−139
- tests/compile-and-dump/Singletons/T166.ghc88.template +139/−0
- tests/compile-and-dump/Singletons/T167.ghc86.template +0/−178
- tests/compile-and-dump/Singletons/T167.ghc88.template +178/−0
- tests/compile-and-dump/Singletons/T172.ghc86.template +0/−40
- tests/compile-and-dump/Singletons/T172.ghc88.template +40/−0
- tests/compile-and-dump/Singletons/T175.ghc86.template +0/−45
- tests/compile-and-dump/Singletons/T175.ghc88.template +45/−0
- tests/compile-and-dump/Singletons/T176.ghc86.template +0/−166
- tests/compile-and-dump/Singletons/T176.ghc88.template +167/−0
- tests/compile-and-dump/Singletons/T178.ghc86.template +0/−210
- tests/compile-and-dump/Singletons/T178.ghc88.template +221/−0
- tests/compile-and-dump/Singletons/T183.ghc86.template +0/−512
- tests/compile-and-dump/Singletons/T183.ghc88.template +516/−0
- tests/compile-and-dump/Singletons/T184.ghc86.template +0/−499
- tests/compile-and-dump/Singletons/T184.ghc88.template +500/−0
- tests/compile-and-dump/Singletons/T187.ghc86.template +0/−57
- tests/compile-and-dump/Singletons/T187.ghc88.template +65/−0
- tests/compile-and-dump/Singletons/T190.ghc86.template +0/−188
- tests/compile-and-dump/Singletons/T190.ghc88.template +198/−0
- tests/compile-and-dump/Singletons/T197.ghc86.template +0/−43
- tests/compile-and-dump/Singletons/T197.ghc88.template +43/−0
- tests/compile-and-dump/Singletons/T197b.ghc86.template +0/−106
- tests/compile-and-dump/Singletons/T197b.ghc88.template +96/−0
- tests/compile-and-dump/Singletons/T200.ghc86.template +0/−204
- tests/compile-and-dump/Singletons/T200.ghc88.template +189/−0
- tests/compile-and-dump/Singletons/T206.ghc86.template +0/−0
- tests/compile-and-dump/Singletons/T206.ghc88.template +0/−0
- tests/compile-and-dump/Singletons/T209.ghc86.template +0/−82
- tests/compile-and-dump/Singletons/T209.ghc88.template +82/−0
- tests/compile-and-dump/Singletons/T216.ghc86.template +0/−56
- tests/compile-and-dump/Singletons/T216.ghc88.template +56/−0
- tests/compile-and-dump/Singletons/T226.ghc86.template +0/−6
- tests/compile-and-dump/Singletons/T226.ghc88.template +6/−0
- tests/compile-and-dump/Singletons/T229.ghc86.template +0/−24
- tests/compile-and-dump/Singletons/T229.ghc88.template +24/−0
- tests/compile-and-dump/Singletons/T249.ghc86.template +0/−90
- tests/compile-and-dump/Singletons/T249.ghc88.template +84/−0
- tests/compile-and-dump/Singletons/T271.ghc86.template +0/−199
- tests/compile-and-dump/Singletons/T271.ghc88.template +215/−0
- tests/compile-and-dump/Singletons/T287.ghc86.template +0/−116
- tests/compile-and-dump/Singletons/T287.ghc88.template +116/−0
- tests/compile-and-dump/Singletons/T29.ghc86.template +0/−115
- tests/compile-and-dump/Singletons/T29.ghc88.template +115/−0
- tests/compile-and-dump/Singletons/T297.ghc86.template +0/−59
- tests/compile-and-dump/Singletons/T297.ghc88.template +59/−0
- tests/compile-and-dump/Singletons/T312.ghc86.template +0/−215
- tests/compile-and-dump/Singletons/T312.ghc88.template +215/−0
- tests/compile-and-dump/Singletons/T313.ghc86.template +0/−130
- tests/compile-and-dump/Singletons/T313.ghc88.template +130/−0
- tests/compile-and-dump/Singletons/T316.ghc86.template +0/−40
- tests/compile-and-dump/Singletons/T316.ghc88.template +40/−0
- tests/compile-and-dump/Singletons/T322.ghc86.template +0/−49
- tests/compile-and-dump/Singletons/T322.ghc88.template +48/−0
- tests/compile-and-dump/Singletons/T322.hs +1/−1
- tests/compile-and-dump/Singletons/T323.ghc86.template +0/−0
- tests/compile-and-dump/Singletons/T323.ghc88.template +0/−0
- tests/compile-and-dump/Singletons/T33.ghc86.template +0/−36
- tests/compile-and-dump/Singletons/T33.ghc88.template +36/−0
- tests/compile-and-dump/Singletons/T332.ghc86.template +0/−57
- tests/compile-and-dump/Singletons/T332.ghc88.template +56/−0
- tests/compile-and-dump/Singletons/T342.ghc86.template +0/−17
- tests/compile-and-dump/Singletons/T342.ghc88.template +17/−0
- tests/compile-and-dump/Singletons/T353.ghc86.template +0/−104
- tests/compile-and-dump/Singletons/T353.ghc88.template +104/−0
- tests/compile-and-dump/Singletons/T358.ghc86.template +0/−118
- tests/compile-and-dump/Singletons/T358.ghc88.template +116/−0
- tests/compile-and-dump/Singletons/T367.ghc88.template +39/−0
- tests/compile-and-dump/Singletons/T367.hs +12/−0
- tests/compile-and-dump/Singletons/T371.ghc86.template +0/−233
- tests/compile-and-dump/Singletons/T371.ghc88.template +247/−0
- tests/compile-and-dump/Singletons/T376.ghc88.template +40/−0
- tests/compile-and-dump/Singletons/T376.hs +8/−0
- tests/compile-and-dump/Singletons/T402.ghc88.template +15/−0
- tests/compile-and-dump/Singletons/T402.hs +7/−0
- tests/compile-and-dump/Singletons/T54.ghc86.template +0/−53
- tests/compile-and-dump/Singletons/T54.ghc88.template +55/−0
- tests/compile-and-dump/Singletons/T78.ghc86.template +0/−32
- tests/compile-and-dump/Singletons/T78.ghc88.template +32/−0
- tests/compile-and-dump/Singletons/TopLevelPatterns.ghc86.template +0/−347
- tests/compile-and-dump/Singletons/TopLevelPatterns.ghc88.template +350/−0
- tests/compile-and-dump/Singletons/TopLevelPatterns.hs +1/−1
- tests/compile-and-dump/Singletons/TypeRepTYPE.ghc86.template +0/−0
- tests/compile-and-dump/Singletons/TypeRepTYPE.ghc88.template +0/−0
- tests/compile-and-dump/Singletons/TypeRepTYPE.hs +1/−1
- tests/compile-and-dump/Singletons/Undef.ghc86.template +0/−47
- tests/compile-and-dump/Singletons/Undef.ghc88.template +47/−0
CHANGES.md view
@@ -1,6 +1,163 @@ Changelog for singletons project ================================ +2.6+---+* Require GHC 8.8.+* `Sing` has switched from a data family to a type family. This has a number of+ consequences:+ * Names like `SBool`, `SMaybe`, etc. are no longer type synonyms for+ particular instantiations of `Sing` but are instead the names of the+ singleton data types themselves. In other words, previous versions of+ `singletons` would provide this:++ ```haskell+ data instance Sing :: Bool -> Type where+ SFalse :: Sing False+ STrue :: Sing True+ type SBool = (Sing :: Bool -> Type)+ ```++ Whereas with `Sing`-as-a-type-family, `singletons` now provides this:++ ```haskell+ data SBool :: Bool -> Type where+ SFalse :: SBool False+ STrue :: SBool True+ type instance Sing @Bool = SBool+ ```+ * The `Sing` instance for `TYPE rep` in `Data.Singletons.TypeRepTYPE` is now+ directly defined as `type instance Sing @(TYPE rep) = TypeRep`, without the+ use of an intermediate newtype as before.+ * Due to limitations in the ways that quantified constraints and type+ families can interact+ (see [this GHC issue](https://gitlab.haskell.org/ghc/ghc/issues/14860)),+ the internals of `ShowSing` has to be tweaked in order to continue to+ work with `Sing`-as-a-type-family. One notable consequence of this is+ that `Show` instances for singleton types can no longer be derived—they+ must be written by hand in order to work around+ [this GHC bug](https://gitlab.haskell.org/ghc/ghc/issues/16365).+ This is unlikely to affect you unless you define 'Show' instances for+ singleton types by hand. For more information, refer to the Haddocks for+ `ShowSing'` in `Data.Singletons.ShowSing`.+ * GHC does not permit type class instances to mention type families, which+ means that it is no longer possible to define instances that mention the+ `Sing` type constructor. For this reason, a `WrappedSing` data type (which+ is a newtype around `Sing`) was introduced so that one can hang instances+ off of it.++ This had one noticeable effect in `singletons`+ itself: there are no longer `TestEquality Sing` or `TestCoercion Sing`+ instances. Instead, `singletons` now generates a separate+ `TestEquality`/`TestCoercion` instance for every data type that singles a+ derived `Eq` instance. In addition, the `Data.Singletons.Decide` module+ now provides top-level `decideEquality`/`decideCoercion` functions which+ provide the behavior of `testEquality`/`testCoercion`, but monomorphized+ to `Sing`. Finally, `TestEquality`/`TestCoercion` instances are provided+ for `WrappedSing`.+* GHC's behavior surrounding kind inference for local definitions has changed+ in 8.8, and certain code that `singletons` generates for local definitions+ may no longer typecheck as a result. While we have taken measures to mitigate+ the issue on `singletons`' end, there still exists code that must be patched+ on the users' end in order to continue compiling. For instance, here is an+ example of code that stopped compiling with the switch to GHC 8.8:++ ```haskell+ replicateM_ :: (Applicative m) => Nat -> m a -> m ()+ replicateM_ cnt0 f =+ loop cnt0+ where+ loop cnt+ | cnt <= 0 = pure ()+ | otherwise = f *> loop (cnt - 1)+ ```++ This produces errors to the effect of:++ ```+ • Could not deduce (SNum k1) arising from a use of ‘sFromInteger’+ from the context: SApplicative m+ ...++ • Could not deduce (SOrd k1) arising from a use of ‘%<=’+ from the context: SApplicative m+ ...+ ```++ The issue is that GHC 8.8 now kind-generalizes `sLoop` (whereas it did not+ previously), explaining why the error message mentions a mysterious kind+ variable `k1` that only appeared after kind generalization. The solution is+ to give `loop` an explicit type signature like so:++ ```diff+ -replicateM_ :: (Applicative m) => Nat -> m a -> m ()+ +replicateM_ :: forall m a. (Applicative m) => Nat -> m a -> m ()+ replicateM_ cnt0 f =+ loop cnt0+ where+ + loop :: Nat -> m ()+ loop cnt+ | cnt <= 0 = pure ()+ | otherwise = f *> loop (cnt - 1)+ ```++ This general approach should be sufficient to fix any type inference+ regressions that were introduced between GHC 8.6 and 8.8. If this isn't the+ case, please file an issue.+* Due to [GHC Trac #16133](https://ghc.haskell.org/trac/ghc/ticket/16133) being+ fixed, `singletons`-generated code now requires explicitly enabling the+ `TypeApplications` extension. (The generated code was always using+ `TypeApplications` under the hood, but it's only now that GHC is detecting+ it.)+* `Data.Singletons` now defines a family of `SingI` instances for `TyCon1`+ through `TyCon8`:++ ```haskell+ instance (forall a. SingI a => SingI (f a), ...) => SingI (TyCon1 f)+ instance (forall a b. (SingI a, SingI b) => SingI (f a b), ...) => SingI (TyCon2 f)+ ...+ ```++ As a result, `singletons` no longer generates instances for `SingI` instances+ for applications of `TyCon{N}` to particular type constructors, as they have+ been superseded by the instances above.+* Changes to `Data.Singletons.Sigma`:+ * `SSigma`, the singleton type for `Sigma`, is now defined.+ * New functions `fstSigma`, `sndSigma`, `FstSigma`, `SndSigma`, `currySigma`,+ and `uncurrySigma` have been added. A `Show` instance for `Sigma` has also+ been added.+ * `projSigma1` has been redefined to use continuation-passing style to more+ closely resemble its cousin `projSigma2`. The new type signature of+ `projSigma1` is:++ ```hs+ projSigma1 :: (forall (fst :: s). Sing fst -> r) -> Sigma s t -> r+ ```++ The old type signature of `projSigma1` can be found in the `fstSigma`+ function.+ * `Σ` has been redefined such that it is now a partial application of+ `Sigma`, like so:++ ```haskell+ type Σ = Sigma+ ```++ One benefit of this change is that one no longer needs defunctionalization+ symbols in order to partially apply `Σ`. As a result, `ΣSym0`, `ΣSym1`,+ and `ΣSym2` have been removed.+* In line with corresponding changes in `base-4.13`, the `Fail`/`sFail` methods+ of `{P,S}Monad` have been removed in favor of new `{P,S}MonadFail` classes+ introduced in the `Data.Singletons.Prelude.Monad.Fail` module. These classes+ are also re-exported from `Data.Singletons.Prelude`.+* Fix a bug where expressions with explicit signatures involving function types+ would fail to single.+* The infix names `(.)` and `(!)` are no longer mapped to `(:.)` and `(:!)`,+ as GHC 8.8 learned to parse them at the type level.+* The `Enum` instance for `SomeSing` now uses more efficient implementations of+ `enumFromTo` and `enumFromThenTo` that no longer require a `SingKind`+ constraint.+ 2.5.1 ----- * `ShowSing` is now a type class (with a single instance) instead of a type
README.md view
@@ -1,5 +1,5 @@-singletons 2.5.1-================+singletons 2.6+============== [](http://hackage.haskell.org/package/singletons) [](https://travis-ci.org/goldfirere/singletons)@@ -40,7 +40,7 @@ Compatibility ------------- -The singletons library requires GHC 8.6.1 or greater. Any code that uses the+The singletons library requires GHC 8.8.1 or greater. Any code that uses the singleton generation primitives needs to enable a long list of GHC extensions. This list includes, but is not necessarily limited to, the following:@@ -58,8 +58,8 @@ * `PolyKinds` * `RankNTypes` * `ScopedTypeVariables`-* `StandaloneDeriving` * `TemplateHaskell`+* `TypeApplications` * `TypeFamilies` * `TypeOperators` * `UndecidableInstances`@@ -151,10 +151,10 @@ definitions. Many of the definitions were developed in tandem with Iavor Diatchki. ```haskell-data family Sing (a :: k)+type family Sing :: k -> Type ``` -The data family of singleton types. A new instance of this data family is+The type family of singleton types. A new instance of this type family is generated for every new singleton type. ```haskell@@ -221,9 +221,10 @@ while propositional equality has the advantage that GHC can use the equality of types during type inference. -Instances of both `SEq` and `SDecide` are generated when `singletons` is called-on a datatype that has `deriving Eq`. You can also generate these instances-directly through functions exported from `Data.Singletons.TH`.+Instances of `SEq`, `SDecide`, `TestEquality`, and `TestCoercion` are generated+when `singletons` is called on a datatype that has `deriving Eq`. You can also+generate these instances directly through functions exported from+`Data.Singletons.TH`. `Show` classes@@ -534,27 +535,7 @@ All tuples (including the 0-tuple, unit) are treated similarly. -6. original value: `(.)`-- promoted type\*: `(:.)`-- singleton value: `(%.)`-- symbols: `(.@#@$)`, `(.@#@$$)`, `(.@#@$$$)`-- The promoted type is special because GHC can't parse a type named `(.)`.--7. original value: `(!)`-- promoted type\*: `(:!)`-- singleton value: `(%!)`-- symbols: `(!@#@$)`, `(!@#@$$)`, `(!@#@$$$)`-- The promoted type is special because GHC can't parse a type named `(!)`.--8. original value: `___foo`+6. original value: `___foo` promoted type\*: `US___foo` ("`US`" stands for "underscore") @@ -711,8 +692,8 @@ The built-in Haskell promotion mechanism does not yet have a full story around the kind `*` (the kind of types that have values). Ideally, promoting some form-of `TypeRep` would yield `*`, but the implementation of TypeRep would have to be-updated for this to really work out. In the meantime, users who wish to+of `TypeRep` would yield `*`, but the implementation of `TypeRep` would have to+be updated for this to really work out. In the meantime, users who wish to experiment with this feature have two options: 1) The module `Data.Singletons.TypeRepTYPE` has all the definitions possible for@@ -720,14 +701,12 @@ The singleton associated with `TypeRep` has one constructor: ```haskell- newtype instance Sing :: forall (rep :: RuntimeRep). TYPE rep -> Type where- STypeRep :: forall (rep :: RuntimeRep) (a :: TYPE rep). TypeRep a -> Sing a+ type instance Sing @(TYPE rep) = TypeRep ``` - (Recall that `type * = TYPE LiftedRep`.) Thus, a `TypeRep` is stored in the-singleton constructor. However, any datatypes that store `TypeRep`s will not-generally work as expected; the built-in promotion mechanism will not promote-`TypeRep` to `*`.+ (Recall that `type * = TYPE LiftedRep`.) Note that any datatypes that store+`TypeRep`s will not generally work as expected; the built-in promotion+mechanism will not promote `TypeRep` to `*`. 2) The module `Data.Singletons.CustomStar` allows the programmer to define a subset of types with which to work. See the Haddock documentation for the function
Setup.hs view
@@ -47,7 +47,7 @@ | otherwise = distPref -- Package DBs dbStack = withPackageDB lbi ++ [ SpecificPackageDB $ distPref' </> "package.conf.inplace" ]- dbFlags = "-hide-all-packages" : packageDbArgsDb dbStack+ dbFlags = "-hide-all-packages" : "-package-env=-" : packageDbArgsDb dbStack ghc = case lookupProgram ghcProgram (withPrograms lbi) of Just fp -> locationPath $ programLocation fp
singletons.cabal view
@@ -1,5 +1,5 @@ name: singletons-version: 2.5.1+version: 2.6 -- Remember to bump version in the Makefile as well cabal-version: >= 1.10 synopsis: A framework for generating singleton types@@ -9,17 +9,17 @@ maintainer: Ryan Scott <ryan.gl.scott@gmail.com> bug-reports: https://github.com/goldfirere/singletons/issues stability: experimental-tested-with: GHC == 8.6.2+tested-with: GHC == 8.8.1 extra-source-files: README.md, CHANGES.md, tests/compile-and-dump/buildGoldenFiles.awk, tests/compile-and-dump/GradingClient/*.hs, tests/compile-and-dump/InsertionSort/*.hs, tests/compile-and-dump/Promote/*.hs, tests/compile-and-dump/Singletons/*.hs- tests/compile-and-dump/GradingClient/*.ghc86.template,- tests/compile-and-dump/InsertionSort/*.ghc86.template,- tests/compile-and-dump/Promote/*.ghc86.template,- tests/compile-and-dump/Singletons/*.ghc86.template+ tests/compile-and-dump/GradingClient/*.ghc88.template,+ tests/compile-and-dump/InsertionSort/*.ghc88.template,+ tests/compile-and-dump/Promote/*.ghc88.template,+ tests/compile-and-dump/Singletons/*.ghc88.template license: BSD3 license-file: LICENSE build-type: Custom@@ -38,7 +38,7 @@ source-repository this type: git location: https://github.com/goldfirere/singletons.git- tag: v2.5.1+ tag: v2.6 source-repository head type: git@@ -47,19 +47,19 @@ custom-setup setup-depends:- base >= 4.12 && < 4.13,- Cabal >= 2.3 && < 2.5,+ base >= 4.13 && < 4.14,+ Cabal >= 2.5 && < 3.1, directory >= 1, filepath >= 1.3 library hs-source-dirs: src- build-depends: base >= 4.12 && < 4.13,+ build-depends: base >= 4.13 && < 4.14, mtl >= 2.2.1, ghc-boot-th, template-haskell, containers >= 0.5,- th-desugar >= 1.9 && < 1.10,+ th-desugar >= 1.10 && < 1.11, pretty, syb >= 0.4, text >= 1.2,@@ -91,6 +91,7 @@ Data.Singletons.Prelude.List.NonEmpty Data.Singletons.Prelude.Maybe Data.Singletons.Prelude.Monad+ Data.Singletons.Prelude.Monad.Fail Data.Singletons.Prelude.Monad.Zip Data.Singletons.Prelude.Monoid Data.Singletons.Prelude.Num@@ -139,21 +140,23 @@ Data.Singletons.TypeLits.Internal Data.Singletons.Syntax - ghc-options: -Wall -Wno-redundant-constraints+ ghc-options: -Wall -Wcompat -Wno-redundant-constraints test-suite singletons-test-suite type: exitcode-stdio-1.0 hs-source-dirs: tests- ghc-options: -Wall+ ghc-options: -Wall -Wcompat -threaded -with-rtsopts=-maxN16 default-language: Haskell2010 main-is: SingletonsTestSuite.hs other-modules: ByHand ByHand2 SingletonsTestSuiteUtils - build-depends: base >= 4.12 && < 4.13,+ build-depends: base >= 4.13 && < 4.14, filepath >= 1.3, process >= 1.1,+ turtle >= 1.5,+ text >= 1.2, singletons,- tasty >= 0.6,+ tasty >= 1.2, tasty-golden >= 2.2
src/Data/Singletons.hs view
@@ -1,12 +1,16 @@ {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE ExplicitNamespaces #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE PolyKinds #-}+{-# LANGUAGE QuantifiedConstraints #-}+{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -35,7 +39,7 @@ module Data.Singletons ( -- * Main singleton definitions - Sing(SLambda, applySing), (@@),+ Sing, SLambda(..), (@@), SingI(..), SingKind(..), @@ -49,6 +53,10 @@ singByProxy#, withSing, singThat, + -- ** @WrappedSing@+ WrappedSing(..), SWrappedSing(..), UnwrapSing,+ -- $SingletonsOfSingletons+ -- ** Defunctionalization TyFun, type (~>), TyCon1, TyCon2, TyCon3, TyCon4, TyCon5, TyCon6, TyCon7, TyCon8,@@ -85,6 +93,7 @@ import Data.Singletons.Internal import Data.Singletons.Prelude.Enum import Data.Singletons.Prelude.Eq+import Data.Singletons.Prelude.Instances import Data.Singletons.Prelude.IsString import Data.Singletons.Prelude.Monoid import Data.Singletons.Prelude.Num@@ -92,10 +101,24 @@ import Data.Singletons.Prelude.Semigroup import Data.Singletons.Promote import Data.Singletons.ShowSing+import Data.Singletons.Single (singITyConInstances) import Data.String import qualified Data.Text as T (pack) ----------------------------------------------------------------------+---- SingI TyCon{N} instances ----------------------------------------+----------------------------------------------------------------------++{-+Generates SingI instances for TyCon1 through TyCon8:++ instance (forall a. SingI a => SingI (f a), ...) => SingI (TyCon1 f)+ instance (forall a b. (SingI a, SingI b) => SingI (f a b), ...) => SingI (TyCon2 f)+ ...+-}+$(singITyConInstances [1..8])++---------------------------------------------------------------------- ---- SomeSing instances ---------------------------------------------- ---------------------------------------------------------------------- @@ -114,16 +137,22 @@ minBound = SomeSing sMinBound maxBound = SomeSing sMaxBound -instance (SEnum k, SingKind k) => Enum (SomeSing k) where+instance SEnum k => Enum (SomeSing k) where succ (SomeSing a) = SomeSing (sSucc a) pred (SomeSing a) = SomeSing (sPred a) toEnum n = withSomeSing (fromIntegral n) (SomeSing . sToEnum) fromEnum (SomeSing a) = fromIntegral (fromSing (sFromEnum a)) enumFromTo (SomeSing from) (SomeSing to) =- map toSing (fromSing (sEnumFromTo from to))+ listFromSingShallow (sEnumFromTo from to) enumFromThenTo (SomeSing from) (SomeSing then_) (SomeSing to) =- map toSing (fromSing (sEnumFromThenTo from then_ to))+ listFromSingShallow (sEnumFromThenTo from then_ to) +-- Like the 'fromSing' implementation for lists, but bottoms out at+-- 'SomeSing' instead of recursively invoking 'fromSing'.+listFromSingShallow :: SList (x :: [a]) -> [SomeSing a]+listFromSingShallow SNil = []+listFromSingShallow (SCons x xs) = SomeSing x : listFromSingShallow xs+ instance SNum k => Num (SomeSing k) where SomeSing a + SomeSing b = SomeSing (a %+ b) SomeSing a - SomeSing b = SomeSing (a %- b)@@ -133,7 +162,10 @@ signum (SomeSing a) = SomeSing (sSignum a) fromInteger n = withSomeSing (fromIntegral n) (SomeSing . sFromInteger) -deriving instance ShowSing k => Show (SomeSing k)+instance ShowSing k => Show (SomeSing k) where+ showsPrec p (SomeSing (s :: Sing a)) =+ showParen (p > 10) $ showString "SomeSing " . showsPrec 11 s+ :: ShowSing' a => ShowS instance SSemigroup k => Semigroup (SomeSing k) where SomeSing a <> SomeSing b = SomeSing (a %<> b)@@ -149,7 +181,76 @@ ---------------------------------------------------------------------- $(genDefunSymbols [''Demote, ''SameKind, ''KindOf, ''(~>), ''Apply, ''(@@)])--- SingFunction1 et al. are not defunctionalizable at the moment due to #198+-- WrapSing, UnwrapSing, and SingFunction1 et al. are not defunctionalizable+-- at the moment due to Trac #9269++{- $SingletonsOfSingletons++Aside from being a data type to hang instances off of, 'WrappedSing' has+another purpose as a general-purpose mechanism for allowing one to write+code that uses singletons of other singletons. For instance, suppose you+had the following data type:++@+data T :: Type -> Type where+ MkT :: forall a (x :: a). 'Sing' x -> F a -> T a+@++A naïve attempt at defining a singleton for @T@ would look something like+this:++@+data ST :: forall a. T a -> Type where+ SMkT :: forall a (x :: a) (sx :: 'Sing' x) (f :: F a).+ 'Sing' sx -> 'Sing' f -> ST (MkT sx f)+@++But there is a problem here: what exactly /is/ @'Sing' sx@? If @x@ were 'True',+for instance, then @sx@ would be 'STrue', but it's not clear what+@'Sing' 'STrue'@ should be. One could define @SSBool@ to be the singleton of+'SBool's, but in order to be thorough, one would have to generate a singleton+for /every/ singleton type out there. Plus, it's not clear when to stop. Should+we also generate @SSSBool@, @SSSSBool@, etc.?++Instead, 'WrappedSing' and its singleton 'SWrappedSing' provide a way to talk+about singletons of other arbitrary singletons without the need to generate a+bazillion instances. For reference, here is the definition of 'SWrappedSing':++@+newtype 'SWrappedSing' :: forall k (a :: k). 'WrappedSing' a -> Type where+ 'SWrapSing' :: forall k (a :: k) (ws :: 'WrappedSing' a).+ { 'sUnwrapSing' :: 'Sing' a } -> 'SWrappedSing' ws+type instance 'Sing' \@('WrappedSing' a) = 'SWrappedSing'+@++'SWrappedSing' is a bit of an unusual singleton in that its field is a+singleton for @'Sing' \@k@, not @'WrappedSing' \@k@. But that's exactly the+point—a singleton of a singleton contains as much type information as the+underlying singleton itself, so we can get away with just @'Sing' \@k@.++As an example of this in action, here is how you would define the singleton+for the earlier @T@ type:++@+data ST :: forall a. T a -> Type where+ SMkT :: forall a (x :: a) (sx :: 'Sing' x) (f :: F a).+ 'Sing' ('WrapSing' sx) -> 'Sing' f -> ST (MkT sx f)+@++With this technique, we won't need anything like @SSBool@ in order to+instantiate @x@ with 'True'. Instead, the field of type+@'Sing' ('WrapSing' sx)@ will simply be a newtype around 'SBool'. In general,+you'll need /n/ layers of 'WrapSing' if you wish to single a singleton /n/+times.++Note that this is not the only possible way to define a singleton for @T@.+An alternative approach that does not make use of singletons-of-singletons is+discussed at some length+<https://github.com/goldfirere/singletons/issues/366#issuecomment-489469086 here>.+Due to the technical limitations of this approach, however, we do not use it+in @singletons@ at the moment, instead favoring the+slightly-clunkier-but-more-reliable 'WrappedSing' approach.+-} {- $SLambdaPatternSynonyms
src/Data/Singletons/CustomStar.hs view
@@ -60,10 +60,11 @@ -- and its singleton. However, because @Rep@ is promoted to @*@, the singleton -- is perhaps slightly unexpected: ----- > data instance Sing (a :: *) where+-- > data SRep (a :: *) where -- > SNat :: Sing Nat -- > SBool :: Sing Bool -- > SMaybe :: Sing a -> Sing (Maybe a)+-- > type instance Sing = SRep -- -- The unexpected part is that @Nat@, @Bool@, and @Maybe@ above are the real @Nat@, -- @Bool@, and @Maybe@, not just promoted data constructors.@@ -76,7 +77,7 @@ kinds <- mapM getKind names ctors <- zipWithM (mkCtor True) names kinds let repDecl = DDataD Data [] repName [] (Just (DConT typeKindName)) ctors- [DDerivClause Nothing (map DConPr [''Eq, ''Ord, ''Read, ''Show])]+ [DDerivClause Nothing (map DConT [''Eq, ''Ord, ''Read, ''Show])] fakeCtors <- zipWithM (mkCtor False) names kinds let dataDecl = DataDecl repName [] fakeCtors -- Why do we need withLocalDeclarations here? It's because we end up@@ -86,10 +87,10 @@ withLocalDeclarations (decToTH repDecl) $ do -- We opt to infer the constraints for the Eq instance here so that when it's -- promoted, Rep will be promoted to Type.- dataDeclEqCxt <- inferConstraints (DConPr ''Eq) (DConT repName) fakeCtors- let dataDeclEqInst = DerivedDecl (Just dataDeclEqCxt) (DConT repName) dataDecl+ dataDeclEqCxt <- inferConstraints (DConT ''Eq) (DConT repName) fakeCtors+ let dataDeclEqInst = DerivedDecl (Just dataDeclEqCxt) (DConT repName) repName dataDecl ordInst <- mkOrdInstance Nothing (DConT repName) dataDecl- showInst <- mkShowInstance Nothing (DConT repName) dataDecl+ showInst <- mkShowInstance ForPromotion Nothing (DConT repName) dataDecl (pInsts, promDecls) <- promoteM [] $ do promoteDataDec dataDecl promoteDerivedEqDec dataDeclEqInst traverse (promoteInstanceDec mempty)@@ -131,21 +132,24 @@ noBang = Bang NoSourceUnpackedness NoSourceStrictness -- demote a kind back to a type, accumulating any unbound parameters- kindToType :: DsMonad q => [DType] -> DKind -> QWithAux [Name] q DType+ kindToType :: DsMonad q => [DTypeArg] -> DKind -> QWithAux [Name] q DType kindToType _ (DForallT _ _ _) = fail "Explicit forall encountered in kind" kindToType args (DAppT f a) = do a' <- kindToType [] a- kindToType (a' : args) f+ kindToType (DTANormal a' : args) f+ kindToType args (DAppKindT f a) = do+ a' <- kindToType [] a+ kindToType (DTyArg a' : args) f kindToType args (DSigT t k) = do t' <- kindToType [] t k' <- kindToType [] k- return $ DSigT t' k' `foldType` args+ return $ DSigT t' k' `applyDType` args kindToType args (DVarT n) = do addElement n- return $ DVarT n `foldType` args- kindToType args (DConT n) = return $ DConT name `foldType` args+ return $ DVarT n `applyDType` args+ kindToType args (DConT n) = return $ DConT name `applyDType` args where name | isTypeKindName n = repName | otherwise = n- kindToType args DArrowT = return $ DArrowT `foldType` args- kindToType args k@(DLitT {}) = return $ k `foldType` args- kindToType args DWildCardT = return $ DWildCardT `foldType` args+ kindToType args DArrowT = return $ DArrowT `applyDType` args+ kindToType args k@(DLitT {}) = return $ k `applyDType` args+ kindToType args DWildCardT = return $ DWildCardT `applyDType` args
src/Data/Singletons/Decide.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE RankNTypes, PolyKinds, DataKinds, TypeOperators,- TypeFamilies, FlexibleContexts, UndecidableInstances, GADTs #-}+ TypeFamilies, FlexibleContexts, UndecidableInstances,+ GADTs, TypeApplications #-} {-# OPTIONS_GHC -Wno-orphans #-} -----------------------------------------------------------------------------@@ -20,10 +21,10 @@ SDecide(..), -- * Supporting definitions- (:~:)(..), Void, Refuted, Decision(..)+ (:~:)(..), Void, Refuted, Decision(..),+ decideEquality, decideCoercion ) where -import Data.Kind (Type) import Data.Singletons.Internal import Data.Type.Coercion import Data.Type.Equality@@ -51,14 +52,26 @@ (%~) :: forall (a :: k) (b :: k). Sing a -> Sing b -> Decision (a :~: b) infix 4 %~ -instance SDecide k => TestEquality (Sing :: k -> Type) where- testEquality a b =- case a %~ b of- Proved Refl -> Just Refl- Disproved _ -> Nothing+-- | A suitable default implementation for 'testEquality' that leverages+-- 'SDecide'.+decideEquality :: forall k (a :: k) (b :: k). SDecide k+ => Sing a -> Sing b -> Maybe (a :~: b)+decideEquality a b =+ case a %~ b of+ Proved Refl -> Just Refl+ Disproved _ -> Nothing -instance SDecide k => TestCoercion (Sing :: k -> Type) where- testCoercion a b =- case a %~ b of- Proved Refl -> Just Coercion- Disproved _ -> Nothing+instance SDecide k => TestEquality (WrappedSing @k) where+ testEquality (WrapSing s1) (WrapSing s2) = decideEquality s1 s2++-- | A suitable default implementation for 'testCoercion' that leverages+-- 'SDecide'.+decideCoercion :: forall k (a :: k) (b :: k). SDecide k+ => Sing a -> Sing b -> Maybe (Coercion a b)+decideCoercion a b =+ case a %~ b of+ Proved Refl -> Just Coercion+ Disproved _ -> Nothing++instance SDecide k => TestCoercion (WrappedSing @k) where+ testCoercion (WrapSing s1) (WrapSing s2) = decideCoercion s1 s2
src/Data/Singletons/Deriving/Bounded.hs view
@@ -50,7 +50,7 @@ in (minEqnRHS, maxEqnRHS) mk_rhs rhs = UFunction [DClause [] rhs]- constraints <- inferConstraintsDef mb_ctxt (DConPr boundedName) ty cons+ constraints <- inferConstraintsDef mb_ctxt (DConT boundedName) ty cons return $ InstDecl { id_cxt = constraints , id_name = boundedName , id_arg_tys = [ty]
src/Data/Singletons/Deriving/Enum.hs view
@@ -33,15 +33,15 @@ non_vanilla || not (null $ tysOfConFields f)) cons) $ fail ("Can't derive Enum instance for " ++ pprint (typeToTH ty) ++ ".") n <- qNewName "n"- let to_enum = UFunction [DClause [DVarPa n] (to_enum_rhs cons [0..])]+ let to_enum = UFunction [DClause [DVarP n] (to_enum_rhs cons [0..])] to_enum_rhs [] _ = DVarE errorName `DAppE` DLitE (StringL "toEnum: bad argument") to_enum_rhs (DCon _ _ name _ _ : rest) (num:nums) = DCaseE (DVarE equalsName `DAppE` DVarE n `DAppE` DLitE (IntegerL num))- [ DMatch (DConPa trueName []) (DConE name)- , DMatch (DConPa falseName []) (to_enum_rhs rest nums) ]+ [ DMatch (DConP trueName []) (DConE name)+ , DMatch (DConP falseName []) (to_enum_rhs rest nums) ] to_enum_rhs _ _ = error "Internal error: exhausted infinite list in to_enum_rhs" - from_enum = UFunction (zipWith (\i con -> DClause [DConPa (extractName con) []]+ from_enum = UFunction (zipWith (\i con -> DClause [DConP (extractName con) []] (DLitE (IntegerL i))) [0..] cons) return (InstDecl { id_cxt = fromMaybe [] mb_ctxt
src/Data/Singletons/Deriving/Foldable.hs view
@@ -69,17 +69,17 @@ mk_foldMap_clause :: DCon -> q DClause mk_foldMap_clause con = do parts <- foldDataConArgs ft_foldMap con- clause_for_foldMap [DVarPa f] con =<< sequence parts+ clause_for_foldMap [DVarP f] con =<< sequence parts mk_foldr_clause :: DCon -> q DClause mk_foldr_clause con = do parts <- foldDataConArgs ft_foldr con- clause_for_foldr [DVarPa f, DVarPa z] con =<< sequence parts+ clause_for_foldr [DVarP f, DVarP z] con =<< sequence parts mk_foldMap :: q [DClause] mk_foldMap = case cons of- [] -> pure [DClause [DWildPa, DWildPa] (DVarE memptyName)]+ [] -> pure [DClause [DWildP, DWildP] (DVarE memptyName)] _ -> traverse mk_foldMap_clause cons mk_foldr :: q [DClause]@@ -91,7 +91,7 @@ : case cons of [] -> [] _ -> [(foldrName, UFunction foldr_clauses)]- constraints <- inferConstraintsDef mb_ctxt (DConPr foldableName) ty cons+ constraints <- inferConstraintsDef mb_ctxt (DConT foldableName) ty cons return $ InstDecl { id_cxt = constraints , id_name = foldableName , id_arg_tys = [ty]
src/Data/Singletons/Deriving/Functor.hs view
@@ -61,28 +61,28 @@ mk_fmap_clause :: DCon -> q DClause mk_fmap_clause con = do parts <- foldDataConArgs ft_fmap con- clause_for_con [DVarPa f] con =<< sequence parts+ clause_for_con [DVarP f] con =<< sequence parts mk_replace_clause :: DCon -> q DClause mk_replace_clause con = do parts <- foldDataConArgs ft_replace con- clause_for_con [DVarPa z] con =<< traverse (fmap replace) parts+ clause_for_con [DVarP z] con =<< traverse (fmap replace) parts mk_fmap :: q [DClause] mk_fmap = case cons of [] -> do v <- newUniqueName "v"- pure [DClause [DWildPa, DVarPa v] (DCaseE (DVarE v) [])]+ pure [DClause [DWildP, DVarP v] (DCaseE (DVarE v) [])] _ -> traverse mk_fmap_clause cons mk_replace :: q [DClause] mk_replace = case cons of [] -> do v <- newUniqueName "v"- pure [DClause [DWildPa, DVarPa v] (DCaseE (DVarE v) [])]+ pure [DClause [DWildP, DVarP v] (DCaseE (DVarE v) [])] _ -> traverse mk_replace_clause cons fmap_clauses <- mk_fmap replace_clauses <- mk_replace- constraints <- inferConstraintsDef mb_ctxt (DConPr functorName) ty cons+ constraints <- inferConstraintsDef mb_ctxt (DConT functorName) ty cons return $ InstDecl { id_cxt = constraints , id_name = functorName , id_arg_tys = [ty]
src/Data/Singletons/Deriving/Infer.hs view
@@ -20,8 +20,6 @@ import Data.Singletons.Deriving.Util import Data.Singletons.Util import Data.List-import Data.List.NonEmpty (NonEmpty(..))-import Data.Generics.Twins -- @inferConstraints cls inst_ty cons@ infers the instance context for a -- derived type class instance of @cls@ for @inst_ty@, using the constructors@@ -63,7 +61,7 @@ -- For more information on what this means, refer to the documentation for -- infer_ct below. inferConstraints :: forall q. DsMonad q => DPred -> DType -> [DCon] -> q DCxt-inferConstraints pr inst_ty = fmap (nubBy geq) . concatMapM infer_ct+inferConstraints pr inst_ty = fmap nub . concatMapM infer_ct where -- A thorny situation arises when attempting to infer an instance context -- for a GADT. Consider the following example:@@ -128,7 +126,7 @@ Just subst -> traverse (substTy subst) field_tys if is_functor_like then mk_functor_like_constraints field_tys' res_ty'- else pure $ map (pr `DAppPr`) field_tys'+ else pure $ map (pr `DAppT`) field_tys' -- If we derive a Functor-like class, e.g., --@@ -142,15 +140,15 @@ -- This function is partial. But that's OK, because -- functorLikeValidityChecks ensures that this is total by the time -- we invoke this.- let _ :| res_ty_args = unfoldType res_ty- (_, last_res_ty_arg) = snocView res_ty_args+ let (_, res_ty_args) = unfoldDType res_ty+ (_, last_res_ty_arg) = snocView $ filterDTANormals res_ty_args Just last_tv = getDVarTName_maybe last_res_ty_arg deep_subtypes <- concatMapM (deepSubtypesContaining last_tv) fields- pure $ map (pr `DAppPr`) deep_subtypes+ pure $ map (pr `DAppT`) deep_subtypes is_functor_like :: Bool is_functor_like- | DConT pr_class_name :| _ <- unfoldType (predToType pr)+ | (DConT pr_class_name, _) <- unfoldDType pr = isFunctorLikeClassName pr_class_name | otherwise = False
src/Data/Singletons/Deriving/Ord.hs view
@@ -24,7 +24,7 @@ -- | Make a *non-singleton* Ord instance mkOrdInstance :: DsMonad q => DerivDesc q mkOrdInstance mb_ctxt ty (DataDecl _ _ cons) = do- constraints <- inferConstraintsDef mb_ctxt (DConPr ordName) ty cons+ constraints <- inferConstraintsDef mb_ctxt (DConT ordName) ty cons compare_eq_clauses <- mapM mk_equal_clause cons let compare_noneq_clauses = map (uncurry mk_nonequal_clause) [ (con1, con2)@@ -45,8 +45,8 @@ let tys = tysOfConFields fields a_names <- mapM (const $ newUniqueName "a") tys b_names <- mapM (const $ newUniqueName "b") tys- let pat1 = DConPa name (map DVarPa a_names)- pat2 = DConPa name (map DVarPa b_names)+ let pat1 = DConP name (map DVarP a_names)+ pat2 = DConP name (map DVarP b_names) return $ DClause [pat1, pat2] (DVarE foldlName `DAppE` DVarE thenCmpName `DAppE` DConE cmpEQName `DAppE`@@ -63,9 +63,9 @@ EQ -> DConE cmpEQName GT -> DConE cmpGTName) where- pat1 = DConPa name1 (map (const DWildPa) (tysOfConFields fields1))- pat2 = DConPa name2 (map (const DWildPa) (tysOfConFields fields2))+ pat1 = DConP name1 (map (const DWildP) (tysOfConFields fields1))+ pat2 = DConP name2 (map (const DWildP) (tysOfConFields fields2)) -- A variant of mk_equal_clause tailored to empty datatypes mk_empty_clause :: DClause-mk_empty_clause = DClause [DWildPa, DWildPa] (DConE cmpEQName)+mk_empty_clause = DClause [DWildP, DWildP] (DConE cmpEQName)
src/Data/Singletons/Deriving/Show.hs view
@@ -13,6 +13,7 @@ {-# LANGUAGE ScopedTypeVariables #-} module Data.Singletons.Deriving.Show ( mkShowInstance+ , ShowMode(..) , mkShowSingContext ) where @@ -27,60 +28,84 @@ import GHC.Lexeme (startsConSym, startsVarSym) import GHC.Show (appPrec, appPrec1) -mkShowInstance :: DsMonad q => DerivDesc q-mkShowInstance mb_ctxt ty (DataDecl _ _ cons) = do- clauses <- mk_showsPrec cons- constraints <- inferConstraintsDef mb_ctxt (DConPr showName) ty cons+mkShowInstance :: DsMonad q => ShowMode -> DerivDesc q+mkShowInstance mode mb_ctxt ty (DataDecl _ _ cons) = do+ clauses <- mk_showsPrec mode cons+ constraints <- inferConstraintsDef (fmap (mkShowSingContext mode) mb_ctxt)+ (DConT (mk_Show_name mode))+ ty cons+ ty' <- mk_Show_inst_ty mode ty return $ InstDecl { id_cxt = constraints , id_name = showName- , id_arg_tys = [ty]+ , id_arg_tys = [ty'] , id_sigs = mempty , id_meths = [ (showsPrecName, UFunction clauses) ] } -mk_showsPrec :: DsMonad q => [DCon] -> q [DClause]-mk_showsPrec cons = do+mk_showsPrec :: DsMonad q => ShowMode -> [DCon] -> q [DClause]+mk_showsPrec mode cons = do p <- newUniqueName "p" -- The precedence argument (not always used) if null cons then do v <- newUniqueName "v"- pure [DClause [DWildPa, DVarPa v] (DCaseE (DVarE v) [])]- else mapM (mk_showsPrec_clause p) cons+ pure [DClause [DWildP, DVarP v] (DCaseE (DVarE v) [])]+ else mapM (mk_showsPrec_clause mode p) cons mk_showsPrec_clause :: forall q. DsMonad q- => Name -> DCon+ => ShowMode -> Name -> DCon -> q DClause-mk_showsPrec_clause p (DCon _ _ con_name con_fields _) = go con_fields+mk_showsPrec_clause mode p (DCon _ _ con_name con_fields _) = go con_fields where+ con_name' :: Name+ con_name' = case mode of+ ForPromotion -> con_name+ ForShowSing{} -> singDataConName con_name+ go :: DConFields -> q DClause -- No fields: print just the constructor name, with no parentheses go (DNormalC _ []) = return $- DClause [DWildPa, DConPa con_name []] $- DVarE showStringName `DAppE` dStringE (parenInfixConName con_name "")+ DClause [DWildP, DConP con_name' []] $+ DVarE showStringName `DAppE` dStringE (parenInfixConName con_name' "") -- Infix constructors have special Show treatment.- go (DNormalC True [_, _]) = do- argL <- newUniqueName "argL"- argR <- newUniqueName "argR"- fi <- fromMaybe defaultFixity <$> reifyFixityWithLocals con_name- let con_prec = case fi of Fixity prec _ -> prec- op_name = nameBase con_name- infixOpE = DAppE (DVarE showStringName) . dStringE $- if isInfixDataCon op_name- then " " ++ op_name ++ " "- -- Make sure to handle infix data constructors- -- like (Int `Foo` Int)- else " `" ++ op_name ++ "` "- return $ DClause [DVarPa p, DConPa con_name [DVarPa argL, DVarPa argR]] $- (DVarE showParenName `DAppE` (DVarE gtName `DAppE` DVarE p- `DAppE` dIntegerE con_prec))- `DAppE` (DVarE composeName- `DAppE` showsPrecE (con_prec + 1) argL- `DAppE` (DVarE composeName- `DAppE` infixOpE- `DAppE` showsPrecE (con_prec + 1) argR))+ go (DNormalC True tys@[_, _])+ -- Although the (:) constructor is infix, its singled counterpart SCons+ -- is not, which matters if we're deriving a ShowSing instance.+ -- Unless we remove this special case (see #234), we will simply+ -- shunt it along as if we were dealing with a prefix constructor.+ | ForShowSing{} <- mode+ , con_name == consName+ = go (DNormalC False tys) + | otherwise+ = do argL <- newUniqueName "argL"+ argR <- newUniqueName "argR"+ argTyL <- newUniqueName "argTyL"+ argTyR <- newUniqueName "argTyR"+ fi <- fromMaybe defaultFixity <$> reifyFixityWithLocals con_name'+ let con_prec = case fi of Fixity prec _ -> prec+ op_name = nameBase con_name'+ infixOpE = DAppE (DVarE showStringName) . dStringE $+ if isInfixDataCon op_name+ then " " ++ op_name ++ " "+ -- Make sure to handle infix data constructors+ -- like (Int `Foo` Int)+ else " `" ++ op_name ++ "` "+ return $ DClause [ DVarP p+ , DConP con_name' $+ zipWith (mk_Show_arg_pat mode) [argL, argR] [argTyL, argTyR]+ ] $+ mk_Show_rhs_sig mode [argTyL, argTyR] $+ (DVarE showParenName `DAppE` (DVarE gtName `DAppE` DVarE p+ `DAppE` dIntegerE con_prec))+ `DAppE` (DVarE composeName+ `DAppE` showsPrecE (con_prec + 1) argL+ `DAppE` (DVarE composeName+ `DAppE` infixOpE+ `DAppE` showsPrecE (con_prec + 1) argR))+ go (DNormalC _ tys) = do- args <- mapM (const $ newUniqueName "arg") tys+ args <- mapM (const $ newUniqueName "arg") tys+ argTys <- mapM (const $ newUniqueName "argTy") tys let show_args = map (showsPrecE appPrec1) args composed_args = foldr1 (\v q -> DVarE composeName `DAppE` v@@ -89,9 +114,13 @@ `DAppE` q)) show_args named_args = DVarE composeName `DAppE` (DVarE showStringName- `DAppE` dStringE (parenInfixConName con_name " "))+ `DAppE` dStringE (parenInfixConName con_name' " ")) `DAppE` composed_args- return $ DClause [DVarPa p, DConPa con_name $ map DVarPa args] $+ return $ DClause [ DVarP p+ , DConP con_name' $+ zipWith (mk_Show_arg_pat mode) args argTys+ ] $+ mk_Show_rhs_sig mode argTys $ DVarE showParenName `DAppE` (DVarE gtName `DAppE` DVarE p `DAppE` dIntegerE appPrec) `DAppE` named_args@@ -101,10 +130,14 @@ go (DRecC []) = go (DNormalC False []) go (DRecC tys) = do- args <- mapM (const $ newUniqueName "arg") tys+ args <- mapM (const $ newUniqueName "arg") tys+ argTys <- mapM (const $ newUniqueName "argTy") tys let show_args = concatMap (\((arg_name, _, _), arg) ->- let arg_nameBase = nameBase arg_name+ let arg_name' = case mode of+ ForPromotion -> arg_name+ ForShowSing{} -> singValName arg_name+ arg_nameBase = nameBase arg_name' infix_rec = showParen (isSym arg_nameBase) (showString arg_nameBase) "" in [ DVarE showStringName `DAppE` dStringE (infix_rec ++ " = ")@@ -112,16 +145,20 @@ , DVarE showCommaSpaceName ]) (zip tys args)- brace_comma_args = (DVarE showCharName `DAppE` dCharE '{')+ brace_comma_args = (DVarE showCharName `DAppE` dCharE mode '{') : take (length show_args - 1) show_args composed_args = foldr (\x y -> DVarE composeName `DAppE` x `DAppE` y)- (DVarE showCharName `DAppE` dCharE '}')+ (DVarE showCharName `DAppE` dCharE mode '}') brace_comma_args named_args = DVarE composeName `DAppE` (DVarE showStringName- `DAppE` dStringE (parenInfixConName con_name " "))+ `DAppE` dStringE (parenInfixConName con_name' " ")) `DAppE` composed_args- return $ DClause [DVarPa p, DConPa con_name $ map DVarPa args] $+ return $ DClause [ DVarP p+ , DConP con_name' $+ zipWith (mk_Show_arg_pat mode) args argTys+ ] $+ mk_Show_rhs_sig mode argTys $ DVarE showParenName `DAppE` (DVarE gtName `DAppE` DVarE p `DAppE` dIntegerE appPrec) `DAppE` named_args@@ -136,9 +173,14 @@ showsPrecE :: Int -> Name -> DExp showsPrecE prec n = DVarE showsPrecName `DAppE` dIntegerE prec `DAppE` DVarE n -dCharE :: Char -> DExp-dCharE c = DLitE $ StringL [c] -- There aren't type-level characters yet,- -- so fake it with a string+dCharE :: ShowMode -> Char -> DExp+dCharE mode = DLitE . to_lit+ where+ to_lit :: Char -> Lit+ to_lit c = case mode of+ ForPromotion -> StringL [c] -- There aren't type-level characters yet,+ -- so fake it with a string+ ForShowSing{} -> CharL c dStringE :: String -> DExp dStringE = DLitE . StringL@@ -150,13 +192,54 @@ isSym "" = False isSym (c : _) = startsVarSym c || startsConSym c +-----+-- ShowMode+-----++-- | Is a 'Show' instance being generated to be promoted/singled, or is it+-- being generated to create a 'Show' instance for a singleton type?+data ShowMode = ForPromotion -- ^ For promotion/singling+ | ForShowSing Name -- ^ For a 'Show' instance.+ -- Bundles the 'Name' of the data type.+ -- | Turn a context like @('Show' a, 'Show' b)@ into @('ShowSing' a, 'ShowSing' b)@.--- This is necessary for standalone-derived 'Show' instances for singleton types.-mkShowSingContext :: DCxt -> DCxt-mkShowSingContext = map show_to_SingShow+-- This is necessary for 'Show' instances for singleton types.+mkShowSingContext :: ShowMode -> DCxt -> DCxt+mkShowSingContext ForPromotion = id+mkShowSingContext ForShowSing{} = map show_to_SingShow where show_to_SingShow :: DPred -> DPred- show_to_SingShow = modifyConNameDPred $ \n ->+ show_to_SingShow = modifyConNameDType $ \n -> if n == showName then showSingName else n++mk_Show_name :: ShowMode -> Name+mk_Show_name ForPromotion = showName+mk_Show_name ForShowSing{} = showSingName++-- If we're creating a 'Show' instance for a singleon type, decorate the type+-- appropriately (e.g., turn @Maybe a@ into @SMaybe (z :: Maybe a)@).+-- Otherwise, return the type (@Maybe a@) unchanged.+mk_Show_inst_ty :: Quasi q => ShowMode -> DType -> q DType+mk_Show_inst_ty ForPromotion ty = pure ty+mk_Show_inst_ty (ForShowSing ty_tycon) ty = do+ z <- qNewName "z"+ pure $ DConT (singTyConName ty_tycon) `DAppT` (DVarT z `DSigT` ty)++-- If we're creating a 'Show' instance for a singleton type, create a pattern+-- of the form @(sx :: Sing x)@. Otherwise, simply return the pattern @sx@.+mk_Show_arg_pat :: ShowMode -> Name -> Name -> DPat+mk_Show_arg_pat ForPromotion arg _ = DVarP arg+mk_Show_arg_pat ForShowSing{} arg arg_ty =+ DSigP (DVarP arg) (DConT singFamilyName `DAppT` DVarT arg_ty)++-- If we're creating a 'Show' instance for a singleton type, decorate the+-- expression with an explicit signature of the form+-- @e :: (ShowSing' a_1, ..., ShowSing' a_n) => ShowS@. Otherwise, return+-- the expression (@e@) unchanged.+mk_Show_rhs_sig :: ShowMode -> [Name] -> DExp -> DExp+mk_Show_rhs_sig ForPromotion _ e = e+mk_Show_rhs_sig ForShowSing{} arg_ty_names e =+ e `DSigE` DForallT [] (map (DAppT (DConT showSing'Name) . DVarT) arg_ty_names)+ (DConT showSName)
src/Data/Singletons/Deriving/Traversable.hs view
@@ -51,17 +51,17 @@ mk_trav_clause :: DCon -> q DClause mk_trav_clause con = do parts <- foldDataConArgs ft_trav con- clause_for_con [DVarPa f] con =<< sequence parts+ clause_for_con [DVarP f] con =<< sequence parts mk_trav :: q [DClause] mk_trav = case cons of [] -> do v <- newUniqueName "v"- pure [DClause [DWildPa, DVarPa v]+ pure [DClause [DWildP, DVarP v] (DVarE pureName `DAppE` DCaseE (DVarE v) [])] _ -> traverse mk_trav_clause cons trav_clauses <- mk_trav- constraints <- inferConstraintsDef mb_ctxt (DConPr traversableName) ty cons+ constraints <- inferConstraintsDef mb_ctxt (DConT traversableName) ty cons return $ InstDecl { id_cxt = constraints , id_name = traversableName , id_arg_tys = [ty]
src/Data/Singletons/Deriving/Util.hs view
@@ -16,12 +16,11 @@ import Control.Monad import Data.List-import Data.List.NonEmpty (NonEmpty(..))-import qualified Data.Set as Set import Data.Singletons.Names import Data.Singletons.Syntax import Data.Singletons.Util import Language.Haskell.TH.Desugar+import qualified Language.Haskell.TH.Desugar.OSet as OSet import Language.Haskell.TH.Syntax -- A generic type signature for describing how to produce a derived instance.@@ -141,14 +140,20 @@ inspect (DForallT _ _ t) = inspect t inspect (DSigT t _) = inspect t inspect (DAppT t _) = inspect t+ inspect (DAppKindT t _) = inspect t inspect (DVarT {}) = tyApp inspect DArrowT = tyApp inspect (DLitT {}) = tyApp inspect DWildCardT = tyApp - in case unfoldType f of- f_head :| _ -> inspect f_head+ in case unfoldDType f of+ (f_head, _) -> inspect f_head else trivial+ go (DAppKindT t k) = do+ (_, kc) <- go k+ if kc+ then pure (caseWrongArg, True)+ else go t go (DSigT t k) = do (_, kc) <- go k if kc@@ -202,13 +207,13 @@ check_universal con@(DCon con_tvbs con_theta con_name _ res_ty) | allowConstrainedLastTyVar = pure ()- | _ :| res_ty_args <- unfoldType res_ty- , (_, last_res_ty_arg) <- snocView res_ty_args+ | (_, res_ty_args) <- unfoldDType res_ty+ , (_, last_res_ty_arg) <- snocView $ filterDTANormals res_ty_args , Just last_tv <- getDVarTName_maybe last_res_ty_arg = do ex_tvbs <- conExistentialTvbs (foldTypeTvbs (DConT n) data_tvbs) con let univ_tvb_names = map extractTvbName con_tvbs \\ map extractTvbName ex_tvbs if last_tv `elem` univ_tvb_names- && last_tv `Set.notMember` foldMap (fvDType . predToType) con_theta+ && last_tv `OSet.notMember` foldMap fvDType con_theta then pure () else fail $ badCon con_name existential | otherwise@@ -243,7 +248,7 @@ , ft_forall = \tvbs xs -> filter (\x -> all (not_in_ty x) tvbs) xs }) where not_in_ty :: DType -> DTyVarBndr -> Bool- not_in_ty ty tvb = extractTvbName tvb `Set.notMember` fvDType ty+ not_in_ty ty tvb = extractTvbName tvb `OSet.notMember` fvDType ty -- Fold over the arguments of a data constructor in a Functor-like way. foldDataConArgs :: forall q a. DsMonad q => FFoldType a -> DCon -> q [a]@@ -253,8 +258,8 @@ where foldArg :: DType -> q a foldArg- | _ :| res_ty_args <- unfoldType res_ty- , (_, last_res_ty_arg) <- snocView res_ty_args+ | (_, res_ty_args) <- unfoldDType res_ty+ , (_, last_res_ty_arg) <- snocView $ filterDTANormals res_ty_args , Just last_tv <- getDVarTName_maybe last_res_ty_arg = functorLikeTraverse last_tv ft | otherwise@@ -297,7 +302,7 @@ -> q DClause mkSimpleConClause fold extra_pats (DCon _ _ con_name _ _) insides = do vars_needed <- replicateM (length insides) $ newUniqueName "a"- let pat = DConPa con_name (map DVarPa vars_needed)+ let pat = DConP con_name (map DVarP vars_needed) rhs = fold con_name (zipWith (\i v -> i `DAppE` DVarE v) insides vars_needed) pure $ DClause (extra_pats ++ [pat]) rhs
src/Data/Singletons/Internal.hs view
@@ -45,9 +45,62 @@ ---- Sing & friends -------------------------------------------------- ---------------------------------------------------------------------- --- | The singleton kind-indexed data family.-data family Sing :: k -> Type+-- | The singleton kind-indexed type family.+type family Sing :: k -> Type +{-+Note [The kind of Sing]+~~~~~~~~~~~~~~~~~~~~~~~+It is important to define Sing like this:++ type family Sing :: k -> Type++There are other conceivable ways to define Sing, but they all suffer from+various drawbacks:++* type family Sing :: forall k. k -> Type++ Surprisingly, this is /not/ equivalent to `type family Sing :: k -> Type`.+ The difference lies in their arity, i.e., the number of arguments that must+ be supplied in order to apply Sing. The former declaration has arity 0, while+ the latter has arity 1 (this is more obvious if you write the declaration as+ GHCi would display it with -fprint-explicit-kinds enabled:+ `type family Sing @k :: k -> Type`).++ The former declaration having arity 0 is actually what makes it useless. If+ we were to adopt an arity-0 definition of `Sing`, then in order to write+ `type instance Sing = SFoo`, GHC would require that `SFoo` must have the kind+ `forall k. k -> Type`, and moreover, the kind /must/ be polymorphic in `k`.+ This is undesirable, because in practice, every single `Sing` instance in the+ wild must monomorphize `k` (e.g., `SBool` monomorphizes it to `Bool`), so an+ arity-0 `Sing` simply won't work. In contrast, the current arity-1 definition+ of `Sing` /does/ let you monomorphize `k` in type family instances.++* type family Sing (a :: k) = (r :: Type) | r -> a++ Again, this is not equivalent to `type family Sing :: k -> Type`. This+ version of `Sing` has arity 2, since one must supply both `k` and `a` in+ order to apply it. While an arity-2 `Sing` is not suffer from the same+ polymorphism issues as the arity-0 `Sing` in the previous bullet point, it+ does suffer from another issue in that it cannot be partially applied. This+ is because its `a` argument /must/ be supplied, whereas with the arity-1+ `Sing`, it is perfectly admissible to write `Sing` without an explicit `a`+ argument. (Its invisible `k` argument is filled in automatically behind the+ scenes.)++* type family Sing = (r :: k -> Type) | r -> k++ This is the same as `type family Sing :: k -> Type`, but with an injectivity+ annotation. Technically, this definition isn't /wrong/, but the injectivity+ annotation is actually unnecessary. Because the return kind of `Sing` is+ declared to be `k -> Type`, the `Sing` type constructor is automatically+ injective, so `Sing a1 ~ Sing a2` implies `a1 ~~ a2`.++ Another way of phrasing this, using the terminology of Dependent Haskell, is+ that the arrow in `Sing`'s return kind is /matchable/, which implies that+ `Sing` is an injective type constructor as a consequence.+-}+ -- | A 'SingI' constraint is essentially an implicitly-passed singleton. -- If you need to satisfy this constraint with an explicit singleton, please -- see 'withSingI' or the 'Sing' pattern synonym.@@ -144,6 +197,39 @@ where FromSing sng = fromSing sng ----------------------------------------------------------------------+---- WrappedSing -----------------------------------------------------+----------------------------------------------------------------------++-- | A newtype around 'Sing'.+--+-- Since 'Sing' is a type family, it cannot be used directly in type class+-- instances. As one example, one cannot write a catch-all+-- @instance 'SDecide' k => 'TestEquality' ('Sing' k)@. On the other hand,+-- 'WrappedSing' is a perfectly ordinary data type, which means that it is+-- quite possible to define an+-- @instance 'SDecide' k => 'TestEquality' ('WrappedSing' k)@.+newtype WrappedSing :: forall k. k -> Type where+ WrapSing :: forall k (a :: k). { unwrapSing :: Sing a } -> WrappedSing a++-- | The singleton for 'WrappedSing's. Informally, this is the singleton type+-- for other singletons.+newtype SWrappedSing :: forall k (a :: k). WrappedSing a -> Type where+ SWrapSing :: forall k (a :: k) (ws :: WrappedSing a).+ { sUnwrapSing :: Sing a } -> SWrappedSing ws+type instance Sing = SWrappedSing++type family UnwrapSing (ws :: WrappedSing a) :: Sing a where+ UnwrapSing ('WrapSing s) = s++instance SingKind (WrappedSing a) where+ type Demote (WrappedSing a) = WrappedSing a+ fromSing (SWrapSing s) = WrapSing s+ toSing (WrapSing s) = SomeSing $ SWrapSing s++instance forall a (s :: Sing a). SingI a => SingI ('WrapSing s) where+ sing = SWrapSing sing++---------------------------------------------------------------------- ---- SingInstance ---------------------------------------------------- ---------------------------------------------------------------------- @@ -201,11 +287,39 @@ -- here because dealing with inequality like this is hard, and -- I (Richard) wasn't sure what concrete value the ticket would -- have, given that we don't know how to begin fixing it.-type family ApplyTyCon (f :: k1 -> k2) (x :: k1) :: k3 where- ApplyTyCon (f :: k1 -> k2 -> k3) x = TyCon (f x)- ApplyTyCon f x = f x+type family ApplyTyCon :: (k1 -> k2) -> (k1 ~> unmatchable_fun) where+ ApplyTyCon @k1 @(k2 -> k3) @unmatchable_fun = ApplyTyConAux2+ ApplyTyCon @k1 @k2 @k2 = ApplyTyConAux1+-- Upon first glance, the definition of ApplyTyCon (as well as the+-- corresponding Apply instance for TyCon) seems a little indirect. One might+-- wonder why these aren't defined like so:+--+-- type family ApplyTyCon (f :: k1 -> k2) (x :: k1) :: k3 where+-- ApplyTyCon (f :: k1 -> k2 -> k3) x = TyCon (f x)+-- ApplyTyCon f x = f x+--+-- type instance Apply (TyCon f) x = ApplyTyCon f x+--+-- This also works, but it requires that ApplyTyCon always be applied to a+-- minimum of two arguments. In particular, this rules out a trick that we use+-- elsewhere in the library to write SingI instances for different TyCons,+-- which relies on partial applications of ApplyTyCon:+--+-- instance forall k1 k2 (f :: k1 -> k2).+-- ( forall a. SingI a => SingI (f a)+-- , (ApplyTyCon :: (k1 -> k2) -> (k1 ~> k2)) ~ ApplyTyConAux1+-- ) => SingI (TyCon1 f) where+type instance Apply (TyCon f) x = ApplyTyCon f @@ x -type instance Apply (TyCon f) x = ApplyTyCon f x+-- | An \"internal\" defunctionalization symbol used primarily in the+-- definition of 'ApplyTyCon', as well as the 'SingI' instances for 'TyCon1',+-- 'TyCon2', etc.+data ApplyTyConAux1 :: (k1 -> k2) -> (k1 ~> k2)+-- | An \"internal\" defunctionalization symbol used primarily in the+-- definition of 'ApplyTyCon'.+data ApplyTyConAux2 :: (k1 -> k2 -> k3) -> (k1 ~> unmatchable_fun)+type instance Apply (ApplyTyConAux1 f) x = f x+type instance Apply (ApplyTyConAux2 f) x = TyCon (f x) -- | Wrapper for converting the normal type-level arrow into a '~>'. -- For example, given:@@ -237,8 +351,9 @@ ---- Defunctionalized Sing instance and utilities -------------------- ---------------------------------------------------------------------- -newtype instance Sing (f :: k1 ~> k2) =+newtype SLambda (f :: k1 ~> k2) = SLambda { applySing :: forall t. Sing t -> Sing (f @@ t) }+type instance Sing = SLambda -- | An infix synonym for `applySing` (@@) :: forall k1 k2 (f :: k1 ~> k2) (t :: k1). Sing f -> Sing t -> Sing (f @@ t)
src/Data/Singletons/Names.hs view
@@ -18,6 +18,8 @@ import GHC.TypeLits ( Nat, Symbol ) import GHC.Exts ( Constraint ) import GHC.Show ( showCommaSpace, showSpace )+import Data.Type.Equality ( TestEquality(..) )+import Data.Type.Coercion ( TestCoercion(..) ) import Data.Typeable ( TypeRep ) import Data.Singletons.Util import Control.Applicative@@ -26,13 +28,16 @@ boolName, andName, tyEqName, compareName, minBoundName, maxBoundName, repName, nilName, consName, listName, tyFunArrowName,- applyName, natName, symbolName, typeRepName, stringName,+ applyName, applyTyConName, applyTyConAux1Name,+ natName, symbolName, typeRepName, stringName, eqName, ordName, boundedName, orderingName,- singFamilyName, singIName, singMethName, demoteName,+ singFamilyName, singIName, singMethName, demoteName, withSingIName, singKindClassName, sEqClassName, sEqMethName, sconsName, snilName, strueName, sIfName, someSingTypeName, someSingDataName, sListName, sDecideClassName, sDecideMethName,+ testEqualityClassName, testEqualityMethName, decideEqualityName,+ testCoercionClassName, testCoercionMethName, decideCoercionName, provedName, disprovedName, reflName, toSingName, fromSingName, equalityName, applySingName, suppressClassName, suppressMethodName, thenCmpName,@@ -40,8 +45,8 @@ sNegateName, errorName, foldlName, cmpEQName, cmpLTName, cmpGTName, singletonsToEnumName, singletonsFromEnumName, enumName, singletonsEnumName, equalsName, constraintName,- showName, showCharName, showCommaSpaceName, showParenName, showsPrecName,- showSpaceName, showStringName, showSingName,+ showName, showSName, showCharName, showCommaSpaceName, showParenName, showsPrecName,+ showSpaceName, showStringName, showSingName, showSing'Name, composeName, gtName, tyFromStringName, sFromStringName, foldableName, foldMapName, memptyName, mappendName, foldrName, functorName, fmapName, replaceName,@@ -58,6 +63,8 @@ listName = ''[] tyFunArrowName = ''(~>) applyName = ''Apply+applyTyConName = ''ApplyTyCon+applyTyConAux1Name = ''ApplyTyConAux1 symbolName = ''Symbol natName = ''Nat typeRepName = ''TypeRep@@ -72,6 +79,7 @@ toSingName = 'toSing fromSingName = 'fromSing demoteName = ''Demote+withSingIName = 'withSingI singKindClassName = ''SingKind sEqClassName = mk_name_tc "Data.Singletons.Prelude.Eq" "SEq" sEqMethName = mk_name_v "Data.Singletons.Prelude.Eq" "%=="@@ -84,6 +92,12 @@ sListName = mk_name_tc "Data.Singletons.Prelude.Instances" "SList" sDecideClassName = ''SDecide sDecideMethName = '(%~)+testEqualityClassName = ''TestEquality+testEqualityMethName = 'testEquality+decideEqualityName = 'decideEquality+testCoercionClassName = ''TestCoercion+testCoercionMethName = 'testCoercion+decideCoercionName = 'decideCoercion provedName = 'Proved disprovedName = 'Disproved reflName = 'Refl@@ -109,12 +123,14 @@ equalsName = '(==) constraintName = ''Constraint showName = ''Show+showSName = ''ShowS showCharName = 'showChar showParenName = 'showParen showSpaceName = 'showSpace showsPrecName = 'showsPrec showStringName = 'showString showSingName = mk_name_tc "Data.Singletons.ShowSing" "ShowSing"+showSing'Name = mk_name_tc "Data.Singletons.ShowSing" "ShowSing'" composeName = '(.) gtName = '(>) showCommaSpaceName = 'showCommaSpace@@ -161,13 +177,7 @@ -- like promoteValNameLhs, but adds a prefix to the promoted name promoteValNameLhsPrefix :: (String, String) -> Name -> Name-promoteValNameLhsPrefix pres@(alpha, symb) n- | nameBase n == "."- = mkName $ symb ++ ":."- | nameBase n == "!"- = mkName $ symb ++ ":!"- -- See Note [Special cases for (.) and (!)]-+promoteValNameLhsPrefix pres@(alpha, _) n -- We can't promote promote idenitifers beginning with underscores to -- type names, so we work around the issue by prepending "US" at the -- front of the name (#229).@@ -193,15 +203,6 @@ -- names. promoteTySym :: Name -> Int -> Name promoteTySym name sat- | nameBase name == ":."- = default_case (mkName ".")- | nameBase name == ":!"- = default_case (mkName "!")- -- Although (:.) and (:!) are special cases, we need not have a colon in- -- front of their defunctionalization symbols, since only the names- -- (.) and (!) are problematic for the parser.- -- See Note [Special cases for (.) and (!)]- -- We can't promote promote idenitifers beginning with underscores to -- type names, so we work around the issue by prepending "US" at the -- front of the name (#229).@@ -285,7 +286,7 @@ singFamily = DConT singFamilyName singKindConstraint :: DKind -> DPred-singKindConstraint = DAppPr (DConPr singKindClassName)+singKindConstraint = DAppT (DConT singKindClassName) demote :: DType demote = DConT demoteName@@ -302,9 +303,9 @@ foldApply :: DType -> [DType] -> DType foldApply = foldl apply --- make and equality predicate+-- make an equality predicate mkEqPred :: DType -> DType -> DPred-mkEqPred ty1 ty2 = foldPred (DConPr equalityName) [ty1, ty2]+mkEqPred ty1 ty2 = foldType (DConT equalityName) [ty1, ty2] -- | If a 'String' begins with one or more underscores, return -- @'Just' (us, rest)@, where @us@ contain all of the underscores at the@@ -315,16 +316,19 @@ ([], _) -> Nothing res -> Just res --- Walk a DPred, applying a function to all occurrences of constructor names.-modifyConNameDPred :: (Name -> Name) -> DPred -> DPred-modifyConNameDPred mod_con_name = go+-- Walk a DType, applying a function to all occurrences of constructor names.+modifyConNameDType :: (Name -> Name) -> DType -> DType+modifyConNameDType mod_con_name = go where- go (DForallPr tvbs cxt p) = DForallPr tvbs (map go cxt) (go p)- go (DAppPr p t) = DAppPr (go p) t- go (DSigPr p k) = DSigPr (go p) k- go p@(DVarPr _) = p- go (DConPr n) = DConPr (mod_con_name n)- go p@DWildCardPr = p+ go (DForallT tvbs cxt p) = DForallT tvbs (map go cxt) (go p)+ go (DAppT p t) = DAppT (go p) t+ go (DAppKindT p k) = DAppKindT (go p) k+ go (DSigT p k) = DSigT (go p) k+ go p@(DVarT _) = p+ go (DConT n) = DConT (mod_con_name n)+ go p@DWildCardT = p+ go p@(DLitT {}) = p+ go p@DArrowT = p {- Note [Defunctionalization symbol suffixes]@@ -351,12 +355,4 @@ $@#@$$ And there is no conflict.--Note [Special cases for (.) and (!)]-~~~~~~~~~~~~~~~~~~~~~~~~~~~-Almost every infix value name can be promoted trivially. For example, (+) works-both at the value- and type-level. The two exceptions to this rule are (.) and (!),-which we promote to the special type names (:.) and (:!), respectively.-This is necessary since one cannot define or apply (.) or (!) at the type level ---they simply won't parse. Bummer. -}
src/Data/Singletons/Partition.hs view
@@ -30,15 +30,15 @@ import Language.Haskell.TH.Syntax hiding (showName) import Language.Haskell.TH.Ppr import Language.Haskell.TH.Desugar+import qualified Language.Haskell.TH.Desugar.OMap.Strict as OMap+import Language.Haskell.TH.Desugar.OMap.Strict (OMap) import Data.Singletons.Util import Control.Monad import Data.Bifunctor (bimap)-import Data.List.NonEmpty (NonEmpty(..)) import qualified Data.Map as Map import Data.Map (Map) import Data.Maybe-import Data.Semigroup (Semigroup(..)) data PartitionedDecs = PDecs { pd_let_decs :: [DLetDec]@@ -77,7 +77,7 @@ derived_decs <- mapM (\(strat, deriv_pred) -> let etad_tvbs- | DConT pred_name :| _ <- unfoldType deriv_pred+ | (DConT pred_name, _) <- unfoldDType deriv_pred , isFunctorLikeClassName pred_name -- If deriving Functor, Foldable, or Traversable, -- we need to use one less type variable than we normally do.@@ -89,9 +89,9 @@ $ concatMap flatten_clause derivings return $ mconcat $ derived_dec : derived_decs where- flatten_clause :: DDerivClause -> [(Maybe DDerivStrategy, DType)]+ flatten_clause :: DDerivClause -> [(Maybe DDerivStrategy, DPred)] flatten_clause (DDerivClause strat preds) =- map (\p -> (strat, predToType p)) preds+ map (\p -> (strat, p)) preds partitionDec (DClassD cxt name tvbs fds decs) = do (lde, otfs) <- concatMapM partitionClassDec decs@@ -101,7 +101,7 @@ , cd_fds = fds , cd_lde = lde }] , pd_open_type_family_decs = otfs }-partitionDec (DInstanceD _ cxt ty decs) = do+partitionDec (DInstanceD _ _ cxt ty decs) = do (defns, sigs) <- liftM (bimap catMaybes mconcat) $ mapAndUnzipM partitionInstanceDec decs (name, tys) <- split_app_tys [] ty@@ -116,9 +116,9 @@ split_app_tys acc (DSigT t _) = split_app_tys acc t split_app_tys _ _ = fail $ "Illegal instance head: " ++ show ty partitionDec (DRoleAnnotD {}) = return mempty -- ignore these-partitionDec (DTySynD name tvbs _type) =+partitionDec (DTySynD name tvbs rhs) = -- See Note [Partitioning, type synonyms, and type families]- pure $ mempty { pd_ty_syn_decs = [TySynDecl name tvbs] }+ pure $ mempty { pd_ty_syn_decs = [TySynDecl name tvbs rhs] } partitionDec (DClosedTypeFamilyD tf_head _) = -- See Note [Partitioning, type synonyms, and type families] pure $ mempty { pd_closed_type_family_decs = [TypeFamilyDecl tf_head] }@@ -128,13 +128,14 @@ partitionDec (DTySynInstD {}) = pure mempty -- There's no need to track type family instances, since -- we already record the type family itself separately.-partitionDec (DStandaloneDerivD mb_strat ctxt ty) =- case unfoldType ty of- cls_pred_ty :| cls_tys- | not (null cls_tys) -- We can't handle zero-parameter type classes- , let cls_arg_tys = init cls_tys- data_ty = last cls_tys- data_ty_head = case unfoldType data_ty of ty_head :| _ -> ty_head+partitionDec (DStandaloneDerivD mb_strat _ ctxt ty) =+ case unfoldDType ty of+ (cls_pred_ty, cls_tys)+ | let cls_normal_tys = filterDTANormals cls_tys+ , not (null cls_normal_tys) -- We can't handle zero-parameter type classes+ , let cls_arg_tys = init cls_normal_tys+ data_ty = last cls_normal_tys+ data_ty_head = case unfoldDType data_ty of (ty_head, _) -> ty_head , DConT data_tycon <- data_ty_head -- We can't handle deriving an instance for something -- other than a type constructor application -> do let cls_pred = foldType cls_pred_ty cls_arg_tys@@ -152,10 +153,10 @@ partitionDec dec = fail $ "Declaration cannot be promoted: " ++ pprint (decToTH dec) -partitionClassDec :: Monad m => DDec -> m (ULetDecEnv, [OpenTypeFamilyDecl])+partitionClassDec :: MonadFail m => DDec -> m (ULetDecEnv, [OpenTypeFamilyDecl]) partitionClassDec (DLetDec (DSigD name ty)) = pure (typeBinding name ty, mempty)-partitionClassDec (DLetDec (DValD (DVarPa name) exp)) =+partitionClassDec (DLetDec (DValD (DVarP name) exp)) = pure (valueBinding name (UValue exp), mempty) partitionClassDec (DLetDec (DFunD name clauses)) = pure (valueBinding name (UFunction clauses), mempty)@@ -173,16 +174,16 @@ partitionClassDec _ = fail "Only method declarations can be promoted within a class." -partitionInstanceDec :: Monad m => DDec+partitionInstanceDec :: MonadFail m => DDec -> m ( Maybe (Name, ULetDecRHS) -- right-hand sides of methods- , Map Name DType -- method type signatures+ , OMap Name DType -- method type signatures )-partitionInstanceDec (DLetDec (DValD (DVarPa name) exp)) =+partitionInstanceDec (DLetDec (DValD (DVarP name) exp)) = pure (Just (name, UValue exp), mempty) partitionInstanceDec (DLetDec (DFunD name clauses)) = pure (Just (name, UFunction clauses), mempty) partitionInstanceDec (DLetDec (DSigD name ty)) =- pure (Nothing, Map.singleton name ty)+ pure (Nothing, OMap.singleton name ty) partitionInstanceDec (DLetDec (DPragmaD {})) = pure (Nothing, mempty) partitionInstanceDec (DTySynInstD {}) =@@ -196,7 +197,7 @@ :: forall m. DsMonad m => Maybe DDerivStrategy -- ^ The deriving strategy, if present.- -> DType -- ^ The class being derived (e.g., 'Eq'), possibly applied to+ -> DPred -- ^ The class being derived (e.g., 'Eq'), possibly applied to -- some number of arguments (e.g., @C Int Bool@). -> Maybe DCxt -- ^ @'Just' ctx@ if @ctx@ was provided via @StandaloneDeriving@. -- 'Nothing' if using a @deriving@ clause.@@ -204,8 +205,8 @@ -> DataDecl -- ^ The original data type information (e.g., its constructors). -> m PartitionedDecs partitionDeriving mb_strat deriv_pred mb_ctxt ty data_decl =- case unfoldType deriv_pred of- DConT deriv_name :| arg_tys+ case unfoldDType deriv_pred of+ (DConT deriv_name, arg_tys) -- Here, we are more conservative than GHC: DeriveAnyClass only kicks -- in if the user explicitly chooses to do so with the anyclass -- deriving strategy@@ -223,7 +224,7 @@ -- StandaloneDeriving, use that.) , id_name = deriv_name- , id_arg_tys = arg_tys ++ [ty]+ , id_arg_tys = filterDTANormals arg_tys ++ [ty] , id_sigs = mempty , id_meths = [] } @@ -237,7 +238,7 @@ -- Stock classes. These are derived only if `singletons` supports them -- (and, optionally, if an explicit stock deriving strategy is used)- DConT deriv_name :| [] -- For now, all stock derivable class supported in+ (DConT deriv_name, []) -- For now, all stock derivable class supported in -- singletons take just one argument (the data -- type itself) | stock_or_default@@ -258,9 +259,17 @@ mk_derived_inst dec = mempty { pd_instance_decs = [dec] } mk_derived_eq_inst dec = mempty { pd_derived_eq_decs = [dec] }- derived_decl = DerivedDecl { ded_mb_cxt = mb_ctxt- , ded_type = ty- , ded_decl = data_decl }++ derived_decl :: DerivedDecl cls+ derived_decl = DerivedDecl { ded_mb_cxt = mb_ctxt+ , ded_type = ty+ , ded_type_tycon = ty_tycon+ , ded_decl = data_decl }+ where+ ty_tycon :: Name+ ty_tycon = case unfoldDType ty of+ (DConT tc, _) -> tc+ (t, _) -> error $ "Not a data type: " ++ show t stock_or_default = isStockOrDefault mb_strat -- A mapping from all stock derivable classes (that singletons supports)@@ -277,7 +286,7 @@ , ( eqName, return $ mk_derived_eq_inst derived_decl ) -- See Note [DerivedDecl] in Data.Singletons.Syntax , ( showName, do -- These will become PShow/SShow instances...- inst_for_promotion <- mk_instance mkShowInstance+ inst_for_promotion <- mk_instance $ mkShowInstance ForPromotion -- ...and this will become a Show instance. let inst_for_show = derived_decl pure $ mempty { pd_instance_decs = [inst_for_promotion]
src/Data/Singletons/Prelude.hs view
@@ -22,15 +22,11 @@ -- * Basic singleton definitions module Data.Singletons, - Sing(SFalse, STrue, SNil, SCons, SJust, SNothing, SLeft, SRight, SLT, SEQ, SGT,- STuple0, STuple2, STuple3, STuple4, STuple5, STuple6, STuple7),-- -- * Singleton type synonyms+ -- * Singleton types - -- | These synonyms are all kind-restricted synonyms of 'Sing'.- -- For example 'SBool' requires an argument of kind 'Bool'.- SBool, SList, SMaybe, SEither, SOrdering,- STuple0, STuple2, STuple3, STuple4, STuple5, STuple6, STuple7,+ SBool(..), SList(..), SMaybe(..), SEither(..), SOrdering(..),+ STuple0(..), STuple2(..), STuple3(..), STuple4(..),+ STuple5(..), STuple6(..), STuple7(..), -- * Functions working with 'Bool' If, sIf, Not, sNot, type (&&), type (||), (%&&), (%||), Otherwise, sOtherwise,@@ -65,12 +61,14 @@ PSemigroup(type (<>)), SSemigroup((%<>)), PMonoid(..), SMonoid(..), - -- * Singleton 'Functor', 'Applicative', and 'Monad'+ -- * Singleton 'Functor', 'Applicative', 'Monad', and 'MonadFail' PFunctor(Fmap, type (<$)), SFunctor(sFmap, (%<$)), type (<$>), (%<$>), PApplicative(Pure, type (<*>), type (*>), type (<*)), SApplicative(sPure, (%<*>), (%*>), (%<*)),- PMonad(type (>>=), type (>>), Return, Fail),- SMonad((%>>=), (%>>), sReturn, sFail),+ PMonad(type (>>=), type (>>), Return),+ SMonad((%>>=), (%>>), sReturn),+ PMonadFail(Fail), SMonadFail(sFail),+ MapM_, sMapM_, Sequence_, sSequence_, type (=<<), (%=<<),@@ -84,7 +82,7 @@ STraversable(sTraverse, sSequenceA, sMapM, sSequence), -- ** Miscellaneous functions- Id, sId, Const, sConst, (:.), (%.), type ($), (%$), type ($!), (%$!),+ Id, sId, Const, sConst, type (.), (%.), type ($), (%$), type ($!), (%$!), Flip, sFlip, AsTypeOf, sAsTypeOf, Seq, sSeq,
src/Data/Singletons/Prelude/Applicative.hs view
@@ -6,6 +6,7 @@ {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -27,7 +28,7 @@ module Data.Singletons.Prelude.Applicative ( PApplicative(..), SApplicative(..), PAlternative(..), SAlternative(..),- Sing (SConst, sGetConst), SConst, Const, GetConst,+ Sing, SConst(..), Const, GetConst, type (<$>), (%<$>), type (<$), (%<$), type (<**>), (%<**>), LiftA, sLiftA, LiftA3, sLiftA3, Optional, sOptional,
src/Data/Singletons/Prelude/Base.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE TemplateHaskell, TypeOperators, DataKinds, PolyKinds, ScopedTypeVariables, TypeFamilies, GADTs,- UndecidableInstances, BangPatterns #-}+ UndecidableInstances, BangPatterns, TypeApplications #-} ----------------------------------------------------------------------------- -- |@@ -24,7 +24,7 @@ module Data.Singletons.Prelude.Base ( -- * Basic functions Foldr, sFoldr, Map, sMap, type (++), (%++), Otherwise, sOtherwise,- Id, sId, Const, sConst, (:.), (%.), type ($), type ($!), (%$), (%$!),+ Id, sId, Const, sConst, type (.), (%.), type ($), type ($!), (%$), (%$!), Until, sUntil, Flip, sFlip, AsTypeOf, sAsTypeOf, Seq, sSeq, @@ -111,5 +111,6 @@ -- Workaround for #326 infixr 5 +++infixr 9 . infixr 0 $ infixr 0 $!
src/Data/Singletons/Prelude/Bool.hs view
@@ -24,16 +24,7 @@ module Data.Singletons.Prelude.Bool ( -- * The 'Bool' singleton-- Sing(SFalse, STrue),- -- | Though Haddock doesn't show it, the 'Sing' instance above declares- -- constructors- --- -- > SFalse :: Sing False- -- > STrue :: Sing True-- SBool,- -- | 'SBool' is a kind-restricted synonym for 'Sing': @type SBool (a :: Bool) = Sing a@+ Sing, SBool(..), -- * Conditionals If, sIf,
src/Data/Singletons/Prelude/Const.hs view
@@ -1,11 +1,11 @@ {-# LANGUAGE DataKinds #-}-{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -26,8 +26,7 @@ module Data.Singletons.Prelude.Const ( -- * The 'Const' singleton- Sing(SConst, sGetConst),- SConst, GetConst,+ Sing, SConst(..), GetConst, -- * Defunctionalization symbols ConstSym0, ConstSym1,@@ -71,9 +70,9 @@ poly-kinded Sing instances (see #150), we simply write the Sing instance by hand. -}-data instance Sing :: forall (k :: Type) (a :: Type) (b :: k). Const a b -> Type where- SConst :: { sGetConst :: Sing a } -> Sing ('Const a)-type SConst = (Sing :: Const a b -> Type)+data SConst :: forall (k :: Type) (a :: Type) (b :: k). Const a b -> Type where+ SConst :: { sGetConst :: Sing a } -> SConst ('Const a)+type instance Sing = SConst instance SingKind a => SingKind (Const a b) where type Demote (Const a b) = Const (Demote a) b fromSing (SConst sa) = Const (fromSing sa)@@ -83,8 +82,6 @@ $(genDefunSymbols [''Const]) instance SingI ConstSym0 where- sing = singFun1 SConst-instance SingI (TyCon1 'Const) where sing = singFun1 SConst $(singletons [d|
src/Data/Singletons/Prelude/Either.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE TemplateHaskell, ScopedTypeVariables, TypeFamilies, GADTs,- RankNTypes, UndecidableInstances, DataKinds, PolyKinds #-}+ RankNTypes, UndecidableInstances, DataKinds, PolyKinds,+ TypeApplications #-} ----------------------------------------------------------------------------- -- |@@ -23,16 +24,7 @@ module Data.Singletons.Prelude.Either ( -- * The 'Either' singleton- Sing(SLeft, SRight),- -- | Though Haddock doesn't show it, the 'Sing' instance above declares- -- constructors- --- -- > SLeft :: Sing a -> Sing (Left a)- -- > SRight :: Sing b -> Sing (Right b)-- SEither,- -- | 'SEither' is a kind-restricted synonym for 'Sing':- -- @type SEither (a :: Either x y) = Sing a@+ Sing, SEither(..), -- * Singletons from @Data.Either@ either_, Either_, sEither_,
src/Data/Singletons/Prelude/Enum.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE TemplateHaskell, DataKinds, PolyKinds, ScopedTypeVariables, TypeFamilies, TypeOperators, GADTs, UndecidableInstances, FlexibleContexts, DefaultSignatures, BangPatterns,- InstanceSigs #-}+ InstanceSigs, TypeApplications #-} ----------------------------------------------------------------------------- -- |
src/Data/Singletons/Prelude/Foldable.hs view
@@ -7,6 +7,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -107,7 +108,8 @@ import Data.Singletons.Prelude.Bool import Data.Singletons.Prelude.Either import Data.Singletons.Prelude.Eq-import Data.Singletons.Prelude.Instances (Sing(..), type (:@#@$))+import Data.Singletons.Prelude.Instances+ hiding (Foldl, FoldlSym0(..), FoldlSym1(..), FoldlSym2(..), FoldlSym3, sFoldl) import Data.Singletons.Prelude.List.Internal.Disambiguation import Data.Singletons.Prelude.Maybe import Data.Singletons.Prelude.Monad.Internal@@ -132,8 +134,9 @@ import Data.Singletons.TypeLits.Internal newtype Endo a = Endo (a ~> a)-data instance Sing :: forall a. Endo a -> Type where- SEndo :: Sing x -> Sing ('Endo x)+data SEndo :: forall a. Endo a -> Type where+ SEndo :: Sing x -> SEndo ('Endo x)+type instance Sing = SEndo data EndoSym0 :: forall a. (a ~> a) ~> Endo a type instance Apply EndoSym0 x = 'Endo x @@ -146,13 +149,15 @@ |]) newtype MaxInternal a = MaxInternal (Maybe a)-data instance Sing :: forall a. MaxInternal a -> Type where- SMaxInternal :: Sing x -> Sing ('MaxInternal x)+data SMaxInternal :: forall a. MaxInternal a -> Type where+ SMaxInternal :: Sing x -> SMaxInternal ('MaxInternal x)+type instance Sing = SMaxInternal $(genDefunSymbols [''MaxInternal]) newtype MinInternal a = MinInternal (Maybe a)-data instance Sing :: forall a. MinInternal a -> Type where- SMinInternal :: Sing x -> Sing ('MinInternal x)+data SMinInternal :: forall a. MinInternal a -> Type where+ SMinInternal :: Sing x -> SMinInternal ('MinInternal x)+type instance Sing = SMinInternal $(genDefunSymbols [''MinInternal]) $(singletonsOnly [d|
src/Data/Singletons/Prelude/Function.hs view
@@ -19,11 +19,11 @@ {-# LANGUAGE TemplateHaskell, ScopedTypeVariables, TypeFamilies, TypeOperators, UndecidableInstances, GADTs,- DataKinds, PolyKinds #-}+ DataKinds, PolyKinds, TypeApplications #-} module Data.Singletons.Prelude.Function ( -- * "Prelude" re-exports- Id, sId, Const, sConst, (:.), (%.), Flip, sFlip, type ($), (%$)+ Id, sId, Const, sConst, type (.), (%.), Flip, sFlip, type ($), (%$) -- * Other combinators , type (&), (%&), On, sOn
src/Data/Singletons/Prelude/Functor.hs view
@@ -7,6 +7,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}
src/Data/Singletons/Prelude/Identity.hs view
@@ -6,6 +6,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-}@@ -25,8 +26,7 @@ module Data.Singletons.Prelude.Identity ( -- * The 'Identity' singleton- Sing(SIdentity, sRunIdentity),- SIdentity, RunIdentity,+ Sing, SIdentity(..), RunIdentity, -- * Defunctionalization symbols IdentitySym0, IdentitySym1,
src/Data/Singletons/Prelude/Instances.hs view
@@ -10,11 +10,16 @@ {-# LANGUAGE DataKinds, PolyKinds, RankNTypes, GADTs, TypeFamilies, EmptyCase, FlexibleContexts, TemplateHaskell, ScopedTypeVariables,- UndecidableInstances, TypeOperators, FlexibleInstances #-}+ UndecidableInstances, TypeOperators, FlexibleInstances,+ TypeApplications #-} {-# OPTIONS_GHC -Wno-orphans #-} -module Data.Singletons.Prelude.Instances where+module Data.Singletons.Prelude.Instances (+ module Data.Singletons.Prelude.Instances+ , Sing+ ) where +import Data.Singletons.Internal import Data.Singletons.Single import Data.Singletons.Util
src/Data/Singletons/Prelude/IsString.hs view
@@ -4,6 +4,7 @@ {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-}
src/Data/Singletons/Prelude/List.hs view
@@ -22,15 +22,7 @@ module Data.Singletons.Prelude.List ( -- * The singleton for lists- Sing(SNil, SCons),- -- | Though Haddock doesn't show it, the 'Sing' instance above declares- -- constructors- --- -- > SNil :: Sing '[]- -- > SCons :: Sing (h :: k) -> Sing (t :: [k]) -> Sing (h ': t)-- SList,- -- | 'SList' is a kind-restricted synonym for 'Sing': @type SList (a :: [k]) = Sing a@+ Sing, SList(..), -- * Basic functions type (++), (%++), Head, sHead, Last, sLast, Tail, sTail, Init, sInit,@@ -267,7 +259,7 @@ ) import Data.Singletons.Prelude.Foldable import Data.Singletons.Prelude.Instances- (Sing(..), SList, NilSym0, type (:@#@$), type (:@#@$$), type (:@#@$$$))+ (Sing, SList(..), NilSym0, type (:@#@$), type (:@#@$$), type (:@#@$$$)) import Data.Singletons.Prelude.Traversable import Data.Singletons.Prelude.List.Internal
src/Data/Singletons/Prelude/List/Internal.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE TypeOperators, DataKinds, PolyKinds, TypeFamilies, TemplateHaskell, GADTs, UndecidableInstances, RankNTypes,- ScopedTypeVariables, FlexibleContexts, AllowAmbiguousTypes #-}+ ScopedTypeVariables, FlexibleContexts,+ TypeApplications #-} {-# OPTIONS_GHC -O0 #-} -----------------------------------------------------------------------------@@ -96,11 +97,6 @@ perms (t:ts) is = foldr interleave (perms ts (t:is)) (permutations is) where interleave xs r = let (_,zs) = interleave' id xs r in zs - -- This type signature isn't present in the reference- -- implementation of permutations in base. However, it is needed- -- here, since (at least in GHC 8.2.1) the singletonized version- -- will fail to typecheck without it. See #13549 for the full story.- interleave' :: ([a] -> b) -> [a] -> [b] -> ([a], [b]) interleave' _ [] r = (ts, r) interleave' f (y:ys) r = let (us,zs) = interleave' (f . (y:)) ys r in (y:us, f (t:y:us) : zs)
src/Data/Singletons/Prelude/List/Internal/Disambiguation.hs view
@@ -13,7 +13,8 @@ ---------------------------------------------------------------------------- {-# LANGUAGE TemplateHaskell, ScopedTypeVariables, TypeFamilies,- UndecidableInstances, GADTs, DataKinds, PolyKinds #-}+ UndecidableInstances, GADTs, DataKinds, PolyKinds,+ TypeApplications #-} {-# OPTIONS_GHC -Wno-missing-signatures #-} module Data.Singletons.Prelude.List.Internal.Disambiguation where
src/Data/Singletons/Prelude/List/NonEmpty.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE TemplateHaskell, ScopedTypeVariables, TypeOperators, TypeFamilies, GADTs, UndecidableInstances, InstanceSigs,- DataKinds, PolyKinds #-}+ DataKinds, PolyKinds, TypeApplications #-} {-# OPTIONS_GHC -Wno-orphans #-} -----------------------------------------------------------------------------@@ -25,17 +25,7 @@ module Data.Singletons.Prelude.List.NonEmpty ( -- * The 'NonEmpty' singleton-- Sing((:%|)),-- -- | Though Haddock doesn't show it, the 'Sing' instance above declares- -- constructor- --- -- > (:%|) :: Sing h -> Sing t -> Sing (h :| t)-- SNonEmpty,- -- | 'SNonEmpty' is a kind-restricted synonym for 'Sing':- -- @type SNonEmpty (a :: NonEmpty) = Sing a@+ Sing, SNonEmpty(..), -- * Non-empty stream transformations Map, sMap,
src/Data/Singletons/Prelude/Maybe.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE TemplateHaskell, ScopedTypeVariables, TypeFamilies,- DataKinds, PolyKinds, UndecidableInstances, GADTs, RankNTypes #-}+ DataKinds, PolyKinds, UndecidableInstances, GADTs, RankNTypes,+ TypeApplications #-} ----------------------------------------------------------------------------- -- |@@ -24,16 +25,7 @@ module Data.Singletons.Prelude.Maybe ( -- The 'Maybe' singleton-- Sing(SNothing, SJust),- -- | Though Haddock doesn't show it, the 'Sing' instance above declares- -- constructors- --- -- > SNothing :: Sing Nothing- -- > SJust :: Sing a -> Sing (Just a)-- SMaybe,- -- | 'SBool' is a kind-restricted synonym for 'Sing': @type SMaybe (a :: Maybe k) = Sing a@+ Sing, SMaybe(..), -- * Singletons from @Data.Maybe@ maybe_, Maybe_, sMaybe_,
src/Data/Singletons/Prelude/Monad.hs view
@@ -6,6 +6,7 @@ {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -27,6 +28,7 @@ module Data.Singletons.Prelude.Monad ( PFunctor(Fmap), SFunctor(sFmap), PMonad(..), SMonad(..), PMonadPlus(..), SMonadPlus(..),+ PMonadFail(Fail), SMonadFail(sFail), MapM, sMapM, MapM_, sMapM_, ForM, sForM, Sequence, sSequence, Sequence_, sSequence_,@@ -98,6 +100,7 @@ import Data.Singletons.Prelude.Functor import Data.Singletons.Prelude.Instances import Data.Singletons.Prelude.List (UnzipSym0, sUnzip, ZipWithSym0, sZipWith)+import Data.Singletons.Prelude.Monad.Fail import Data.Singletons.Prelude.Monad.Internal import Data.Singletons.Prelude.Monoid import Data.Singletons.Prelude.Num@@ -208,19 +211,21 @@ -- -| @'replicateM' n act@ performs the action @n@ times, -- gathering the results.- replicateM :: (Applicative m) => Nat -> m a -> m [a]+ replicateM :: forall m a. (Applicative m) => Nat -> m a -> m [a] replicateM cnt0 f = loop cnt0 where+ loop :: Nat -> m [a] loop cnt | cnt <= 0 = pure [] | otherwise = liftA2 (:) f (loop (cnt - 1)) -- -| Like 'replicateM', but discards the result.- replicateM_ :: (Applicative m) => Nat -> m a -> m ()+ replicateM_ :: forall m a. (Applicative m) => Nat -> m a -> m () replicateM_ cnt0 f = loop cnt0 where+ loop :: Nat -> m () loop cnt | cnt <= 0 = pure () | otherwise = f *> loop (cnt - 1)
+ src/Data/Singletons/Prelude/Monad/Fail.hs view
@@ -0,0 +1,64 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}++-----------------------------------------------------------------------------+-- |+-- Module : Data.Singletons.Prelude.Monad.Fail+-- Copyright : (C) 2019 Ryan Scott+-- License : BSD-style (see LICENSE)+-- Maintainer : Ryan Scott+-- Stability : experimental+-- Portability : non-portable+--+-- Defines the promoted and singled versions of the 'MonadFail' type class.+--+----------------------------------------------------------------------------++module Data.Singletons.Prelude.Monad.Fail (+ PMonadFail(..), SMonadFail(..),++ -- * Defunctionalization symbols+ FailSym0, FailSym1+ ) where++import Data.Kind+import Data.Singletons.Prelude.Instances+import Data.Singletons.Prelude.Monad.Internal+import Data.Singletons.Single++$(singletonsOnly [d|+ -- -| When a value is bound in @do@-notation, the pattern on the left+ -- hand side of @<-@ might not match. In this case, this class+ -- provides a function to recover.+ --+ -- A 'Monad' without a 'MonadFail' instance may only be used in conjunction+ -- with pattern that always match, such as newtypes, tuples, data types with+ -- only a single data constructor, and irrefutable patterns (@~pat@).+ --+ -- Instances of 'MonadFail' should satisfy the following law: @fail s@ should+ -- be a left zero for 'Control.Monad.>>=',+ --+ -- @+ -- fail s >>= f = fail s+ -- @+ --+ -- If your 'Monad' is also 'Control.Monad.MonadPlus', a popular definition is+ --+ -- @+ -- fail _ = mzero+ -- @+ class Monad m => MonadFail (m :: Type -> Type) where+ fail :: String -> m a++ instance MonadFail Maybe where+ fail _ = Nothing++ instance MonadFail [] where+ fail _ = []+ |])
src/Data/Singletons/Prelude/Monad/Internal.hs view
@@ -7,6 +7,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -43,7 +44,6 @@ import Data.Singletons.Prelude.Base import Data.Singletons.Prelude.Instances import Data.Singletons.Single-import Data.Singletons.TypeLits.Internal {- Note [How to get the right kinds when promoting Functor and friends]@@ -275,17 +275,6 @@ return :: a -> m a return = pure - -- -| Fail with a message. This operation is not part of the- -- mathematical definition of a monad, but is invoked on pattern-match- -- failure in a @do@ expression.- --- -- As part of the MonadFail proposal (MFP), this function is moved- -- to its own class 'MonadFail' (see "Control.Monad.Fail" for more- -- details). The definition here will be removed in a future- -- release.- fail :: Symbol -> m a- fail s = error s- {- Note [Recursive bindings for Applicative/Monad] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -489,8 +478,6 @@ (>>) = (*>) - fail _ = Nothing- instance Monad NonEmpty where (a :| as) >>= f = b :| (bs ++ bs') where b :| bs = f a@@ -499,7 +486,6 @@ instance Monad [] where xs >>= f = foldr ((++) . f) [] xs- fail _ = [] instance Monad (Either e) where Left l >>= _ = Left l
src/Data/Singletons/Prelude/Monad/Zip.hs view
@@ -6,6 +6,7 @@ {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}
src/Data/Singletons/Prelude/Monoid.hs view
@@ -7,6 +7,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -29,12 +30,10 @@ module Data.Singletons.Prelude.Monoid ( PMonoid(..), SMonoid(..), - Sing(SDual, sGetDual, SAll, sGetAll, SAny, sGetAny, SSum, sGetSum,- SProduct, sGetProduct, SFirst, sGetFirst, SLast, sGetLast),+ Sing, SDual(..), SAll(..), SAny(..),+ SSum(..), SProduct(..), SFirst(..), SLast(..), GetDual, GetAll, GetAny, GetSum, GetProduct, GetFirst, GetLast, - SDual, SAll, SAny, SSum, SProduct, SFirst, SLast,- -- ** Defunctionalization symbols MemptySym0, MappendSym0, MappendSym1, MappendSym2,@@ -58,7 +57,7 @@ import Data.Singletons.Prelude.Num import Data.Singletons.Prelude.Ord import Data.Singletons.Prelude.Semigroup.Internal hiding- (Sing(SFirst, SLast), SFirst, SLast,+ (SFirst, SLast, FirstSym0, FirstSym1, FirstSym0KindInference, LastSym0, LastSym1, LastSym0KindInference, GetFirst, GetFirstSym0, GetFirstSym1, GetFirstSym0KindInference,
src/Data/Singletons/Prelude/Num.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE TemplateHaskell, PolyKinds, DataKinds, TypeFamilies, TypeOperators, GADTs, ScopedTypeVariables, UndecidableInstances,- DefaultSignatures, FlexibleContexts, InstanceSigs, NoStarIsType+ DefaultSignatures, FlexibleContexts, InstanceSigs, NoStarIsType,+ TypeApplications #-} -----------------------------------------------------------------------------@@ -41,7 +42,7 @@ import Data.Singletons.TypeLits.Internal import Data.Singletons.Decide import qualified GHC.TypeNats as TN-import GHC.TypeNats (Nat, SomeNat(..), someNatVal)+import GHC.TypeNats (SomeNat(..), someNatVal) import Unsafe.Coerce $(singletonsOnly [d|
src/Data/Singletons/Prelude/Ord.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE TemplateHaskell, DataKinds, PolyKinds, ScopedTypeVariables, TypeFamilies, TypeOperators, GADTs, UndecidableInstances, FlexibleContexts, DefaultSignatures, InstanceSigs,- StandaloneDeriving, FlexibleInstances #-}+ StandaloneDeriving, FlexibleInstances, TypeApplications #-} {-# OPTIONS_GHC -Wno-orphans #-} -----------------------------------------------------------------------------@@ -27,9 +27,7 @@ -- it returns its first argument. thenCmp, ThenCmp, sThenCmp, - Sing(SLT, SEQ, SGT, SDown),-- SOrdering, SDown,+ Sing, SOrdering(..), SDown(..), -- ** Defunctionalization symbols ThenCmpSym0, ThenCmpSym1, ThenCmpSym2,
src/Data/Singletons/Prelude/Semigroup.hs view
@@ -7,6 +7,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -29,18 +30,12 @@ module Data.Singletons.Prelude.Semigroup ( PSemigroup(..), SSemigroup(..), - Sing(SMin, sGetMin, SMax, sGetMax,- SFirst, sGetFirst, SLast, sGetLast,- SWrapMonoid, sUnwrapMonoid, SDual, sGetDual,- SAll, sGetAll, SAny, sGetAny,- SSum, sGetSum, SProduct, sGetProduct,- SOption, sGetOption, SArg),- GetMin, GetMax, GetFirst, GetLast, GetDual,+ Sing, SMin(..), SMax(..), SFirst(..), SLast(..),+ SWrappedMonoid(..), SDual(..), SAll(..), SAny(..),+ SSum(..), SProduct(..), SOption(..), SArg(..),+ GetMin, GetMax, GetFirst, GetLast, UnwrapMonoid, GetDual, GetAll, GetAny, GetSum, GetProduct, GetOption, - SMin, SMax, SFirst, SLast, SWrappedMonoid, SDual,- SAll, SAny, SSum, SProduct, SOption, SArg,- option_, sOption_, Option_, -- ** Defunctionalization symbols@@ -78,7 +73,7 @@ import Data.Singletons.Prelude.Maybe import Data.Singletons.Prelude.Monad.Internal import Data.Singletons.Prelude.Monoid hiding- (Sing(SFirst, SLast), SFirst, sGetFirst, SLast, sGetLast,+ (SFirst(..), SLast(..), FirstSym0, FirstSym1, LastSym0, LastSym1, GetFirst, GetFirstSym0, GetFirstSym1, GetLast, GetLastSym0, GetLastSym1)
src/Data/Singletons/Prelude/Semigroup/Internal.hs view
@@ -7,6 +7,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -53,7 +54,7 @@ import qualified Data.Text as T import Data.Void (Void) -import GHC.TypeLits (AppendSymbol, SomeSymbol(..), someSymbolVal, Symbol)+import GHC.TypeLits (AppendSymbol, SomeSymbol(..), someSymbolVal) import Unsafe.Coerce @@ -75,6 +76,7 @@ -- sconcat :: NonEmpty a -> a sconcat (a :| as) = go a as where+ go :: a -> [a] -> a go b (c:cs) = b <> go c cs go b [] = b
src/Data/Singletons/Prelude/Show.hs view
@@ -7,6 +7,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}
src/Data/Singletons/Prelude/Traversable.hs view
@@ -7,6 +7,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -54,7 +55,7 @@ import Data.Singletons.Internal import Data.Singletons.Prelude.Base hiding (Const, ConstSym0) import Data.Singletons.Prelude.Const-import Data.Singletons.Prelude.Foldable (PFoldable, SFoldable)+import Data.Singletons.Prelude.Foldable (SFoldable) import Data.Singletons.Prelude.Functor import Data.Singletons.Prelude.Identity import Data.Singletons.Prelude.Instances@@ -63,14 +64,16 @@ import Data.Singletons.Single newtype StateL s a = StateL (s ~> (s, a))-data instance Sing :: forall s a. StateL s a -> Type where- SStateL :: Sing x -> Sing ('StateL x)+data SStateL :: forall s a. StateL s a -> Type where+ SStateL :: Sing x -> SStateL ('StateL x)+type instance Sing = SStateL data StateLSym0 :: forall s a. (s ~> (s, a)) ~> StateL s a type instance Apply StateLSym0 x = 'StateL x newtype StateR s a = StateR (s ~> (s, a))-data instance Sing :: forall s a. StateR s a -> Type where- SStateR :: Sing x -> Sing ('StateR x)+data SStateR :: forall s a. StateR s a -> Type where+ SStateR :: Sing x -> SStateR ('StateR x)+type instance Sing = SStateR data StateRSym0 :: forall s a. (s ~> (s, a)) ~> StateR s a type instance Apply StateRSym0 x = 'StateR x
src/Data/Singletons/Prelude/Tuple.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE TemplateHaskell, ScopedTypeVariables, DataKinds, PolyKinds,- RankNTypes, TypeFamilies, GADTs, UndecidableInstances #-}+ RankNTypes, TypeFamilies, GADTs, UndecidableInstances,+ TypeApplications #-} ----------------------------------------------------------------------------- -- |@@ -25,8 +26,8 @@ -- * Singleton definitions -- | See 'Data.Singletons.Prelude.Sing' for more info. - Sing(STuple0, STuple2, STuple3, STuple4, STuple5, STuple6, STuple7),- STuple0, STuple2, STuple3, STuple4, STuple5, STuple6, STuple7,+ Sing, STuple0(..), STuple2(..), STuple3(..),+ STuple4(..), STuple5(..), STuple6(..), STuple7(..), -- * Singletons from @Data.Tuple@ Fst, sFst, Snd, sSnd, Curry, sCurry, Uncurry, sUncurry, Swap, sSwap,
src/Data/Singletons/Prelude/Void.hs view
@@ -4,6 +4,7 @@ {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} -----------------------------------------------------------------------------
src/Data/Singletons/Promote.hs view
@@ -14,6 +14,10 @@ import Language.Haskell.TH hiding ( Q, cxt ) import Language.Haskell.TH.Syntax ( Quasi(..) ) import Language.Haskell.TH.Desugar+import qualified Language.Haskell.TH.Desugar.OMap.Strict as OMap+import Language.Haskell.TH.Desugar.OMap.Strict (OMap)+import qualified Language.Haskell.TH.Desugar.OSet as OSet+import Language.Haskell.TH.Desugar.OSet (OSet) import Data.Singletons.Names import Data.Singletons.Promote.Monad import Data.Singletons.Promote.Eq@@ -31,13 +35,10 @@ import Control.Applicative (Alternative(..)) import Control.Arrow (second) import Control.Monad-import Control.Monad.Trans.Class (MonadTrans(..)) import Control.Monad.Trans.Maybe import Control.Monad.Writer import qualified Data.Map.Strict as Map import Data.Map.Strict ( Map )-import qualified Data.Set as Set-import Data.Set ( Set ) import Data.Maybe import qualified GHC.LanguageExtensions.Type as LangExt @@ -141,7 +142,7 @@ -- | Produce an instance for 'PShow' from the given type promoteShowInstance :: DsMonad q => Name -> q [Dec]-promoteShowInstance = promoteInstance mkShowInstance "Show"+promoteShowInstance = promoteInstance (mkShowInstance ForPromotion) "Show" -- | Produce an instance for @(==)@ (type-level equality) from the given type promoteEqInstance :: DsMonad q => Name -> q [Dec]@@ -163,7 +164,7 @@ cons' <- concatMapM (dsCon tvbs' data_ty) cons let data_decl = DataDecl name tvbs' cons' raw_inst <- mk_inst Nothing data_ty data_decl- decs <- promoteM_ [] $ void $ promoteInstanceDec Map.empty raw_inst+ decs <- promoteM_ [] $ void $ promoteInstanceDec OMap.empty raw_inst return $ decsToTH decs promoteInfo :: DInfo -> PrM ()@@ -256,12 +257,12 @@ let_dec_env <- buildLetDecEnv decls all_locals <- allLocals let binds = [ (name, foldType (DConT sym) (map DVarT all_locals))- | name <- Map.keys $ lde_defns let_dec_env+ | (name, _) <- OMap.assocs $ lde_defns let_dec_env , let proName = promoteValNameLhsPrefix prefixes name sym = promoteTySym proName (length all_locals) ] (decs, let_dec_env') <- letBind binds $ promoteLetDecEnv prefixes let_dec_env emitDecs decs- return (binds, let_dec_env' { lde_proms = Map.fromList binds })+ return (binds, let_dec_env' { lde_proms = OMap.fromList binds }) -- Promotion of data types to kinds is automatic (see "Giving Haskell a -- Promotion" paper for more details). Here we "plug into" the promotion@@ -297,8 +298,7 @@ promoteClassDec :: UClassDecl -> PrM AClassDecl-promoteClassDec decl@(ClassDecl { cd_cxt = cxt- , cd_name = cls_name+promoteClassDec decl@(ClassDecl { cd_name = cls_name , cd_tvbs = tvbs' , cd_fds = fundeps , cd_lde = lde@LetDecEnv@@ -309,31 +309,30 @@ -- a workaround for GHC Trac #12928; see Note [CUSKification] tvbs = map cuskify tvbs' let pClsName = promoteClassName cls_name- pCxt <- mapM promote_superclass_pred cxt forallBind cls_kvs_to_bind $ do- sig_decs <- mapM (uncurry promote_sig) (Map.toList meth_sigs)- let defaults_list = Map.toList defaults+ sig_decs <- mapM (uncurry promote_sig) (OMap.assocs meth_sigs)+ let defaults_list = OMap.assocs defaults defaults_names = map fst defaults_list (default_decs, ann_rhss, prom_rhss)- <- mapAndUnzip3M (promoteMethod Map.empty Nothing meth_sigs) defaults_list+ <- mapAndUnzip3M (promoteMethod OMap.empty Nothing meth_sigs) defaults_list let infix_decls' = catMaybes $ map (uncurry promoteInfixDecl)- $ Map.toList infix_decls+ $ OMap.assocs infix_decls -- no need to do anything to the fundeps. They work as is!- emitDecs [DClassD pCxt pClsName tvbs fundeps+ emitDecs [DClassD [] pClsName tvbs fundeps (sig_decs ++ default_decs ++ infix_decls')] let defaults_list' = zip defaults_names ann_rhss proms = zip defaults_names prom_rhss cls_kvs_to_bind' = cls_kvs_to_bind <$ meth_sigs- return (decl { cd_lde = lde { lde_defns = Map.fromList defaults_list'- , lde_proms = Map.fromList proms+ return (decl { cd_lde = lde { lde_defns = OMap.fromList defaults_list'+ , lde_proms = OMap.fromList proms , lde_bound_kvs = cls_kvs_to_bind' } }) where- cls_kvb_names, cls_tvb_names, cls_kvs_to_bind :: Set Name+ cls_kvb_names, cls_tvb_names, cls_kvs_to_bind :: OSet Name cls_kvb_names = foldMap (foldMap fvDType . extractTvbKind) tvbs'- cls_tvb_names = Set.fromList $ map extractTvbName tvbs'- cls_kvs_to_bind = cls_kvb_names `Set.union` cls_tvb_names+ cls_tvb_names = OSet.fromList $ map extractTvbName tvbs'+ cls_kvs_to_bind = cls_kvb_names `OSet.union` cls_tvb_names promote_sig :: Name -> DType -> PrM DDec promote_sig name ty = do@@ -348,19 +347,8 @@ (DKindSig resK) Nothing) - promote_superclass_pred :: DPred -> PrM DPred- promote_superclass_pred = go- where- go (DForallPr {}) = fail "Cannot promote quantified constraints"- go (DAppPr pr ty) = DAppPr <$> go pr <*> promoteType ty- go (DSigPr pr _k) = go pr -- just ignore the kind; it can't matter- go (DVarPr name) = fail $ "Cannot promote ConstraintKinds variables like "- ++ show name- go (DConPr name) = return $ DConPr (promoteClassName name)- go DWildCardPr = return DWildCardPr- -- returns (unpromoted method name, ALetDecRHS) pairs-promoteInstanceDec :: Map Name DType -> UInstDecl -> PrM AInstDecl+promoteInstanceDec :: OMap Name DType -> UInstDecl -> PrM AInstDecl promoteInstanceDec orig_meth_sigs decl@(InstDecl { id_name = cls_name , id_arg_tys = inst_tys@@ -372,8 +360,8 @@ forallBind kvs_to_bind $ do let subst = Map.fromList $ zip cls_tvb_names inst_kis (meths', ann_rhss, _) <- mapAndUnzip3M (promoteMethod inst_sigs (Just subst) orig_meth_sigs) meths- emitDecs [DInstanceD Nothing [] (foldType (DConT pClsName)- inst_kis) meths']+ emitDecs [DInstanceD Nothing Nothing [] (foldType (DConT pClsName)+ inst_kis) meths'] return (decl { id_meths = zip (map fst meths) ann_rhss }) where pClsName = promoteClassName cls_name@@ -430,19 +418,16 @@ that's in the type namespace) and _then_ reifies it. -} -promoteMethod :: Map Name DType -- InstanceSigs for methods+promoteMethod :: OMap Name DType -- InstanceSigs for methods -> Maybe (Map Name DKind) -- ^ instantiations for class tyvars (Nothing for default decls) -- See Note [Promoted class method kinds]- -> Map Name DType -- method types+ -> OMap Name DType -- method types -> (Name, ULetDecRHS) -> PrM (DDec, ALetDecRHS, DType) -- returns (type instance, ALetDecRHS, promoted RHS) promoteMethod inst_sigs_map m_subst orig_sigs_map (meth_name, meth_rhs) = do (meth_arg_kis, meth_res_ki) <- lookup_meth_ty- ((_, _, _, eqns), _defuns, ann_rhs)- <- promoteLetDecRHS (Just (meth_arg_kis, meth_res_ki)) Map.empty Map.empty- noPrefix meth_name meth_rhs meth_arg_tvs <- mapM (const $ qNewName "a") meth_arg_kis let helperNameBase = case nameBase proName of first:_ | not (isHsLetter first) -> "TFHelper"@@ -462,17 +447,21 @@ -- strictly necessary, as kind inference can figure them out just as well. family_args = map DVarT meth_arg_tvs helperName <- newUniqueName helperNameBase+ let proHelperName = promoteValNameLhs helperName+ ((_, _, _, eqns), _defuns, ann_rhs)+ <- promoteLetDecRHS (Just (meth_arg_kis, meth_res_ki)) OMap.empty OMap.empty+ noPrefix helperName meth_rhs let tvbs = zipWith DKindedTV meth_arg_tvs meth_arg_kis emitDecs [DClosedTypeFamilyD (DTypeFamilyHead- helperName+ proHelperName tvbs (DKindSig meth_res_ki) Nothing) eqns]- emitDecsM (defunctionalize helperName Nothing tvbs (Just meth_res_ki))+ emitDecsM (defunctionalize proHelperName Nothing tvbs (Just meth_res_ki)) return ( DTySynInstD- proName- (DTySynEqn family_args+ (DTySynEqn Nothing+ (foldType (DConT proName) family_args) (foldApply (promoteValRhs helperName) (map DVarT meth_arg_tvs))) , ann_rhs , DConT (promoteTySym helperName 0) )@@ -481,7 +470,7 @@ lookup_meth_ty :: PrM ([DKind], DKind) lookup_meth_ty =- case Map.lookup meth_name inst_sigs_map of+ case OMap.lookup meth_name inst_sigs_map of Just ty -> -- We have an InstanceSig. These are easy: no substitution for clas -- variables is required at all!@@ -490,7 +479,7 @@ -- We don't have an InstanceSig, so we must compute the kind to use -- ourselves (possibly substituting for class variables below). (arg_kis, res_ki) <-- case Map.lookup meth_name orig_sigs_map of+ case OMap.lookup meth_name orig_sigs_map of Nothing -> do mb_info <- dsReifyTypeNameInfo proName -- See Note [Using dsReifyTypeNameInfo when promoting instances]@@ -551,10 +540,10 @@ , lde_types = type_env , lde_infix = fix_env }) = do let infix_decls = catMaybes $ map (uncurry promoteInfixDecl)- $ Map.toList fix_env+ $ OMap.assocs fix_env -- promote all the declarations, producing annotated declarations- let (names, rhss) = unzip $ Map.toList value_env+ let (names, rhss) = unzip $ OMap.assocs value_env (payloads, defun_decss, ann_rhss) <- fmap unzip3 $ zipWithM (promoteLetDecRHS Nothing type_env fix_env prefixes) names rhss @@ -563,11 +552,11 @@ let decs = map payload_to_dec payloads ++ infix_decls -- build the ALetDecEnv- let let_dec_env' = LetDecEnv { lde_defns = Map.fromList $ zip names ann_rhss+ let let_dec_env' = LetDecEnv { lde_defns = OMap.fromList $ zip names ann_rhss , lde_types = type_env , lde_infix = fix_env- , lde_proms = Map.empty -- filled in promoteLetDecs- , lde_bound_kvs = Map.fromList $ map (, bound_kvs) names }+ , lde_proms = OMap.empty -- filled in promoteLetDecs+ , lde_bound_kvs = OMap.fromList $ map (, bound_kvs) names } return (decs, let_dec_env') where@@ -583,11 +572,8 @@ -- If a name and its promoted counterpart are the same (modulo module -- prefixes), then there's no need to promote a fixity declaration for -- that name, since the existing fixity declaration will cover both- -- the term- and type-level versions of that name,- --- -- Names that fall into this category include data constructor names- -- and infix names, with the exceptions of (.) and (!).- -- See Note [Special cases for (.) and (!)] in Data.Singletons.Names.+ -- the term- and type-level versions of that name. Names that fall into this+ -- category include data constructor names and infix names. = Nothing | otherwise = Just $ DLetDec $ DInfixD fixity promoted_name@@ -599,8 +585,8 @@ -- an intermediate structure. Perhaps a better design is available. promoteLetDecRHS :: Maybe ([DKind], DKind) -- the promoted type of the RHS (if known) -- needed to fix #136- -> Map Name DType -- local type env't- -> Map Name Fixity -- local fixity env't+ -> OMap Name DType -- local type env't+ -> OMap Name Fixity -- local fixity env't -> (String, String) -- let-binding prefixes -> Name -- name of the thing being promoted -> ULetDecRHS -- body of the thing@@ -612,7 +598,7 @@ <- case m_rhs_ki of Just (arg_kis, res_ki) -> return ( Just (ravelTyFun (arg_kis ++ [res_ki])) , length arg_kis )- _ | Just ty <- Map.lookup name type_env+ _ | Just ty <- OMap.lookup name type_env -> do ki <- promoteType ty return (Just ki, countArgs ty) | otherwise@@ -623,18 +609,18 @@ let lde_kvs_to_bind = foldMap fvDType res_kind (exp', ann_exp) <- forallBind lde_kvs_to_bind $ promoteExp exp let proName = promoteValNameLhsPrefix prefixes name- m_fixity = Map.lookup name fix_env+ m_fixity = OMap.lookup name fix_env tvbs = map DPlainTV all_locals defuns <- defunctionalize proName m_fixity tvbs res_kind return ( ( proName, tvbs, res_kind- , [DTySynEqn (map DVarT all_locals) exp'] )+ , [DTySynEqn Nothing (foldType (DConT proName) $ map DVarT all_locals) exp'] ) , defuns , AValue (foldType (DConT proName) (map DVarT all_locals)) num_arrows ann_exp ) _ -> do names <- replicateM num_arrows (newUniqueName "a")- let pats = map DVarPa names- newArgs = map DVarE names+ let pats = map DVarP names+ newArgs = map DVarE names promoteLetDecRHS m_rhs_ki type_env fix_env prefixes name (UFunction [DClause pats (foldExp exp newArgs)]) @@ -642,7 +628,7 @@ numArgs <- count_args clauses (m_argKs, m_resK, ty_num_args) <- case m_rhs_ki of Just (arg_kis, res_ki) -> return (map Just arg_kis, Just res_ki, length arg_kis)- _ | Just ty <- Map.lookup name type_env+ _ | Just ty <- OMap.lookup name type_env -> do -- promoteType turns arrows into TyFun. So, we unravel first to -- avoid this behavior. Note the use of ravelTyFun in resultK@@ -654,7 +640,7 @@ | otherwise -> return (replicate numArgs Nothing, Nothing, numArgs) let proName = promoteValNameLhsPrefix prefixes name- m_fixity = Map.lookup name fix_env+ m_fixity = OMap.lookup name fix_env all_locals <- allLocals let local_tvbs = map DPlainTV all_locals tyvarNames <- mapM (const $ qNewName "a") m_argKs@@ -664,7 +650,7 @@ expClauses <- mapM (etaContractOrExpand ty_num_args numArgs) clauses let lde_kvs_to_bind = foldMap (foldMap fvDType) m_argKs <> foldMap fvDType m_resK (eqns, ann_clauses) <- forallBind lde_kvs_to_bind $- mapAndUnzipM promoteClause expClauses+ mapAndUnzipM (promoteClause proName) expClauses prom_fun <- lookupVarE name return ( (proName, all_args, m_resK, eqns) , defun_decs@@ -675,8 +661,8 @@ etaContractOrExpand ty_num_args clause_num_args (DClause pats exp) | n >= 0 = do -- Eta-expand names <- replicateM n (newUniqueName "a")- let newPats = map DVarPa names- newArgs = map DVarE names+ let newPats = map DVarP names+ newArgs = map DVarE names return $ DClause (pats ++ newPats) (foldExp exp newArgs) | otherwise = do -- Eta-contract let (clausePats, lamPats) = splitAt ty_num_args pats@@ -688,8 +674,8 @@ count_args (DClause pats _ : _) = return $ length pats count_args _ = fail $ "Impossible! A function without clauses." -promoteClause :: DClause -> PrM (DTySynEqn, ADClause)-promoteClause (DClause pats exp) = do+promoteClause :: Name -> DClause -> PrM (DTySynEqn, ADClause)+promoteClause proName (DClause pats exp) = do -- promoting the patterns creates variable bindings. These are passed -- to the function promoted the RHS ((types, pats'), prom_pat_infos) <- evalForPair $ mapAndUnzipM promotePat pats@@ -699,11 +685,11 @@ lambdaBind new_vars $ promoteExp exp all_locals <- allLocals -- these are bound *outside* of this clause- return ( DTySynEqn (map DVarT all_locals ++ types) ty+ return ( DTySynEqn Nothing (foldType (DConT proName) $ map DVarT all_locals ++ types) ty , ADClause new_vars pats' ann_exp ) -promoteMatch :: DMatch -> PrM (DTySynEqn, ADMatch)-promoteMatch (DMatch pat exp) = do+promoteMatch :: Name -> DMatch -> PrM (DTySynEqn, ADMatch)+promoteMatch caseTFName (DMatch pat exp) = do -- promoting the patterns creates variable bindings. These are passed -- to the function promoted the RHS ((ty, pat'), prom_pat_infos) <- evalForPair $ promotePat pat@@ -713,32 +699,34 @@ lambdaBind new_vars $ promoteExp exp all_locals <- allLocals- return $ ( DTySynEqn (map DVarT all_locals ++ [ty]) rhs+ return $ ( DTySynEqn Nothing+ (foldType (DConT caseTFName) $ map DVarT all_locals ++ [ty])+ rhs , ADMatch new_vars pat' ann_exp) -- promotes a term pattern into a type pattern, accumulating bound variable names promotePat :: DPat -> QWithAux PromDPatInfos PrM (DType, ADPat)-promotePat (DLitPa lit) = (, ADLitPa lit) <$> promoteLitPat lit-promotePat (DVarPa name) = do+promotePat (DLitP lit) = (, ADLitP lit) <$> promoteLitPat lit+promotePat (DVarP name) = do -- term vars can be symbols... type vars can't! tyName <- mkTyName name- tell $ PromDPatInfos [(name, tyName)] Set.empty- return (DVarT tyName, ADVarPa name)-promotePat (DConPa name pats) = do+ tell $ PromDPatInfos [(name, tyName)] OSet.empty+ return (DVarT tyName, ADVarP name)+promotePat (DConP name pats) = do (types, pats') <- mapAndUnzipM promotePat pats let name' = unboxed_tuple_to_tuple name- return (foldType (DConT name') types, ADConPa name pats')+ return (foldType (DConT name') types, ADConP name pats') where unboxed_tuple_to_tuple n | Just deg <- unboxedTupleNameDegree_maybe n = tupleDataName deg | otherwise = n-promotePat (DTildePa pat) = do+promotePat (DTildeP pat) = do qReportWarning "Lazy pattern converted into regular pattern in promotion"- second ADTildePa <$> promotePat pat-promotePat (DBangPa pat) = do+ second ADTildeP <$> promotePat pat+promotePat (DBangP pat) = do qReportWarning "Strict pattern converted into regular pattern in promotion"- second ADBangPa <$> promotePat pat-promotePat (DSigPa pat ty) = do+ second ADBangP <$> promotePat pat+promotePat (DSigP pat ty) = do -- We must maintain the invariant that any promoted pattern signature must -- not have any wildcards in the underlying pattern. -- See Note [Singling pattern signatures].@@ -746,8 +734,8 @@ (promoted, pat') <- promotePat wildless_pat ki <- promoteType ty tell $ PromDPatInfos [] (fvDType ki)- return (DSigT promoted ki, ADSigPa promoted pat' ki)-promotePat DWildPa = return (DWildCardT, ADWildPa)+ return (DSigT promoted ki, ADSigP promoted pat' ki)+promotePat DWildP = return (DWildCardT, ADWildP) promoteExp :: DExp -> PrM (DType, ADExp) promoteExp (DVarE name) = fmap (, ADVarE name) $ lookupVarE name@@ -775,7 +763,9 @@ tvbs DNoSig Nothing)- [DTySynEqn (map DVarT (all_locals ++ tyNames))+ [DTySynEqn Nothing+ (foldType (DConT lambdaName) $+ map DVarT (all_locals ++ tyNames)) rhs]] emitDecsM $ defunctionalize lambdaName Nothing tvbs Nothing let promLambda = foldl apply (DConT (promoteTySym lambdaName 0))@@ -786,7 +776,7 @@ all_locals <- allLocals let prom_case = foldType (DConT caseTFName) (map DVarT all_locals) (exp', ann_exp) <- promoteExp exp- (eqns, ann_matches) <- mapAndUnzipM promoteMatch matches+ (eqns, ann_matches) <- mapAndUnzipM (promoteMatch caseTFName) matches tyvarName <- qNewName "t" let all_args = all_locals ++ [tyvarName] tvbs = map DPlainTV all_args@@ -804,7 +794,7 @@ promoteExp (DSigE exp ty) = do (exp', ann_exp) <- promoteExp exp ty' <- promoteType ty- return (DSigT exp' ty', ADSigE exp' ann_exp ty)+ return (DSigT exp' ty', ADSigE exp' ann_exp ty') promoteExp e@(DStaticE _) = fail ("Static expressions cannot be promoted: " ++ show e) promoteLitExp :: Quasi q => Lit -> q DType@@ -821,7 +811,7 @@ promoteLitExp lit = fail ("Only string and natural number literals can be promoted: " ++ show lit) -promoteLitPat :: Monad m => Lit -> m DType+promoteLitPat :: MonadFail m => Lit -> m DType promoteLitPat (IntegerL n) | n >= 0 = return $ (DLitT (NumTyLit n)) | otherwise =
src/Data/Singletons/Promote/Defun.hs view
@@ -11,6 +11,7 @@ module Data.Singletons.Promote.Defun where import Language.Haskell.TH.Desugar+import qualified Language.Haskell.TH.Desugar.OSet as OSet import Data.Singletons.Promote.Monad import Data.Singletons.Promote.Type import Data.Singletons.Names@@ -18,10 +19,10 @@ import Data.Singletons.Syntax import Data.Singletons.Util import Control.Monad+import Data.Foldable import qualified Data.Map.Strict as Map import Data.Map.Strict (Map) import Data.Maybe-import qualified Data.Set as Set defunInfo :: DInfo -> PrM [DDec] defunInfo (DTyConI dec _instances) = buildDefunSyms dec@@ -41,7 +42,7 @@ -> PrM () defunTypeDecls ty_syns c_tyfams o_tyfams = do defun_ty_syns <-- concatMapM (\(TySynDecl name tvbs) -> buildDefunSymsTySynD name tvbs) ty_syns+ concatMapM (\(TySynDecl name tvbs rhs) -> buildDefunSymsTySynD name tvbs rhs) ty_syns defun_c_tyfams <- concatMapM (buildDefunSymsClosedTypeFamilyD . getTypeFamilyDecl) c_tyfams defun_o_tyfams <-@@ -55,8 +56,8 @@ buildDefunSymsClosedTypeFamilyD tf_head buildDefunSyms (DOpenTypeFamilyD tf_head) = buildDefunSymsOpenTypeFamilyD tf_head-buildDefunSyms (DTySynD name tvbs _type) =- buildDefunSymsTySynD name tvbs+buildDefunSyms (DTySynD name tvbs rhs) =+ buildDefunSymsTySynD name tvbs rhs buildDefunSyms (DClassD _cxt name tvbs _fundeps _members) = do defunReifyFixity name tvbs (Just (DConT constraintName)) buildDefunSyms _ = fail $ "Defunctionalization symbols can only be built for " ++@@ -82,9 +83,18 @@ res_kind = default_kind (resultSigToMaybeKind result_sig) defunReifyFixity name arg_tvbs res_kind -buildDefunSymsTySynD :: Name -> [DTyVarBndr] -> PrM [DDec]-buildDefunSymsTySynD name tvbs =- defunReifyFixity name tvbs Nothing+buildDefunSymsTySynD :: Name -> [DTyVarBndr] -> DType -> PrM [DDec]+buildDefunSymsTySynD name tvbs rhs =+ defunReifyFixity name tvbs mb_res_kind+ where+ -- In order to have a CUSK, a type synonym must annotate its right-hand+ -- side with an explicit kind signature, so we can make use of this+ -- property to determine the result kind when defunctionalizing the+ -- type synonym.+ mb_res_kind :: Maybe DKind+ mb_res_kind = case rhs of+ DSigT _ k -> Just k+ _ -> Nothing buildDefunSymsDataD :: [DCon] -> PrM [DDec] buildDefunSymsDataD ctors =@@ -173,10 +183,9 @@ -- Note [Defunctionalization and dependent quantification] map (map_tvb_kind (substType tvb_to_type_map)) $ reverse m_args- tyfun_param = mk_tvb tyfun_name m_tyfun arg_names = map extractTvbName arg_params- params = arg_params ++ [tyfun_param]- con_eq_ct = DConPr sameKindName `DAppPr` lhs `DAppPr` rhs+ params = arg_params ++ [DPlainTV tyfun_name]+ con_eq_ct = DConT sameKindName `DAppT` lhs `DAppT` rhs where lhs = foldType (DConT data_name) (map DVarT arg_names) `apply` (DVarT extra_name) rhs = foldType (DConT next_name) (map DVarT (arg_names ++ [extra_name]))@@ -193,23 +202,26 @@ -- If we cannot infer the return type, don't bother -- trying to construct an explicit return kind. Just tyfun ->- let bound_tvs = Set.fromList (map extractTvbName arg_params) `Set.union`- foldMap (foldMap fvDType) (map extractTvbKind arg_params)- not_bound tvb = not (extractTvbName tvb `Set.member` bound_tvs)+ let bound_tvs = OSet.fromList (map extractTvbName arg_params)+ `OSet.union` foldMap (foldMap fvDType)+ (map extractTvbKind arg_params)+ not_bound tvb = not (extractTvbName tvb `OSet.member` bound_tvs) tvb_to_type tvb_name = fromMaybe (DVarT tvb_name) $ Map.lookup tvb_name tvb_to_type_map -- Implements part (2)(iii) from -- Note [Defunctionalization and dependent quantification]- tyfun_tvbs = filter not_bound $ -- (2)(iii)(d)- toposortTyVarsOf $ -- (2)(iii)(c)- map tvb_to_type $ -- (2)(iii)(b)- Set.toList $ fvDType tyfun -- (2)(iii)(a)+ tyfun_tvbs = filter not_bound $ -- (2)(iii)(d)+ toposortTyVarsOf $ -- (2)(iii)(c)+ map tvb_to_type $ -- (2)(iii)(b)+ toList $ fvDType tyfun -- (2)(iii)(a) in (arg_params, Just (DForallT tyfun_tvbs [] tyfun)) app_data_ty = foldTypeTvbs (DConT data_name) m_args- app_eqn = DTySynEqn [app_data_ty, DVarT tyfun_name]+ app_eqn = DTySynEqn Nothing+ (DConT applyName `DAppT` app_data_ty+ `DAppT` DVarT tyfun_name) (mk_rhs (m_args ++ [DPlainTV tyfun_name]))- app_decl = DTySynInstD applyName app_eqn- suppress = DInstanceD Nothing []+ app_decl = DTySynInstD app_eqn+ suppress = DInstanceD Nothing Nothing [] (DConT suppressClassName `DAppT` app_data_ty) [DLetDec $ DFunD suppressMethodName [DClause []@@ -234,10 +246,6 @@ other_decs <- go (num_args - 1) (reverse m_arg_tvbs) m_res_kind mk_rhs return $ sat_dec : other_decs where- mk_tvb :: Name -> Maybe DKind -> DTyVarBndr- mk_tvb tvb_name Nothing = DPlainTV tvb_name- mk_tvb tvb_name (Just k) = DKindedTV tvb_name k- eta_expand :: [DTyVarBndr] -> Maybe DKind -> PrM ([DTyVarBndr], Maybe DKind) eta_expand m_arg_tvbs Nothing = pure (m_arg_tvbs, Nothing) eta_expand m_arg_tvbs (Just res_kind) = do
src/Data/Singletons/Promote/Eq.hs view
@@ -22,9 +22,9 @@ helperName <- newUniqueName "Equals" aName <- qNewName "a" bName <- qNewName "b"- true_branches <- mapM mk_branch cons- let null_branch = catch_all_case trueName- false_branch = catch_all_case falseName+ true_branches <- mapM (mk_branch helperName) cons+ let null_branch = catch_all_case helperName trueName+ false_branch = catch_all_case helperName falseName branches | null cons = [null_branch] | otherwise = true_branches ++ [false_branch] closedFam = DClosedTypeFamilyD (DTypeFamilyHead helperName@@ -37,16 +37,17 @@ (DKindSig boolKi) Nothing) branches- eqInst = DTySynInstD tyEqName (DTySynEqn [DVarT aName, DVarT bName]- (foldType (DConT helperName)- [DVarT aName, DVarT bName]))- inst = DInstanceD Nothing [] ((DConT $ promoteClassName eqName) `DAppT`- kind) [eqInst]+ eqInst = DTySynInstD $+ DTySynEqn Nothing+ (DConT tyEqName `DAppT` DVarT aName `DAppT` DVarT bName)+ (foldType (DConT helperName) [DVarT aName, DVarT bName])+ inst = DInstanceD Nothing Nothing [] ((DConT $ promoteClassName eqName) `DAppT`+ kind) [eqInst] return [closedFam, inst] - where mk_branch :: Quasi q => DCon -> q DTySynEqn- mk_branch con = do+ where mk_branch :: Quasi q => Name -> DCon -> q DTySynEqn+ mk_branch helper_name con = do let (name, numArgs) = extractNameArgs con lnames <- replicateM numArgs (qNewName "a") rnames <- replicateM numArgs (qNewName "b")@@ -56,11 +57,16 @@ rtype = foldType (DConT name) rvars results = zipWith (\l r -> foldType (DConT tyEqName) [l, r]) lvars rvars result = tyAll results- return $ DTySynEqn [ltype, rtype] result+ return $ DTySynEqn Nothing+ (DConT helper_name `DAppT` ltype `DAppT` rtype)+ result - catch_all_case :: Name -> DTySynEqn- catch_all_case returned_val_name =- DTySynEqn [DSigT DWildCardT kind, DSigT DWildCardT kind]+ catch_all_case :: Name -> Name -> DTySynEqn+ catch_all_case helper_name returned_val_name =+ DTySynEqn Nothing+ (DConT helper_name+ `DAppT` DSigT DWildCardT kind+ `DAppT` DSigT DWildCardT kind) (promoteValRhs returned_val_name) tyAll :: [DType] -> DType -- "all" at the type level
src/Data/Singletons/Promote/Monad.hs view
@@ -9,8 +9,8 @@ of DDec, and is wrapped around a Q. -} -{-# LANGUAGE GeneralizedNewtypeDeriving, StandaloneDeriving,- FlexibleContexts, TypeFamilies, KindSignatures #-}+{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleContexts,+ TypeFamilies, KindSignatures #-} module Data.Singletons.Promote.Monad ( PrM, promoteM, promoteM_, promoteMDecs, VarPromotions,@@ -20,30 +20,29 @@ import Control.Monad.Reader import Control.Monad.Writer-import qualified Data.Map.Strict as Map-import Data.Map.Strict ( Map )-import qualified Data.Set as Set-import Data.Set ( Set ) import Language.Haskell.TH.Syntax hiding ( lift ) import Language.Haskell.TH.Desugar+import qualified Language.Haskell.TH.Desugar.OMap.Strict as OMap+import Language.Haskell.TH.Desugar.OMap.Strict (OMap)+import qualified Language.Haskell.TH.Desugar.OSet as OSet+import Language.Haskell.TH.Desugar.OSet (OSet) import Data.Singletons.Names import Data.Singletons.Syntax-import Control.Monad.Fail ( MonadFail ) -type LetExpansions = Map Name DType -- from **term-level** name+type LetExpansions = OMap Name DType -- from **term-level** name -- environment during promotion data PrEnv =- PrEnv { pr_lambda_bound :: Map Name Name+ PrEnv { pr_lambda_bound :: OMap Name Name , pr_let_bound :: LetExpansions- , pr_forall_bound :: Set Name -- See Note [Explicitly quantifying kinds variables]+ , pr_forall_bound :: OSet Name -- See Note [Explicitly quantifying kinds variables] , pr_local_decls :: [Dec] } emptyPrEnv :: PrEnv-emptyPrEnv = PrEnv { pr_lambda_bound = Map.empty- , pr_let_bound = Map.empty- , pr_forall_bound = Set.empty+emptyPrEnv = PrEnv { pr_lambda_bound = OMap.empty+ , pr_let_bound = OMap.empty+ , pr_forall_bound = OSet.empty , pr_local_decls = [] } -- the promotion monad@@ -58,12 +57,12 @@ -- return *type-level* names allLocals :: MonadReader PrEnv m => m [Name] allLocals = do- lambdas <- asks (Map.toList . pr_lambda_bound)+ lambdas <- asks (OMap.assocs . pr_lambda_bound) lets <- asks pr_let_bound -- filter out shadowed variables! return [ typeName | (termName, typeName) <- lambdas- , case Map.lookup termName lets of+ , case OMap.lookup termName lets of Just (DVarT typeName') | typeName' == typeName -> True _ -> False ] @@ -81,33 +80,33 @@ lambdaBind binds = local add_binds where add_binds env@(PrEnv { pr_lambda_bound = lambdas , pr_let_bound = lets }) =- let new_lets = Map.fromList [ (tmN, DVarT tyN) | (tmN, tyN) <- binds ] in- env { pr_lambda_bound = Map.union (Map.fromList binds) lambdas- , pr_let_bound = Map.union new_lets lets }+ let new_lets = OMap.fromList [ (tmN, DVarT tyN) | (tmN, tyN) <- binds ] in+ env { pr_lambda_bound = OMap.fromList binds `OMap.union` lambdas+ , pr_let_bound = new_lets `OMap.union` lets } type LetBind = (Name, DType) letBind :: [LetBind] -> PrM a -> PrM a letBind binds = local add_binds where add_binds env@(PrEnv { pr_let_bound = lets }) =- env { pr_let_bound = Map.union (Map.fromList binds) lets }+ env { pr_let_bound = OMap.fromList binds `OMap.union` lets } lookupVarE :: Name -> PrM DType lookupVarE n = do lets <- asks pr_let_bound- case Map.lookup n lets of+ case OMap.lookup n lets of Just ty -> return ty Nothing -> return $ promoteValRhs n -- Add to the set of bound kind variables currently in scope. -- See Note [Explicitly binding kind variables]-forallBind :: Set Name -> PrM a -> PrM a+forallBind :: OSet Name -> PrM a -> PrM a forallBind kvs1 = local (\env@(PrEnv { pr_forall_bound = kvs2 }) ->- env { pr_forall_bound = kvs1 `Set.union` kvs2 })+ env { pr_forall_bound = kvs1 `OSet.union` kvs2 }) -- Look up the set of bound kind variables currently in scope. -- See Note [Explicitly binding kind variables]-allBoundKindVars :: PrM (Set Name)+allBoundKindVars :: PrM (OSet Name) allBoundKindVars = asks pr_forall_bound promoteM :: DsMonad q => [Dec] -> PrM a -> q (a, [DDec])
src/Data/Singletons/Promote/Type.hs view
@@ -6,19 +6,20 @@ This file implements promotion of types into kinds. -} -module Data.Singletons.Promote.Type ( promoteType, promoteUnraveled ) where+module Data.Singletons.Promote.Type+ ( promoteType, promoteTypeArg, promoteUnraveled+ ) where import Language.Haskell.TH.Desugar import Data.Singletons.Names-import Data.Singletons.Util import Language.Haskell.TH -- the only monadic thing we do here is fail. This allows the function -- to be used from the Singletons module-promoteType :: Monad m => DType -> m DKind+promoteType :: MonadFail m => DType -> m DKind promoteType = go [] where- go :: Monad m => [DKind] -> DType -> m DKind+ go :: MonadFail m => [DTypeArg] -> DType -> m DKind -- We don't need to worry about constraints: they are used to express -- static guarantees at runtime. But, because we don't need to do -- anything special to keep static guarantees at compile time, we don't@@ -28,34 +29,42 @@ fail "Cannot promote types of rank above 1." go args (DAppT t1 t2) = do k2 <- go [] t2- go (k2 : args) t1+ go (DTANormal k2 : args) t1 -- NB: This next case means that promoting something like -- (((->) a) :: Type -> Type) b -- will fail because the pattern below won't recognize the -- arrow to turn it into a TyFun. But I'm not terribly -- bothered by this, and it would be annoying to fix. Wait -- for someone to report.+ go args (DAppKindT ty ki) = do+ ki' <- go [] ki+ go (DTyArg ki' : args) ty go args (DSigT ty ki) = do ty' <- go [] ty -- No need to promote 'ki' - it is already a kind.- return $ foldType (DSigT ty' ki) args- go args (DVarT name) = return $ foldType (DVarT name) args+ return $ applyDType (DSigT ty' ki) args+ go args (DVarT name) = return $ applyDType (DVarT name) args go [] (DConT name) | name == typeRepName = return $ DConT typeKindName | nameBase name == nameBase repName = return $ DConT typeKindName go args (DConT name) | Just n <- unboxedTupleNameDegree_maybe name- = return $ foldType (DConT (tupleTypeName n)) args+ = return $ applyDType (DConT (tupleTypeName n)) args | otherwise- = return $ foldType (DConT name) args- go [k1, k2] DArrowT = return $ DConT tyFunArrowName `DAppT` k1 `DAppT` k2+ = return $ applyDType (DConT name) args+ go [DTANormal k1, DTANormal k2] DArrowT+ = return $ DConT tyFunArrowName `DAppT` k1 `DAppT` k2 go _ ty@DLitT{} = pure ty go args hd = fail $ "Illegal Haskell construct encountered:\n" ++ "headed by: " ++ show hd ++ "\n" ++ "applied to: " ++ show args -promoteUnraveled :: Monad m => DType -> m ([DKind], DKind)+promoteTypeArg :: MonadFail m => DTypeArg -> m DTypeArg+promoteTypeArg (DTANormal t) = DTANormal <$> promoteType t+promoteTypeArg ta@(DTyArg _) = pure ta -- Kinds are already promoted++promoteUnraveled :: MonadFail m => DType -> m ([DKind], DKind) promoteUnraveled ty = do arg_kis <- mapM promoteType arg_tys res_ki <- promoteType res_ty
src/Data/Singletons/ShowSing.hs view
@@ -1,11 +1,12 @@-{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-}+{-# LANGUAGE EmptyCase #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE QuantifiedConstraints #-} {-# LANGUAGE RankNTypes #-}-{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-}@@ -26,7 +27,10 @@ module Data.Singletons.ShowSing ( -- * The 'ShowSing' type- ShowSing+ ShowSing,++ -- * Internal utilities+ ShowSing' ) where import Data.Singletons.Internal@@ -48,35 +52,50 @@ -- an instance with the following shape: -- -- @--- deriving instance ??? => Show (Sing (x :: [k]))+-- instance ??? => 'Show' ('SList' (z :: [k])) where+-- showsPrec p 'SNil' = showString \"SNil\"+-- showsPrec p ('SCons' sx sxs) =+-- showParen (p > 10) $ showString \"SCons \" . showsPrec 11 sx+-- . showSpace . showsPrec 11 sxs -- @ -- -- To figure out what should go in place of @???@, observe that we require the -- type of each field to also be 'Show' instances. In other words, we need--- something like @(Show (Sing (a :: k)))@. But this isn't quite right, as the+-- something like @('Show' ('Sing' (a :: k)))@. But this isn't quite right, as the -- type variable @a@ doesn't appear in the instance head. In fact, this @a@ -- type is really referring to an existentially quantified type variable in the -- 'SCons' constructor, so it doesn't make sense to try and use it like this. -- -- Luckily, the @QuantifiedConstraints@ language extension provides a solution -- to this problem. This lets you write a context of the form--- @(forall a. Show (Sing (a :: k)))@, which demands that there be an instance--- for @Show (Sing (a :: k))@ that is parametric in the use of @a@. Thus, our--- final instance looks like:+-- @(forall a. 'Show' ('Sing' (a :: k)))@, which demands that there be an instance+-- for @'Show' ('Sing' (a :: k))@ that is parametric in the use of @a@.+-- This lets us write something closer to this: -- -- @--- deriving instance (forall a. Show (Sing (a :: k))) => Show (Sing (x :: [k]))+-- instance (forall a. 'Show' ('Sing' (a :: k))) => 'SList' ('Sing' (z :: [k])) where ... -- @ ----- Because that quantified constraint is somewhat lengthy, we provide the--- 'ShowSing' class synonym as a convenient shorthand. Thus, the above instance--- is equivalent to:+-- The 'ShowSing' class is a thin wrapper around+-- @(forall a. 'Show' ('Sing' (a :: k)))@. With 'ShowSing', our final instance+-- declaration becomes this: -- -- @--- deriving instance ShowSing k => Show (Sing (x :: [k]))+-- instance 'ShowSing' k => 'Show' ('SList' (z :: [k])) where+-- showsPrec p 'SNil' = showString \"SNil\"+-- showsPrec p ('SCons' (sx :: 'Sing' x) (sxs :: 'Sing' xs)) =+-- (showParen (p > 10) $ showString \"SCons \" . showsPrec 11 sx+-- . showSpace . showsPrec 11 sxs)+-- :: (ShowSing' x, ShowSing' xs) => ShowS -- @ ----- When singling a derived 'Show' instance, @singletons@ will also derive+-- (Note that the actual definition of 'ShowSing' is slightly more complicated+-- than what this documentation might suggest. For the full story, as well as+-- an explanation of why we need an explicit+-- @(ShowSing' x, ShowSing' xs) => ShowS@ signature at the end,+-- refer to the documentation for `ShowSing'`.)+--+-- When singling a derived 'Show' instance, @singletons@ will also generate -- a 'Show' instance for the corresponding singleton type using 'ShowSing'. -- In other words, if you give @singletons@ a derived 'Show' instance, then -- you'll receive the following in return:@@ -86,21 +105,106 @@ -- * A 'Show' instance for the singleton type -- -- What a bargain!-class (forall (z :: k). Show (Sing z)) => ShowSing k-instance (forall (z :: k). Show (Sing z)) => ShowSing k +-- One might wonder we we simply don't define ShowSing as+-- @type ShowSing k = (forall (z :: k). ShowSing' z)@ instead of going the+-- extra mile to define it as a class.+-- See Note [Define ShowSing as a class, not a type synonym] for an explanation.+class (forall (z :: k). ShowSing' z) => ShowSing k+instance (forall (z :: k). ShowSing' z) => ShowSing k++-- | The workhorse that powers 'ShowSing'. The only reason that `ShowSing'`+-- exists is to work around GHC's inability to put type families in the head+-- of a quantified constraint (see+-- <https://gitlab.haskell.org/ghc/ghc/issues/14860 this GHC issue> for more+-- details on this point). In other words, GHC will not let you define+-- 'ShowSing' like so:+--+-- @+-- class (forall (z :: k). 'Show' ('Sing' z)) => 'ShowSing' k+-- @+--+-- By replacing @'Show' ('Sing' z)@ with @ShowSing' z@, we are able to avoid+-- this restriction for the most part. There is one major downside to using+-- @ShowSing'@, however: deriving 'Show' instances for singleton types does+-- not work out of the box. In other words, if you try to do this:+--+-- @+-- deriving instance 'ShowSing' k => 'Show' ('SList' (z :: [k]))+-- @+--+-- Then GHC will complain to the effect that it could not deduce a+-- @'Show' ('Sing' x)@ constraint. This is due to+-- <https://gitlab.haskell.org/ghc/ghc/issues/16365 another unfortunate GHC bug>+-- that prevents GHC from realizing that @'ShowSing' k@ implies+-- @'Show' ('Sing' (x :: k))@. The workaround is to force GHC to come to its+-- senses by using an explicit type signature:+--+-- @+-- instance 'ShowSing' k => 'Show' ('SList' (z :: [k])) where+-- showsPrec p 'SNil' = showString \"SNil\"+-- showsPrec p ('SCons' (sx :: 'Sing' x) (sxs :: 'Sing' xs)) =+-- (showParen (p > 10) $ showString \"SCons \" . showsPrec 11 sx+-- . showSpace . showsPrec 11 sxs)+-- :: (ShowSing' x, ShowSing' xs) => ShowS+-- @+--+-- The use of @ShowSing' x@ in the signature is sufficient to make the+-- constraint solver connect the dots between @'ShowSing' k@ and+-- @'Show' ('Sing' (x :: k))@. (The @ShowSing' xs@ constraint is not strictly+-- necessary, but it is shown here since that is in fact the code that+-- @singletons@ will generate for this instance.)+--+-- Because @deriving 'Show'@ will not insert these explicit signatures for us,+-- it is not possible to derive 'Show' instances for singleton types.+-- Thankfully, @singletons@' Template Haskell machinery can do this manual+-- gruntwork for us 99% of the time, but if you ever find yourself in a+-- situation where you must define a 'Show' instance for a singleton type by+-- hand, this is important to keep in mind.+--+-- Note that there is one potential future direction that might alleviate this+-- pain. We could define `ShowSing'` like this instead:+--+-- @+-- class (forall sing. sing ~ 'Sing' => 'Show' (sing z)) => ShowSing' z+-- instance 'Show' ('Sing' z) => ShowSing' z+-- @+--+-- For many examples, this lets you just derive 'Show' instances for singleton+-- types like you would expect. Alas, this topples over on @Bar@ in the+-- following example:+--+-- @+-- newtype Foo a = MkFoo a+-- data SFoo :: forall a. Foo a -> Type where+-- SMkFoo :: Sing x -> SFoo (MkFoo x)+-- type instance Sing = SFoo+-- deriving instance ShowSing a => Show (SFoo (z :: Foo a))+--+-- newtype Bar a = MkBar (Foo a)+-- data SBar :: forall a. Bar a -> Type where+-- SMkBar :: Sing x -> SBar (MkBar x)+-- type instance Sing = SBar+-- deriving instance ShowSing (Foo a) => Show (SBar (z :: Bar a))+-- @+--+-- This fails because+-- of—you guessed it—<https://gitlab.haskell.org/ghc/ghc/issues/16502 another GHC bug>.+-- Bummer. Unless that bug were to be fixed, the current definition of+-- `ShowSing'` is the best that we can do.+class Show (Sing z) => ShowSing' z+instance Show (Sing z) => ShowSing' z+ {- Note [Define ShowSing as a class, not a type synonym] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-In an ideal world, we would simply define ShowSing as an ordinary type synonym,-like this:+In an ideal world, we would simply define ShowSing like this: - type ShowSing k = (forall (z :: k). Show (Sing z) :: Constraint)+ type ShowSing k = (forall (z :: k). ShowSing' z) :: Constraint) -In fact, I used to assume that we lived in an ideal world, so I defined-ShowSing as a type synonym in version 2.5 of this library. However, I realized-some time after 2.5's release that the world is far from ideal, unfortunately,-and that this approach is unfeasible at the time being due to GHC Trac #15888.+In fact, I used to define ShowSing in a manner similar to this in version 2.5+of singletons. However, I realized some time after 2.5's release that the+this encoding is unfeasible at the time being due to GHC Trac #15888. To be more precise, the exact issue involves an infelicity in the way QuantifiedConstraints interacts with recursive type class instances.@@ -130,18 +234,18 @@ To see why this happens, observe what goes on if we expand the occurrences of the ShowSing type synonym in the generated instances: - deriving instance (forall z. Show (Sing (z :: Y a))) => Show (Sing (z :: X a))- deriving instance (forall z. Show (Sing (z :: X a))) => Show (Sing (z :: Y a))+ deriving instance (forall z. ShowSing' (z :: Y a)) => Show (Sing (z :: X a))+ deriving instance (forall z. ShowSing' (z :: X a)) => Show (Sing (z :: Y a)) Due to the way QuantifiedConstraints currently works (as surmised in Trac-#15888), when GHC has a Wanted `Show (Sing X1 :: X Bool)` constraint, it+#15888), when GHC has a Wanted `ShowSing' (X1 :: X Bool)` constraint, it chooses the appropriate instance and emits a Wanted-`forall z. Show (Sing (z :: Y Bool))` constraint (from the instance context).+`forall z. ShowSing' (z :: Y Bool)` constraint (from the instance context). GHC skolemizes the `z` to `z1` and tries to solve a Wanted-`Show (Sing (z1 :: Y Bool))` constraint. GHC chooses the appropriate instance-and emits a Wanted `forall z. Show (Sing (z :: X Bool))` constraint. GHC+`ShowSing' (z1 :: Y Bool)` constraint. GHC chooses the appropriate instance+and emits a Wanted `forall z. ShowSing' (z :: X Bool)` constraint. GHC skolemizes the `z` to `z2` and tries to solve a Wanted-`Show (Sing (z2 :: X Bool))` constraint... we repeat the process and find+`ShowSing' (z2 :: X Bool)` constraint... we repeat the process and find ourselves in an infinite loop that eventually overflows the reduction stack. Eep. @@ -162,6 +266,20 @@ Given the two options, (2) is by far the easier option, so that is what we ultimately went with. -}++------------------------------------------------------------+-- (S)WrappedSing instances+------------------------------------------------------------++instance ShowSing k => Show (WrappedSing (a :: k)) where+ showsPrec p (WrapSing s) = showParen (p >= 11) $+ showString "WrapSing {unwrapSing = " . showsPrec 0 s . showChar '}'+ :: ShowSing' a => ShowS++instance ShowSing k => Show (SWrappedSing (ws :: WrappedSing (a :: k))) where+ showsPrec p (SWrapSing s) = showParen (p >= 11) $+ showString "SWrapSing {sUnwrapSing = " . showsPrec 0 s . showChar '}'+ :: ShowSing' a => ShowS ------------------------------------------------------------ -- TypeLits instances
src/Data/Singletons/Sigma.hs view
@@ -1,13 +1,18 @@ {-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-}+{-# LANGUAGE ImpredicativeTypes #-} -- See Note [Impredicative Σ?]+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PolyKinds #-}+{-# LANGUAGE QuantifiedConstraints #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-} ----------------------------------------------------------------------------- -- |@@ -23,40 +28,96 @@ ---------------------------------------------------------------------------- module Data.Singletons.Sigma- ( Sigma(..), Σ+ ( -- * The 'Sigma' type+ Sigma(..), Σ+ , Sing, SSigma(..), SΣ++ -- * Operations over 'Sigma'+ , fstSigma, FstSigma, sndSigma, SndSigma , projSigma1, projSigma2 , mapSigma, zipSigma+ , currySigma, uncurrySigma - -- * Defunctionalization symbols- , ΣSym0, ΣSym1, ΣSym2+ -- * Internal utilities+ -- $internalutilities+ , ShowApply, ShowSingApply+ , ShowApply', ShowSingApply' ) where import Data.Kind (Type) import Data.Singletons.Internal-import Data.Singletons.Promote+import Data.Singletons.ShowSing -- | A dependent pair. data Sigma (s :: Type) :: (s ~> Type) -> Type where (:&:) :: forall s t fst. Sing (fst :: s) -> t @@ fst -> Sigma s t infixr 4 :&:+instance (ShowSing s, ShowApply t) => Show (Sigma s t) where+ showsPrec p ((a :: Sing (fst :: s)) :&: b) = showParen (p >= 5) $+ showsPrec 5 a . showString " :&: " . showsPrec 5 b+ :: (ShowSing' fst, ShowApply' t fst) => ShowS -- | Unicode shorthand for 'Sigma'.-type Σ (s :: Type) (t :: s ~> Type) = Sigma s t+type Σ = Sigma +{-+Note [Impredicative Σ?]+~~~~~~~~~~~~~~~~~~~~~~~+The definition of Σ currently will not typecheck without the use of+ImpredicativeTypes. There isn't a fundamental reason that this should be the+case, and the only reason that GHC currently requires this is due to Trac+#13408. If someone ever fixes that bug, we could remove the use of+ImpredicativeTypes.+-}++-- | The singleton type for 'Sigma'.+data SSigma :: forall s (t :: s ~> Type). Sigma s t -> Type where+ (:%&:) :: forall s t (fst :: s) (sfst :: Sing fst) (snd :: t @@ fst).+ Sing ('WrapSing sfst) -> Sing snd -> SSigma (sfst ':&: snd :: Sigma s t)+infixr 4 :%&:++type instance Sing = SSigma+instance forall s (t :: s ~> Type) (sig :: Sigma s t).+ (ShowSing s, ShowSingApply t)+ => Show (SSigma sig) where+ showsPrec p ((sa :: Sing ('WrapSing (sfst :: Sing fst))) :%&: (sb :: Sing snd)) =+ showParen (p >= 5) $+ showsPrec 5 sa . showString " :&: " . showsPrec 5 sb+ :: (ShowSing' fst, ShowSingApply' t fst snd) => ShowS++instance forall s t (fst :: s) (a :: Sing fst) (b :: t @@ fst).+ (SingI fst, SingI b)+ => SingI (a ':&: b :: Sigma s t) where+ sing = sing :%&: sing++-- | Unicode shorthand for 'SSigma'.+type SΣ = SSigma+ -- | Project the first element out of a dependent pair.-projSigma1 :: forall s t. SingKind s => Sigma s t -> Demote s-projSigma1 (a :&: _) = fromSing a+fstSigma :: forall s t. SingKind s => Sigma s t -> Demote s+fstSigma (a :&: _) = fromSing a +-- | Project the first element out of a dependent pair.+type family FstSigma (sig :: Sigma s t) :: s where+ FstSigma ((_ :: Sing fst) ':&: _) = fst+ -- | Project the second element out of a dependent pair.------ In an ideal setting, the type of 'projSigma2' would be closer to:------ @--- 'projSigma2' :: 'Sing' (sig :: 'Sigma' s t) -> t @@ ProjSigma1 sig--- @------ But promoting 'projSigma1' to a type family is not a simple task. Instead,--- we do the next-best thing, which is to use Church-style elimination.+sndSigma :: forall s t (sig :: Sigma s t).+ SingKind (t @@ FstSigma sig)+ => SSigma sig -> Demote (t @@ FstSigma sig)+sndSigma (_ :%&: b) = fromSing b++-- | Project the second element out of a dependent pair.+type family SndSigma (sig :: Sigma s t) :: t @@ FstSigma sig where+ SndSigma (_ ':&: b) = b++-- | Project the first element out of a dependent pair using+-- continuation-passing style.+projSigma1 :: (forall (fst :: s). Sing fst -> r) -> Sigma s t -> r+projSigma1 f (a :&: _) = f a++-- | Project the second element out of a dependent pair using+-- continuation-passing style. projSigma2 :: forall s t r. (forall (fst :: s). t @@ fst -> r) -> Sigma s t -> r projSigma2 f ((_ :: Sing (fst :: s)) :&: b) = f @fst b @@ -72,4 +133,57 @@ zipSigma f g ((a :: Sing (fstA :: a)) :&: p) ((b :: Sing (fstB :: b)) :&: q) = (f @@ a @@ b) :&: (g @fstA @fstB p q) -$(genDefunSymbols [''Σ])+-- | Convert an uncurried function on 'Sigma' to a curried one.+--+-- Together, 'currySigma' and 'uncurrySigma' witness an isomorphism such that+-- the following identities hold:+--+-- @+-- id1 :: forall a (b :: a ~> Type) (c :: 'Sigma' a b ~> Type).+-- (forall (p :: Sigma a b). 'SSigma' p -> c @@ p)+-- -> (forall (p :: Sigma a b). 'SSigma' p -> c @@ p)+-- id1 f = 'uncurrySigma' @a @b @c ('currySigma' @a @b @c f)+--+-- id2 :: forall a (b :: a ~> Type) (c :: 'Sigma' a b ~> Type).+-- (forall (x :: a) (sx :: Sing x) (y :: b @@ x). Sing ('WrapSing' sx) -> Sing y -> c @@ (sx :&: y))+-- -> (forall (x :: a) (sx :: Sing x) (y :: b @@ x). Sing ('WrapSing' sx) -> Sing y -> c @@ (sx :&: y))+-- id2 f = 'currySigma' @a @b @c ('uncurrySigma' @a @b @c f)+-- @+currySigma :: forall a (b :: a ~> Type) (c :: Sigma a b ~> Type).+ (forall (p :: Sigma a b). SSigma p -> c @@ p)+ -> (forall (x :: a) (sx :: Sing x) (y :: b @@ x).+ Sing ('WrapSing sx) -> Sing y -> c @@ (sx ':&: y))+currySigma f x y = f (x :%&: y)++-- | Convert a curried function on 'Sigma' to an uncurried one.+--+-- Together, 'currySigma' and 'uncurrySigma' witness an isomorphism.+-- (Refer to the documentation for 'currySigma' for more details.)+uncurrySigma :: forall a (b :: a ~> Type) (c :: Sigma a b ~> Type).+ (forall (x :: a) (sx :: Sing x) (y :: b @@ x).+ Sing ('WrapSing sx) -> Sing y -> c @@ (sx ':&: y))+ -> (forall (p :: Sigma a b). SSigma p -> c @@ p)+uncurrySigma f (x :%&: y) = f x y++------------------------------------------------------------+-- Internal utilities+------------------------------------------------------------++{- $internal-utilities++See the documentation in "Data.Singletons.ShowSing"—in particular, the+Haddocks for 'ShowSing' and `ShowSing'`—for an explanation for why these+classes exist.+-}++class (forall (x :: a). ShowApply' f x) => ShowApply (f :: a ~> Type)+instance (forall (x :: a). ShowApply' f x) => ShowApply (f :: a ~> Type)++class Show (Apply f x) => ShowApply' (f :: a ~> Type) (x :: a)+instance Show (Apply f x) => ShowApply' (f :: a ~> Type) (x :: a)++class (forall (x :: a) (z :: Apply f x). ShowSingApply' f x z) => ShowSingApply (f :: a ~> Type)+instance (forall (x :: a) (z :: Apply f x). ShowSingApply' f x z) => ShowSingApply (f :: a ~> Type)++class Show (Sing z) => ShowSingApply' (f :: a ~> Type) (x :: a) (z :: Apply f x)+instance Show (Sing z) => ShowSingApply' (f :: a ~> Type) (x :: a) (z :: Apply f x)
src/Data/Singletons/Single.hs view
@@ -13,7 +13,6 @@ import Prelude hiding ( exp ) import Language.Haskell.TH hiding ( cxt ) import Language.Haskell.TH.Syntax (NameSpace(..), Quasi(..))-import Data.Singletons.Deriving.Infer import Data.Singletons.Deriving.Ord import Data.Singletons.Deriving.Bounded import Data.Singletons.Deriving.Enum@@ -34,11 +33,14 @@ import Data.Singletons.Syntax import Data.Singletons.Partition import Language.Haskell.TH.Desugar+import qualified Language.Haskell.TH.Desugar.OMap.Strict as OMap+import Language.Haskell.TH.Desugar.OMap.Strict (OMap)+import qualified Language.Haskell.TH.Desugar.OSet as OSet+import Language.Haskell.TH.Desugar.OSet (OSet) import qualified Data.Map.Strict as Map import Data.Map.Strict ( Map ) import Data.Maybe import qualified Data.Set as Set-import Data.Set ( Set ) import Control.Monad import Data.List import qualified GHC.LanguageExtensions.Type as LangExt@@ -128,11 +130,13 @@ singEqInstanceOnly :: DsMonad q => Name -> q [Dec] singEqInstanceOnly name = singEqualityInstance sEqClassDesc name --- | Create instances of 'SDecide' for each type in the list.+-- | Create instances of 'SDecide', 'TestEquality', and 'TestCoercion' for each+-- type in the list. singDecideInstances :: DsMonad q => [Name] -> q [Dec] singDecideInstances = concatMapM singDecideInstance --- | Create instance of 'SDecide' for the given type.+-- | Create instance of 'SDecide', 'TestEquality', and 'TestCoercion' for the+-- given type. singDecideInstance :: DsMonad q => Name -> q [Dec] singDecideInstance name = singEqualityInstance sDecideClassDesc name @@ -146,9 +150,14 @@ dcons <- concatMapM (dsCon dtvbs data_ty) cons let tyvars = map (DVarT . extractTvbName) dtvbs kind = foldType (DConT name) tyvars- (scons, _) <- singM [] $ mapM singCtor dcons+ (scons, _) <- singM [] $ mapM (singCtor name) dcons eqInstance <- mkEqualityInstance Nothing kind dcons scons desc- return $ decToTH eqInstance+ testInstances <-+ if className == sDecideClassName+ then traverse (mkTestInstance Nothing kind name dcons)+ [TestEquality, TestCoercion]+ else pure []+ return $ decsToTH (eqInstance:testInstances) -- | Create instances of 'SOrd' for the given types singOrdInstances :: DsMonad q => [Name] -> q [Dec]@@ -178,7 +187,7 @@ -- -- (Not to be confused with 'showShowInstance'.) singShowInstance :: DsMonad q => Name -> q [Dec]-singShowInstance = singInstance mkShowInstance "Show"+singShowInstance = singInstance (mkShowInstance ForPromotion) "Show" -- | Create instances of 'SShow' for the given types --@@ -198,9 +207,10 @@ let tyvars = map (DVarT . extractTvbName) dtvbs kind = foldType (DConT name) tyvars data_decl = DataDecl name dtvbs dcons- deriv_show_decl = DerivedDecl { ded_mb_cxt = Nothing- , ded_type = kind- , ded_decl = data_decl }+ deriv_show_decl = DerivedDecl { ded_mb_cxt = Nothing+ , ded_type = kind+ , ded_type_tycon = name+ , ded_decl = data_decl } (show_insts, _) <- singM [] $ singDerivedShowDecs deriv_show_decl pure $ decsToTH show_insts @@ -210,6 +220,55 @@ showSingInstances :: DsMonad q => [Name] -> q [Dec] showSingInstances = concatMapM showSingInstance +-- | Create an instance for @'SingI' TyCon{N}@, where @N@ is the positive+-- number provided as an argument.+--+-- Note that the generated code requires the use of the @QuantifiedConstraints@+-- language extension.+singITyConInstances :: DsMonad q => [Int] -> q [Dec]+singITyConInstances = concatMapM singITyConInstance++-- | Create an instance for @'SingI' TyCon{N}@, where @N@ is the positive+-- number provided as an argument.+--+-- Note that the generated code requires the use of the @QuantifiedConstraints@+-- language extension.+singITyConInstance :: DsMonad q => Int -> q [Dec]+singITyConInstance n+ | n <= 0+ = fail $ "Argument must be a positive number (given " ++ show n ++ ")"+ | otherwise+ = do as <- replicateM n (qNewName "a")+ ks <- replicateM n (qNewName "k")+ k_last <- qNewName "k_last"+ f <- qNewName "f"+ x <- qNewName "x"+ let k_penult = last ks+ k_fun = ravel (map DVarT ks) (DVarT k_last)+ f_ty = DVarT f+ a_tys = map DVarT as+ mk_fun arrow t1 t2 = arrow `DAppT` t1 `DAppT` t2+ matchable_apply_fun = mk_fun DArrowT (DVarT k_penult) (DVarT k_last)+ unmatchable_apply_fun = mk_fun (DConT tyFunArrowName) (DVarT k_penult) (DVarT k_last)+ ctxt = [ DForallT (map DPlainTV as)+ (map (DAppT (DConT singIName)) a_tys)+ (DConT singIName `DAppT` foldType f_ty a_tys)+ , DConT equalityName+ `DAppT` (DConT applyTyConName `DSigT`+ mk_fun DArrowT matchable_apply_fun unmatchable_apply_fun)+ `DAppT` DConT applyTyConAux1Name+ ]+ pure $ decToTH+ $ DInstanceD+ Nothing Nothing ctxt+ (DConT singIName `DAppT` (DConT (mkTyConName n) `DAppT` (f_ty `DSigT` k_fun)))+ [DLetDec $ DFunD singMethName+ [DClause [] $+ wrapSingFun 1 DWildCardT $+ DLamE [x] $+ DVarE withSingIName `DAppE` DVarE x+ `DAppE` DVarE singMethName]]+ singInstance :: DsMonad q => DerivDesc q -> String -> Name -> q [Dec] singInstance mk_inst inst_name name = do (tvbs, cons) <- getDataD ("I cannot make an instance of " ++ inst_name@@ -220,7 +279,7 @@ let data_decl = DataDecl name dtvbs dcons raw_inst <- mk_inst Nothing data_ty data_decl (a_inst, decs) <- promoteM [] $- promoteInstanceDec Map.empty raw_inst+ promoteInstanceDec OMap.empty raw_inst decs' <- singDecsM [] $ (:[]) <$> singInstD a_inst return $ decsToTH (decs ++ decs') @@ -297,7 +356,7 @@ -- see comment at top of file buildMethLets :: UClassDecl -> [(Name, DExp)] buildMethLets (ClassDecl { cd_lde = LetDecEnv { lde_types = meth_sigs } }) =- map mk_bind (Map.toList meth_sigs)+ map mk_bind (OMap.assocs meth_sigs) where mk_bind (meth_name, meth_ty) = ( meth_name@@ -314,7 +373,7 @@ , lde_infix = fixities , lde_proms = promoted_defaults , lde_bound_kvs = meth_bound_kvs } }) =- bindContext [foldPredTvbs (DConPr cls_name) cls_tvbs] $ do+ bindContext [foldTypeTvbs (DConT cls_name) cls_tvbs] $ do (sing_sigs, _, tyvar_names, cxts, res_kis, singIDefunss) <- unzip6 <$> zipWithM (singTySig no_meth_defns meth_sigs meth_bound_kvs) meth_names (map promoteValRhs meth_names)@@ -326,8 +385,8 @@ sing_meths <- mapM (uncurry (singLetDecRHS (Map.fromList tyvar_names) (Map.fromList cxts) res_ki_map))- (Map.toList default_defns)- fixities' <- traverse (uncurry singInfixDecl) $ Map.toList fixities+ (OMap.assocs default_defns)+ fixities' <- traverse (uncurry singInfixDecl) $ OMap.assocs fixities cls_cxt' <- mapM singPred cls_cxt return $ DClassD cls_cxt' (singClassName cls_name)@@ -337,15 +396,15 @@ where no_meth_defns = error "Internal error: can't find declared method type" always_sig = error "Internal error: no signature for default method"- meth_names = Map.keys meth_sigs+ meth_names = map fst $ OMap.assocs meth_sigs mk_default_sig meth_name (DSigD s_name sty) bound_kvs (Just res_ki) = DDefaultSigD s_name <$> add_constraints meth_name sty bound_kvs res_ki mk_default_sig _ _ _ _ = error "Internal error: a singled signature isn't a signature." add_constraints meth_name sty (_, bound_kvs) res_ki = do -- Maybe monad- prom_dflt <- Map.lookup meth_name promoted_defaults- let default_pred = foldPred (DConPr equalityName)+ prom_dflt <- OMap.lookup meth_name promoted_defaults+ let default_pred = foldType (DConT equalityName) -- NB: Need the res_ki here to prevent ambiguous -- kinds in result-inferred default methods. -- See #175@@ -382,6 +441,7 @@ inst_kis <- mapM promoteType inst_tys meths <- concatMapM (uncurry sing_meth) ann_meths return (DInstanceD Nothing+ Nothing cxt' (foldl DAppT (DConT s_inst_name) inst_kis) meths)@@ -406,7 +466,7 @@ -- less confusing. vis_cls_tvbs = drop (length cls_tvbs - length inst_kis) cls_tvbs - sing_meth_ty :: Set Name -> DType+ sing_meth_ty :: OSet Name -> DType -> SgM (DType, [Name], DCxt, DKind) sing_meth_ty bound_kvs inner_ty = do -- Make sure to expand through type synonyms here! Not doing so@@ -416,11 +476,11 @@ <- singType bound_kvs (promoteValRhs name) raw_ty pure (s_ty, tyvar_names, ctxt, res_ki) - (s_ty, tyvar_names, ctxt, m_res_ki) <- case Map.lookup name inst_sigs of+ (s_ty, tyvar_names, ctxt, m_res_ki) <- case OMap.lookup name inst_sigs of Just inst_sig -> do -- We have an InstanceSig, so just single that type. Take care to -- avoid binding the variables bound by the instance head as well.- let inst_bound = foldMap (fvDType . predToType) cxt <> foldMap fvDType inst_kis+ let inst_bound = foldMap fvDType (cxt ++ inst_kis) (s_ty, tyvar_names, ctxt, res_ki) <- sing_meth_ty inst_bound inst_sig pure (s_ty, tyvar_names, ctxt, Just res_ki) Nothing -> case mb_s_info of@@ -435,7 +495,7 @@ pure ( substType subst s_ty , map extractTvbName sing_tvbs- , map (substPred subst) ctxt+ , map (substType subst) ctxt , m_res_ki ) _ -> do mb_info <- dsReify name@@ -443,8 +503,8 @@ Just (DVarI _ (DForallT cls_tvbs _cls_pred inner_ty) _) -> do let subst = mk_subst cls_tvbs cls_kvb_names = foldMap (foldMap fvDType . extractTvbKind) cls_tvbs- cls_tvb_names = Set.fromList $ map extractTvbName cls_tvbs- cls_bound = cls_kvb_names `Set.union` cls_tvb_names+ cls_tvb_names = OSet.fromList $ map extractTvbName cls_tvbs+ cls_bound = cls_kvb_names `OSet.union` cls_tvb_names (s_ty, tyvar_names, ctxt, res_ki) <- sing_meth_ty cls_bound inner_ty pure ( substType subst s_ty , tyvar_names@@ -473,23 +533,23 @@ , lde_proms = proms , lde_bound_kvs = bound_kvs }) thing_inside = do- let prom_list = Map.toList proms+ let prom_list = OMap.assocs proms (typeSigs, letBinds, tyvarNames, cxts, res_kis, singIDefunss) <- unzip6 <$> mapM (uncurry (singTySig defns types bound_kvs)) prom_list- infix_decls' <- traverse (uncurry singInfixDecl) $ Map.toList infix_decls+ infix_decls' <- traverse (uncurry singInfixDecl) $ OMap.assocs infix_decls let res_ki_map = Map.fromList [ (name, res_ki) | ((name, _), Just res_ki) <- zip prom_list res_kis ] bindLets letBinds $ do let_decs <- mapM (uncurry (singLetDecRHS (Map.fromList tyvarNames) (Map.fromList cxts) res_ki_map))- (Map.toList defns)+ (OMap.assocs defns) thing <- thing_inside return (infix_decls' ++ typeSigs ++ let_decs, concat singIDefunss, thing) -singTySig :: Map Name ALetDecRHS -- definitions- -> Map Name DType -- type signatures- -> Map Name (Set Name) -- bound kind variables+singTySig :: OMap Name ALetDecRHS -- definitions+ -> OMap Name DType -- type signatures+ -> OMap Name (OSet Name) -- bound kind variables -> Name -> DType -- the type is the promoted type, not the type sig! -> SgM ( DLetDec -- the new type signature , (Name, DExp) -- the let-bind entry@@ -500,7 +560,7 @@ ) singTySig defns types bound_kvs name prom_ty = let sName = singValName name in- case Map.lookup name types of+ case OMap.lookup name types of Nothing -> do num_args <- guess_num_args (sty, tyvar_names) <- mk_sing_ty num_args@@ -528,14 +588,14 @@ where guess_num_args :: SgM Int guess_num_args =- case Map.lookup name defns of+ case OMap.lookup name defns of Nothing -> fail "Internal error: promotion known for something not let-bound." Just (AValue _ n _) -> return n Just (AFunction _ n _) -> return n - lookup_bound_kvs :: SgM (Set Name)+ lookup_bound_kvs :: SgM (OSet Name) lookup_bound_kvs =- case Map.lookup name bound_kvs of+ case OMap.lookup name bound_kvs of Nothing -> fail $ "Internal error: " ++ nameBase name ++ " has no type variable " ++ "bindings, despite having a type signature" Just kvs -> pure kvs@@ -559,7 +619,7 @@ bindContext (Map.findWithDefault [] name cxts) $ case ld_rhs of AValue prom num_arrows exp ->- DValD (DVarPa (singValName name)) <$>+ DValD (DVarP (singValName name)) <$> (wrapUnSingFun num_arrows prom <$> singExp exp (Map.lookup name res_kis)) AFunction prom_fun num_arrows clauses -> let tyvar_names = case Map.lookup name bound_names of@@ -603,21 +663,21 @@ singPat var_proms = go where go :: ADPat -> QWithAux SingDSigPaInfos SgM DPat- go (ADLitPa _lit) =+ go (ADLitP _lit) = fail "Singling of literal patterns not yet supported"- go (ADVarPa name) = do+ go (ADVarP name) = do tyname <- case Map.lookup name var_proms of Nothing -> fail "Internal error: unknown variable when singling pattern" Just tyname -> return tyname- pure $ DVarPa (singValName name) `DSigPa` (singFamily `DAppT` DVarT tyname)- go (ADConPa name pats) = DConPa (singDataConName name) <$> mapM go pats- go (ADTildePa pat) = do+ pure $ DVarP (singValName name) `DSigP` (singFamily `DAppT` DVarT tyname)+ go (ADConP name pats) = DConP (singDataConName name) <$> mapM go pats+ go (ADTildeP pat) = do qReportWarning "Lazy pattern converted into regular pattern during singleton generation." go pat- go (ADBangPa pat) = DBangPa <$> go pat- go (ADSigPa prom_pat pat ty) = do+ go (ADBangP pat) = DBangP <$> go pat+ go (ADSigP prom_pat pat ty) = do pat' <- go pat -- Normally, calling dPatToDExp would be dangerous, since it fails if the -- supplied pattern contains any wildcard patterns. However, promotePat@@ -627,7 +687,7 @@ -- See Note [Singling pattern signatures]. addElement (dPatToDExp pat', DSigT prom_pat ty) pure pat'- go ADWildPa = pure DWildPa+ go ADWildP = pure DWildP -- | If given a non-empty list of 'SingDSigPaInfos', construct a case expression -- that brings singleton equality constraints into scope via pattern-matching.@@ -638,7 +698,7 @@ | otherwise = let (exps, sigs) = unzip exps_with_sigs scrutinee = mkTupleDExp exps- pats = map (DSigPa DWildPa . DAppT (DConT singFamilyName)) sigs+ pats = map (DSigP DWildP . DAppT (DConT singFamilyName)) sigs in DCaseE scrutinee [DMatch (mkTupleDPat pats) exp] -- Note [Annotate case return type]@@ -650,6 +710,11 @@ -- becomes "untouchable" in the case matches. See the OutsideIn paper. But, -- during singletonization, we *know* the return type. So, just add a type -- annotation. See #54.+--+-- In particular, we add a type annotation in a somewhat unorthodox fashion.+-- Instead of the usual `(x :: t)`, we use `id @t x`. See+-- Note [The id hack; or, how singletons learned to stop worrying and avoid+-- kind generalization] for an explanation of why we do this. -- Note [Why error is so special] -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@@ -765,14 +830,17 @@ -- So: build a case let caseExp = DCaseE (mkTupleDExp (map DVarE sNames)) [DMatch (mkTupleDPat- (map ((DWildPa `DSigPa`) .+ (map ((DWildP `DSigP`) . (singFamily `DAppT`) . DVarT) ty_names)) exp'] return $ wrapSingFun (length names) prom_lam $ DLamE sNames caseExp singExp (ADCaseE exp matches ret_ty) res_ki =- -- See Note [Annotate case return type]- DSigE <$> (DCaseE <$> singExp exp Nothing <*> mapM (singMatch res_ki) matches)- <*> pure (singFamily `DAppT` (ret_ty `maybeSigT` res_ki))+ -- See Note [Annotate case return type] and+ -- Note [The id hack; or, how singletons learned to stop worrying and+ -- avoid kind generalization]+ DAppE (DAppTypeE (DVarE 'id)+ (singFamily `DAppT` (ret_ty `maybeSigT` res_ki)))+ <$> (DCaseE <$> singExp exp Nothing <*> mapM (singMatch res_ki) matches) singExp (ADLetE env exp) res_ki = do -- We intentionally discard the SingI instances for exp's defunctionalization -- symbols, as we also do not generate the declarations for the@@ -783,12 +851,13 @@ exp' <- singExp exp (Just ty) pure $ DSigE exp' $ DConT singFamilyName `DAppT` DSigT prom_exp ty --- See Note [DerivedDecl]+-- See Note [DerivedDecl] in Data.Singletons.Syntax singDerivedEqDecs :: DerivedEqDecl -> SgM [DDec]-singDerivedEqDecs (DerivedDecl { ded_mb_cxt = mb_ctxt- , ded_type = ty- , ded_decl = DataDecl _ _ cons }) = do- (scons, _) <- singM [] $ mapM singCtor cons+singDerivedEqDecs (DerivedDecl { ded_mb_cxt = mb_ctxt+ , ded_type = ty+ , ded_type_tycon = ty_tycon+ , ded_decl = DataDecl _ _ cons }) = do+ (scons, _) <- singM [] $ mapM (singCtor ty_tycon) cons mb_sctxt <- mapM (mapM singPred) mb_ctxt kind <- promoteType ty sEqInst <- mkEqualityInstance mb_sctxt kind cons scons sEqClassDesc@@ -801,36 +870,50 @@ -- all occurrences of SEq with SDecide in the context. let mb_sctxtDecide = fmap (map sEqToSDecide) mb_sctxt sDecideInst <- mkEqualityInstance mb_sctxtDecide kind cons scons sDecideClassDesc- return [sEqInst, sDecideInst]+ testInsts <- traverse (mkTestInstance mb_sctxtDecide kind ty_tycon cons)+ [TestEquality, TestCoercion]+ return (sEqInst:sDecideInst:testInsts) -- Walk a DPred, replacing all occurrences of SEq with SDecide. sEqToSDecide :: DPred -> DPred-sEqToSDecide = modifyConNameDPred $ \n ->+sEqToSDecide = modifyConNameDType $ \n -> -- Why don't we directly compare n to sEqClassName? Because n is almost certainly -- produced from a call to singClassName, which uses unqualified Names. Ugh. if nameBase n == nameBase sEqClassName then sDecideClassName else n --- See Note [DerivedDecl]+-- See Note [DerivedDecl] in Data.Singletons.Syntax singDerivedShowDecs :: DerivedShowDecl -> SgM [DDec]-singDerivedShowDecs (DerivedDecl { ded_mb_cxt = mb_cxt- , ded_type = ty- , ded_decl = DataDecl _ _ cons }) = do- z <- qNewName "z"- -- Derive the Show instance for the singleton type, like this:+singDerivedShowDecs (DerivedDecl { ded_mb_cxt = mb_cxt+ , ded_type = ty+ , ded_type_tycon = ty_tycon+ , ded_decl = data_decl }) = do+ -- Generate a Show instance for a singleton type, like this: --- -- deriving instance (ShowSing a, ShowSing b) => Sing (Sing (z :: Either a b))+ -- instance (ShowSing a, ShowSing b) => Show (SEither (z :: Either a b)) where+ -- showsPrec p (SLeft (sl :: Sing l)) =+ -- showParen (p > 10) $ showString "SLeft " . showsPrec 11 sl+ -- :: ShowSing' l => ShowS+ -- showsPrec p (SRight (sr :: Sing r)) =+ -- showParen (p > 10) $ showString "SRight " . showsPrec 11 sr+ -- :: ShowSing' r => ShowS -- -- Be careful: we want to generate an instance context that uses ShowSing, -- not SShow.- show_cxt <- inferConstraintsDef (fmap mkShowSingContext mb_cxt)- (DConPr showSingName)- ty cons- let show_inst = DStandaloneDerivD Nothing show_cxt- (DConT showName `DAppT` (singFamily `DAppT` DSigT (DVarT z) ty))- pure [show_inst]+ show_sing_inst <- mkShowInstance (ForShowSing ty_tycon) mb_cxt ty data_decl+ pure [toInstanceD show_sing_inst]+ where+ toInstanceD :: UInstDecl -> DDec+ toInstanceD (InstDecl { id_cxt = cxt, id_name = inst_name+ , id_arg_tys = inst_tys, id_meths = ann_meths }) =+ DInstanceD Nothing Nothing cxt (foldType (DConT inst_name) inst_tys)+ (map (DLetDec . toFunD) ann_meths) + toFunD :: (Name, ULetDecRHS) -> DLetDec+ toFunD (fun_name, UFunction clauses) = DFunD fun_name clauses+ toFunD (val_name, UValue rhs) = DValD (DVarP val_name) rhs+ isException :: DExp -> Bool isException (DVarE n) = nameBase n == "sUndefined" isException (DConE {}) = False@@ -872,3 +955,85 @@ maybeSigT :: DType -> Maybe DKind -> DType maybeSigT ty Nothing = ty maybeSigT ty (Just ki) = ty `DSigT` ki++{-+Note [The id hack; or, how singletons learned to stop worrying and avoid kind generalization]+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+GHC 8.8 was a time of great change. In particular, 8.8 debuted a fix for+Trac #15141 (decideKindGeneralisationPlan is too complicated). To fix this, a+wily GHC developer—who shall remain unnamed, but whose username rhymes with+schmoldfire—decided to make decideKindGeneralisationPlan less complicated by,+well, removing the whole thing. One consequence of this is that local+definitions are now kind-generalized (whereas they would not have been+previously).++While schmoldfire had the noblest of intentions when authoring his fix, he+unintentionally made life much harder for singletons. Why? Consider the+following program:++ class Foo a where+ bar :: a -> (a -> b) -> b+ baz :: a++ quux :: Foo a => a -> a+ quux x = x `bar` \_ -> baz++When singled, this program will turn into something like this:++ type family Quux (x :: a) :: a where+ Quux x = Bar x (LambdaSym1 x)++ sQuux :: forall a (x :: a). SFoo a => Sing x -> Sing (Quux x :: a)+ sQuux (sX :: Sing x)+ = sBar sX+ ((singFun1 @(LambdaSym1 x))+ (\ sArg+ -> case sArg of {+ (_ :: Sing arg)+ -> (case sArg of { _ -> sBaz }) ::+ Sing (Case x arg arg) }))++ type family Case x arg t where+ Case x arg _ = Baz+ type family Lambda x t where+ Lambda x arg = Case x arg arg+ data LambdaSym1 x t+ type instance Apply (LambdaSym1 x) t = Lambda x t++The high-level bit is the explicit `Sing (Case x arg arg)` signature. Question:+what is the kind of `Case x arg arg`? The answer depends on whether local+definitions are kind-generalized or not!++1. If local definitions are *not* kind-generalized (i.e., the status quo before+ GHC 8.8), then `Case x arg arg :: a`.+2. If local definitions *are* kind-generalized (i.e., the status quo in GHC 8.8+ and later), then `Case x arg arg :: k` for some fresh kind variable `k`.++Unfortunately, the kind of `Case x arg arg` *must* be `a` in order for `sQuux`+to type-check. This means that the code above suddenly stopped working in GHC+8.8. What's more, we can't just remove these explicit signatures, as there is+code elsewhere in `singletons` that crucially relies on them to guide type+inference along (e.g., `sShowParen` in `Data.Singletons.Prelude.Show`).++Luckily, there is an ingenious hack that lets us the benefits of explicit+signatures without the pain of kind generalization: our old friend, the `id`+function. The plan is as follows: instead of generating this code:++ (case sArg of ...) :: Sing (Case x arg arg)++We instead generate this code:++ id @(Sing (Case x arg arg)) (case sArg of ...)++That's it! This works because visible type arguments in terms do not get kind-+generalized, unlike top-level or local signatures. Now `Case x arg arg`'s kind+is not generalized, and all is well. We dub this: the `id` hack.++One might wonder: will we need the `id` hack around forever? Perhaps not. While+GHC 8.8 removed the decideKindGeneralisationPlan function, there have been+rumblings that a future version of GHC may bring it back (in a limited form).+If this happens, it is possibly that GHC's attitude towards kind-generalizing+local definitons may change *again*, which could conceivably render the `id`+hack unnecessary. This is all speculation, of course, so all we can do now is+wait and revisit this design at a later date.+-}
src/Data/Singletons/Single/Data.hs view
@@ -11,6 +11,7 @@ module Data.Singletons.Single.Data where import Language.Haskell.TH.Desugar+import Language.Haskell.TH.Desugar.OSet (OSet) import Language.Haskell.TH.Syntax import Data.Singletons.Single.Defun import Data.Singletons.Single.Monad@@ -21,8 +22,7 @@ import Data.Singletons.Names import Data.Singletons.Syntax import Control.Monad-import qualified Data.Set as Set-import Data.Set (Set)+import Data.Foldable -- We wish to consider the promotion of "Rep" to be * -- not a promoted data constructor.@@ -30,7 +30,7 @@ singDataD (DataDecl name tvbs ctors) = do let tvbNames = map extractTvbName tvbs k <- promoteType (foldType (DConT name) (map DVarT tvbNames))- ctors' <- mapM singCtor ctors+ ctors' <- mapM (singCtor name) ctors ctorFixities <- -- try to reify the fixity declarations for the constructors and then -- singletonize them. In case the reification fails, we default to an@@ -48,11 +48,11 @@ toSingClauses <- mapM mkToSingClause ctors emptyToSingClause <- mkEmptyToSingClause let singKindInst =- DInstanceD Nothing+ DInstanceD Nothing Nothing (map (singKindConstraint . DVarT) tvbNames) (DAppT (DConT singKindClassName) k)- [ DTySynInstD demoteName $ DTySynEqn- [k]+ [ DTySynInstD $ DTySynEqn Nothing+ (DConT demoteName `DAppT` k) (foldType (DConT name) (map (DAppT demote . DVarT) tvbNames)) , DLetDec $ DFunD fromSingName@@ -60,15 +60,17 @@ , DLetDec $ DFunD toSingName (toSingClauses `orIfEmpty` [emptyToSingClause]) ] - -- e.g. type SNat = (Sing :: Nat -> Type)- let kindedSingTy = DArrowT `DAppT` k `DAppT` DConT typeKindName- kindedSynInst =- DTySynD (singTyConName name)- []- (singFamily `DSigT` kindedSingTy)+ let singDataName = singTyConName name+ -- e.g. type instance Sing @Nat = SNat+ singSynInst =+ DTySynInstD $ DTySynEqn Nothing+ (DConT singFamilyName `DAppKindT` k)+ (DConT singDataName)+ kindedSingTy = DForallT (map DPlainTV tvbNames) [] $+ DArrowT `DAppT` k `DAppT` DConT typeKindName - return $ (DDataInstD Data [] singFamilyName [] (Just kindedSingTy) ctors' []) :- kindedSynInst :+ return $ (DDataD Data [] singDataName [] (Just kindedSingTy) ctors' []) :+ singSynInst : singKindInst : ctorFixities where -- in the Rep case, the names of the constructors are in the wrong scope@@ -83,7 +85,7 @@ let (cname, numArgs) = extractNameArgs c cname' <- mkConName cname varNames <- replicateM numArgs (qNewName "b")- return $ DClause [DConPa (singDataConName cname) (map DVarPa varNames)]+ return $ DClause [DConP (singDataConName cname) (map DVarP varNames)] (foldExp (DConE cname') (map (DAppE (DVarE fromSingName) . DVarE) varNames))@@ -98,9 +100,9 @@ let varPats = zipWith mkToSingVarPat varNames promoted recursiveCalls = zipWith mkRecursiveCall varNames promoted return $- DClause [DConPa cname' varPats]+ DClause [DConP cname' varPats] (multiCase recursiveCalls- (map (DConPa someSingDataName . listify . DVarPa)+ (map (DConP someSingDataName . listify . DVarP) svarNames) (DAppE (DConE someSingDataName) (foldExp (DConE (singDataConName cname))@@ -108,7 +110,7 @@ mkToSingVarPat :: Name -> DKind -> DPat mkToSingVarPat varName ki =- DSigPa (DVarPa varName) (DAppT (DConT demoteName) ki)+ DSigP (DVarP varName) (DAppT (DConT demoteName) ki) mkRecursiveCall :: Name -> DKind -> DExp mkRecursiveCall var_name ki =@@ -118,21 +120,21 @@ mkEmptyFromSingClause :: SgM DClause mkEmptyFromSingClause = do x <- qNewName "x"- pure $ DClause [DVarPa x]+ pure $ DClause [DVarP x] $ DCaseE (DVarE x) [] mkEmptyToSingClause :: SgM DClause mkEmptyToSingClause = do x <- qNewName "x"- pure $ DClause [DVarPa x]+ pure $ DClause [DVarP x] $ DConE someSingDataName `DAppE` DCaseE (DVarE x) [] -- refine a constructor.-singCtor :: DCon -> SgM DCon+singCtor :: Name -> DCon -> SgM DCon -- polymorphic constructors are handled just -- like monomorphic ones -- the polymorphism in -- the kind is automatic-singCtor (DCon _tvbs cxt name fields rty)+singCtor dataName (DCon _tvbs cxt name fields rty) | not (null cxt) = fail "Singling of constrained constructors not yet supported" | otherwise@@ -147,16 +149,16 @@ let bound_kvs = foldMap fvDType kinds args <- zipWithM (buildArgType bound_kvs) types indices rty' <- promoteType rty- let tvbs = map DPlainTV (Set.toList bound_kvs) ++ zipWith DKindedTV indexNames kinds+ let tvbs = map DPlainTV (toList bound_kvs) ++ zipWith DKindedTV indexNames kinds kindedIndices = zipWith DSigT indices kinds -- SingI instance for data constructor emitDecs- [DInstanceD Nothing- (map (DAppPr (DConPr singIName)) indices)+ [DInstanceD Nothing Nothing+ (map (DAppT (DConT singIName)) indices) (DAppT (DConT singIName) (foldType pCon kindedIndices))- [DLetDec $ DValD (DVarPa singMethName)+ [DLetDec $ DValD (DVarP singMethName) (foldExp sCon (map (const $ DVarE singMethName) types))]] -- SingI instances for defunctionalization symbols. Note that we don't -- support contexts in constructors at the moment, so it's fine for now to@@ -174,8 +176,8 @@ [] sName conFields- (DConT singFamilyName `DAppT` foldType pCon indices)- where buildArgType :: Set Name -> DType -> DType -> SgM DType+ (DConT (singTyConName dataName) `DAppT` foldType pCon indices)+ where buildArgType :: OSet Name -> DType -> DType -> SgM DType buildArgType bound_kvs ty index = do (ty', _, _, _, _, _) <- singType bound_kvs index ty return ty'
src/Data/Singletons/Single/Defun.hs view
@@ -45,15 +45,9 @@ -- Note that singDefuns takes Maybe DKinds for the promoted argument and result -- types, in case we have an entity whose type needs to be inferred. -- See Note [singDefuns and type inference].------ Note that in the particular case of a data constructor, we actually generate--- /two/ SingI instances partial application—one for the defunctionalization--- symbol, and one for the data constructor placed inside TyCon{N}.--- See Note [SingI instances for partially applied constructors]. singDefuns :: Name -- The Name of the thing to promote. -> NameSpace -- Whether the above Name is a value, data constructor, -- or a type constructor.- -- See Note [SingI instances for partially applied constructors] -> DCxt -- The type's context. -> [Maybe DKind] -- The promoted argument types (if known). -> Maybe DKind -- The promoted result type (if known).@@ -98,7 +92,7 @@ (map extractTvbName tvbs) singI_ctxt :: DCxt- singI_ctxt = map (DAppPr (DConPr singIName) . tvbToType) tvbs+ singI_ctxt = map (DAppT (DConT singIName) . tvbToType) tvbs mk_inst_ty :: DType -> DType mk_inst_ty inst_head@@ -119,29 +113,21 @@ mb_inst_kind = foldr buildTyFunArrow_maybe mb_ty_res mb_tyss new_insts :: [DDec]- new_insts- | DataName <- ns- = -- See Note [SingI instances for partially applied constructors]- let s_data_con = DConE $ singDataConName n in- [ mk_inst defun_inst_ty s_data_con- , mk_inst tycon_inst_ty s_data_con ]- | otherwise- = [mk_inst defun_inst_ty $ DVarE $ singValName n]+ new_insts = [DInstanceD Nothing Nothing+ (sty_ctxt ++ singI_ctxt)+ (DConT singIName `DAppT` mk_inst_ty defun_inst_ty)+ [DLetDec $ DValD (DVarP singMethName)+ $ wrapSingFun sing_fun_num defun_inst_ty+ $ mk_sing_fun_expr sing_exp ]] where- mk_inst :: DType -> DExp -> DDec- mk_inst inst_head sing_exp- = DInstanceD Nothing- (sty_ctxt ++ singI_ctxt)- (DConT singIName `DAppT` mk_inst_ty inst_head)- [DLetDec $ DValD (DVarPa singMethName)- $ wrapSingFun sing_fun_num inst_head- $ mk_sing_fun_expr sing_exp ]-- defun_inst_ty, tycon_inst_ty :: DType+ defun_inst_ty :: DType defun_inst_ty = foldType (DConT (promoteTySym n sym_num)) tvb_tys- tycon_inst_ty = DConT (mkTyConName sing_fun_num) `DAppT`- foldType (DConT n) tvb_tys + sing_exp :: DExp+ sing_exp = case ns of+ DataName -> DConE $ singDataConName n+ _ -> DVarE $ singValName n+ {- Note [singDefuns and type inference] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@@ -176,38 +162,4 @@ will /also/ fail to typecheck due to a missing SEq constraint. Therefore, this design choice fits within the existing tradition of type inference in singletons.--Note [SingI instances for partially applied constructors]-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-Unlike normal functions, where we generate one SingI instance for each of its-partial applications (one per defunctionalization symbol), we generate *two*-SingI instances for each partial application of a data constructor. That is,-if we have:-- data D a where- K :: a -> D a--K has an partial application, so we will generate the following two SingI-instances:-- instance SingI KSym0 where sing = singFun1 SK- instance SingI (TyCon1 KSym0) where sing = singFun1 SK--The first instance is exactly the same as what we'd generate for a normal,-partially applied function's defun symbol. The second one, while functionally-equivalent, is a bit dissatisfying: in general, adopting this approach means-that we end up generating many instances of the form:-- instance SingI (TyCon1 S1)- instance SingI (TyCon1 S2)- ...--Ideally, we'd have a single instance SingI (TyCon1 s) to rule them all. But-doing so would require writing something akin to:-- instance (forall a. SingI a => SingI (f a)) => SingI (TyCon1 f) where- sing = SLambda $ \(x :: Sing a) -> withSingI x $ sing @_ @(f a)--But this would require quantified constraints. Until GHC gains these, we-compensate by generating out several SingI (TyCon1 s) instances. -}
src/Data/Singletons/Single/Eq.hs view
@@ -31,29 +31,52 @@ methClauses <- if null sctors then (:[]) <$> mkEmpty else mapM mkMeth sctorPairs- constraints <- inferConstraintsDef mb_ctxt (DConPr className) k ctors- return $ DInstanceD Nothing+ constraints <- inferConstraintsDef mb_ctxt (DConT className) k ctors+ return $ DInstanceD Nothing Nothing constraints (DAppT (DConT className) k) [DLetDec $ DFunD methName methClauses] +data TestInstance = TestEquality+ | TestCoercion++-- Make an instance of TestEquality or TestCoercion by leveraging SDecide.+mkTestInstance :: DsMonad q => Maybe DCxt -> DKind+ -> Name -- ^ The name of the data type+ -> [DCon] -- ^ The /original/ constructors (for inferring the instance context)+ -> TestInstance -> q DDec+mkTestInstance mb_ctxt k data_name ctors ti = do+ constraints <- inferConstraintsDef mb_ctxt (DConT sDecideClassName) k ctors+ pure $ DInstanceD Nothing Nothing+ constraints+ (DAppT (DConT tiClassName)+ (DConT (singTyConName data_name)+ `DSigT` (DArrowT `DAppT` k `DAppT` DConT typeKindName)))+ [DLetDec $ DFunD tiMethName+ [DClause [] (DVarE tiDefaultName)]]+ where+ (tiClassName, tiMethName, tiDefaultName) =+ case ti of+ TestEquality -> (testEqualityClassName, testEqualityMethName, decideEqualityName)+ TestCoercion -> (testCoercionClassName, testCoercionMethName, decideCoercionName)+ mkEqMethClause :: Quasi q => (DCon, DCon) -> q DClause mkEqMethClause (c1, c2) | lname == rname = do lnames <- replicateM lNumArgs (qNewName "a") rnames <- replicateM lNumArgs (qNewName "b")- let lpats = map DVarPa lnames- rpats = map DVarPa rnames+ let lpats = map DVarP lnames+ rpats = map DVarP rnames lvars = map DVarE lnames rvars = map DVarE rnames return $ DClause- [DConPa lname lpats, DConPa rname rpats]+ [DConP lname lpats, DConP rname rpats] (allExp (zipWith (\l r -> foldExp (DVarE sEqMethName) [l, r]) lvars rvars)) | otherwise = return $ DClause- [DConPa lname (replicate lNumArgs DWildPa),- DConPa rname (replicate rNumArgs DWildPa)]+ [DConP lname (replicate lNumArgs DWildP),+ DConP rname (replicate rNumArgs DWildP)] (DConE $ singDataConName falseName) where allExp :: [DExp] -> DExp allExp [] = DConE $ singDataConName trueName@@ -65,39 +88,39 @@ mkEmptyEqMethClause :: Applicative q => q DClause mkEmptyEqMethClause =- pure $ DClause [DWildPa, DWildPa]+ pure $ DClause [DWildP, DWildP] $ DConE strueName mkDecideMethClause :: Quasi q => (DCon, DCon) -> q DClause mkDecideMethClause (c1, c2) | lname == rname = if lNumArgs == 0- then return $ DClause [DConPa lname [], DConPa rname []]+ then return $ DClause [DConP lname [], DConP rname []] (DAppE (DConE provedName) (DConE reflName)) else do lnames <- replicateM lNumArgs (qNewName "a") rnames <- replicateM lNumArgs (qNewName "b") contra <- qNewName "contra"- let lpats = map DVarPa lnames- rpats = map DVarPa rnames+ let lpats = map DVarP lnames+ rpats = map DVarP rnames lvars = map DVarE lnames rvars = map DVarE rnames refl <- qNewName "refl" return $ DClause- [DConPa lname lpats, DConPa rname rpats]+ [DConP lname lpats, DConP rname rpats] (DCaseE (mkTupleDExp $ zipWith (\l r -> foldExp (DVarE sDecideMethName) [l, r]) lvars rvars) ((DMatch (mkTupleDPat (replicate lNumArgs- (DConPa provedName [DConPa reflName []])))+ (DConP provedName [DConP reflName []]))) (DAppE (DConE provedName) (DConE reflName))) :- [DMatch (mkTupleDPat (replicate i DWildPa ++- DConPa disprovedName [DVarPa contra] :- replicate (lNumArgs - i - 1) DWildPa))+ [DMatch (mkTupleDPat (replicate i DWildP +++ DConP disprovedName [DVarP contra] :+ replicate (lNumArgs - i - 1) DWildP)) (DAppE (DConE disprovedName) (DLamE [refl] $ DCaseE (DVarE refl)- [DMatch (DConPa reflName []) $+ [DMatch (DConP reflName []) $ (DAppE (DVarE contra) (DConE reflName))])) | i <- [0..lNumArgs-1] ]))@@ -105,8 +128,8 @@ | otherwise = do x <- qNewName "x" return $ DClause- [DConPa lname (replicate lNumArgs DWildPa),- DConPa rname (replicate rNumArgs DWildPa)]+ [DConP lname (replicate lNumArgs DWildP),+ DConP rname (replicate rNumArgs DWildP)] (DAppE (DConE disprovedName) (DLamE [x] (DCaseE (DVarE x) []))) where@@ -116,5 +139,5 @@ mkEmptyDecideMethClause :: Quasi q => q DClause mkEmptyDecideMethClause = do x <- qNewName "x"- pure $ DClause [DVarPa x, DWildPa]+ pure $ DClause [DVarP x, DWildP] $ DConE provedName `DAppE` DCaseE (DVarE x) []
src/Data/Singletons/Single/Monad.hs view
@@ -29,7 +29,6 @@ import Control.Monad.Reader import Control.Monad.Writer import Control.Applicative-import Control.Monad.Fail -- environment during singling data SgEnv =
src/Data/Singletons/Single/Type.hs view
@@ -9,16 +9,17 @@ module Data.Singletons.Single.Type where import Language.Haskell.TH.Desugar+import qualified Language.Haskell.TH.Desugar.OSet as OSet+import Language.Haskell.TH.Desugar.OSet (OSet) import Language.Haskell.TH.Syntax import Data.Singletons.Names import Data.Singletons.Single.Monad import Data.Singletons.Promote.Type import Data.Singletons.Util import Control.Monad-import qualified Data.Set as Set-import Data.Set (Set)+import Data.Foldable -singType :: Set Name -- the set of bound kind variables in this scope+singType :: OSet Name -- the set of bound kind variables in this scope -- see Note [Explicitly binding kind variables] -- in Data.Singletons.Promote.Monad -> DType -- the promoted version of the thing classified by...@@ -41,9 +42,9 @@ tau = ravel args' res' -- Make sure to subtract out the bound variables currently in scope, lest we -- accidentally shadow them in this type signature.- kv_names_to_bind = foldMap fvDType (prom_args ++ map predToType cxt' ++ [prom_res])- Set.\\ bound_kvs- kvs_to_bind = Set.toList kv_names_to_bind+ kv_names_to_bind = foldMap fvDType (prom_args ++ cxt' ++ [prom_res])+ OSet.\\ bound_kvs+ kvs_to_bind = toList kv_names_to_bind let ty' = DForallT (map DPlainTV kvs_to_bind ++ zipWith DKindedTV arg_names prom_args) cxt' tau return (ty', num_args, arg_names, cxt, prom_args, prom_res)@@ -51,19 +52,24 @@ singPred :: DPred -> SgM DPred singPred = singPredRec [] -singPredRec :: [DType] -> DPred -> SgM DPred-singPredRec _cxt (DForallPr {}) =+singPredRec :: [DTypeArg] -> DPred -> SgM DPred+singPredRec _cxt (DForallT {}) = fail "Singling of quantified constraints not yet supported"-singPredRec ctx (DAppPr pr ty) = singPredRec (ty : ctx) pr-singPredRec _ctx (DSigPr _pr _ki) =+singPredRec ctx (DAppT pr ty) = singPredRec (DTANormal ty : ctx) pr+singPredRec ctx (DAppKindT pr ki) = singPredRec (DTyArg ki : ctx) pr+singPredRec _ctx (DSigT _pr _ki) = fail "Singling of constraints with explicit kinds not yet supported"-singPredRec _ctx (DVarPr _n) =+singPredRec _ctx (DVarT _n) = fail "Singling of contraint variables not yet supported"-singPredRec ctx (DConPr n)+singPredRec ctx (DConT n) | n == equalityName = fail "Singling of type equality constraints not yet supported" | otherwise = do- kis <- mapM promoteType ctx+ kis <- mapM promoteTypeArg ctx let sName = singClassName n- return $ foldPred (DConPr sName) kis-singPredRec _ctx DWildCardPr = return DWildCardPr -- it just might work+ return $ applyDType (DConT sName) kis+singPredRec _ctx DWildCardT = return DWildCardT -- it just might work+singPredRec _ctx DArrowT =+ fail "(->) spotted at head of a constraint"+singPredRec _ctx (DLitT {}) =+ fail "Type-level literal spotted at head of a constraint"
src/Data/Singletons/Syntax.hs view
@@ -8,7 +8,7 @@ -} {-# LANGUAGE DataKinds, TypeFamilies, PolyKinds, DeriveDataTypeable,- StandaloneDeriving, FlexibleInstances, ConstraintKinds #-}+ FlexibleInstances, ConstraintKinds #-} module Data.Singletons.Syntax where @@ -16,10 +16,9 @@ import Data.Kind (Constraint, Type) import Language.Haskell.TH.Syntax hiding (Type) import Language.Haskell.TH.Desugar-import Data.Map.Strict ( Map )-import qualified Data.Map.Strict as Map-import Data.Set ( Set )-import Data.Semigroup (Semigroup(..))+import qualified Language.Haskell.TH.Desugar.OMap.Strict as OMap+import Language.Haskell.TH.Desugar.OMap.Strict (OMap)+import Language.Haskell.TH.Desugar.OSet (OSet) type VarPromotions = [(Name, Name)] -- from term-level name to type-level name @@ -27,7 +26,7 @@ data PromDPatInfos = PromDPatInfos { prom_dpat_vars :: VarPromotions -- Maps term-level pattern variables to their promoted, type-level counterparts.- , prom_dpat_sig_kvs :: Set Name+ , prom_dpat_sig_kvs :: OSet Name -- Kind variables bound by DSigPas. -- See Note [Explicitly binding kind variables] in Data.Singletons.Promote.Monad }@@ -49,7 +48,7 @@ data DataDecl = DataDecl Name [DTyVarBndr] [DCon] -- The parts of type synonyms that are relevant to singletons.-data TySynDecl = TySynDecl Name [DTyVarBndr]+data TySynDecl = TySynDecl Name [DTyVarBndr] DType -- The parts of open type families that are relevant to singletons. type OpenTypeFamilyDecl = TypeFamilyDecl 'Open@@ -73,7 +72,7 @@ data InstDecl ann = InstDecl { id_cxt :: DCxt , id_name :: Name , id_arg_tys :: [DType]- , id_sigs :: Map Name DType+ , id_sigs :: OMap Name DType , id_meths :: [(Name, LetDecRHS ann)] } type UClassDecl = ClassDecl Unannotated@@ -106,15 +105,15 @@ ADExp DType -- A DPat with a pattern-signature node annotated with its type-level equivalent-data ADPat = ADLitPa Lit- | ADVarPa Name- | ADConPa Name [ADPat]- | ADTildePa ADPat- | ADBangPa ADPat- | ADSigPa DType -- The promoted pattern. Will not contain any wildcards,- -- as per Note [Singling pattern signatures]- ADPat DType- | ADWildPa+data ADPat = ADLitP Lit+ | ADVarP Name+ | ADConP Name [ADPat]+ | ADTildeP ADPat+ | ADBangP ADPat+ | ADSigP DType -- The promoted pattern. Will not contain any wildcards,+ -- as per Note [Singling pattern signatures]+ ADPat DType+ | ADWildP data ADMatch = ADMatch VarPromotions ADPat ADExp data ADClause = ADClause VarPromotions@@ -145,11 +144,11 @@ type ULetDecRHS = LetDecRHS Unannotated data LetDecEnv ann = LetDecEnv- { lde_defns :: Map Name (LetDecRHS ann)- , lde_types :: Map Name DType -- type signatures- , lde_infix :: Map Name Fixity -- infix declarations- , lde_proms :: IfAnn ann (Map Name DType) () -- possibly, promotions- , lde_bound_kvs :: IfAnn ann (Map Name (Set Name)) ()+ { lde_defns :: OMap Name (LetDecRHS ann)+ , lde_types :: OMap Name DType -- type signatures+ , lde_infix :: OMap Name Fixity -- infix declarations+ , lde_proms :: IfAnn ann (OMap Name DType) () -- possibly, promotions+ , lde_bound_kvs :: IfAnn ann (OMap Name (OSet Name)) () -- The set of bound variables in scope. -- See Note [Explicitly binding kind variables] -- in Data.Singletons.Promote.Monad@@ -162,16 +161,16 @@ LetDecEnv (defns1 <> defns2) (types1 <> types2) (infx1 <> infx2) () () instance Monoid ULetDecEnv where- mempty = LetDecEnv Map.empty Map.empty Map.empty () ()+ mempty = LetDecEnv OMap.empty OMap.empty OMap.empty () () valueBinding :: Name -> ULetDecRHS -> ULetDecEnv-valueBinding n v = emptyLetDecEnv { lde_defns = Map.singleton n v }+valueBinding n v = emptyLetDecEnv { lde_defns = OMap.singleton n v } typeBinding :: Name -> DType -> ULetDecEnv-typeBinding n t = emptyLetDecEnv { lde_types = Map.singleton n t }+typeBinding n t = emptyLetDecEnv { lde_types = OMap.singleton n t } infixDecl :: Fixity -> Name -> ULetDecEnv-infixDecl f n = emptyLetDecEnv { lde_infix = Map.singleton n f }+infixDecl f n = emptyLetDecEnv { lde_infix = OMap.singleton n f } emptyLetDecEnv :: ULetDecEnv emptyLetDecEnv = mempty@@ -182,7 +181,7 @@ go acc [] = return acc go acc (DFunD name clauses : rest) = go (valueBinding name (UFunction clauses) <> acc) rest- go acc (DValD (DVarPa name) exp : rest) =+ go acc (DValD (DVarP name) exp : rest) = go (valueBinding name (UValue exp) <> acc) rest go acc (dec@(DValD {}) : rest) = do flattened <- flattenDValD dec@@ -195,9 +194,10 @@ -- See Note [DerivedDecl] data DerivedDecl (cls :: Type -> Constraint) = DerivedDecl- { ded_mb_cxt :: Maybe DCxt- , ded_type :: DType- , ded_decl :: DataDecl+ { ded_mb_cxt :: Maybe DCxt+ , ded_type :: DType+ , ded_type_tycon :: Name+ , ded_decl :: DataDecl } type DerivedEqDecl = DerivedDecl Eq@@ -219,15 +219,16 @@ a deriving clause (ded_mb_cxt) 2. The datatype, applied to some number of type arguments, as in the instance declaration (ded_type)-3. The datatype's original information, as provided through DataDecl (ded_decl)+3. The datatype name (ded_type_tycon), cached for convenience+4. The datatype's constructors (ded_cons) Why are these instances handled outside of partitionDecs? * Deriving Eq in singletons not only derives PEq/SEq instances, but it also- derives SDecide instances. This additional complication makes Eq difficult- to integrate with the other deriving machinery, so we handle it specially- in Data.Singletons.Promote and Data.Singletons.Single (depending on the task- at hand).+ derives SDecide, TestEquality, and TestCoercion instances. This additional+ complication makes Eq difficult to integrate with the other deriving+ machinery, so we handle it specially in Data.Singletons.Promote and+ Data.Singletons.Single (depending on the task at hand). * Deriving Show in singletons not only derives PShow/SShow instances, but it also derives Show instances for singletons types. To make this work, we let partitionDecs handle the PShow/SShow instances, but we also stick the
src/Data/Singletons/TH.hs view
@@ -42,13 +42,15 @@ -- ** Functions to generate 'Show' instances promoteShowInstances, promoteShowInstance, singShowInstances, singShowInstance,+ showSingInstances, showSingInstance, -- ** Utility functions+ singITyConInstances, singITyConInstance, cases, sCases, -- * Basic singleton definitions- Sing(SFalse, STrue, STuple0, STuple2, STuple3, STuple4, STuple5, STuple6, STuple7,- SLT, SEQ, SGT),+ SBool(..), STuple0(..), STuple2(..), STuple3(..), STuple4(..),+ STuple5(..), STuple6(..), STuple7(..), SOrdering(..), module Data.Singletons, -- * Auxiliary definitions@@ -66,7 +68,7 @@ PFunctor(..), SFunctor(..), PFoldable(..), SFoldable(..), PMonoid(..), SMonoid(..), PTraversable(..), STraversable(..), PApplicative(..), SApplicative(..),- (:.), (%.),+ type (.), (%.), SomeSing(..), Error, sError, ErrorSym0, ErrorSym1,@@ -189,4 +191,4 @@ where conToPat :: (Name, Int) -> DPat conToPat (name, num_fields) =- DConPa name (replicate num_fields DWildPa)+ DConP name (replicate num_fields DWildP)
src/Data/Singletons/TypeError.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE FlexibleInstances #-}@@ -29,7 +28,7 @@ module Data.Singletons.TypeError ( TypeError, sTypeError, typeError, ErrorMessage'(..), ErrorMessage, PErrorMessage,- Sing(SText, SShowType, (:%<>:), (:%$$:)), SErrorMessage,+ Sing, SErrorMessage(..), ConvertPErrorMessage, showErrorMessage, -- * Defunctionalization symbols@@ -76,18 +75,15 @@ -- | A type-level `ErrorMessage'` which uses 'Symbol' as its text kind. type PErrorMessage = ErrorMessage' Symbol -data instance Sing :: PErrorMessage -> Type where- -- It would be lovely to not have to write those (:: PErrorMessage) kind- -- ascriptions in the return types of each constructor.- -- See Trac #14111.- SText :: Sing t -> Sing ('Text t :: PErrorMessage)- SShowType :: Sing ty -> Sing ('ShowType ty :: PErrorMessage)- (:%<>:) :: Sing e1 -> Sing e2 -> Sing (e1 ':<>: e2 :: PErrorMessage)- (:%$$:) :: Sing e1 -> Sing e2 -> Sing (e1 ':$$: e2 :: PErrorMessage)+data SErrorMessage :: PErrorMessage -> Type where+ SText :: Sing t -> SErrorMessage ('Text t)+ SShowType :: Sing ty -> SErrorMessage ('ShowType ty)+ (:%<>:) :: Sing e1 -> Sing e2 -> SErrorMessage (e1 ':<>: e2)+ (:%$$:) :: Sing e1 -> Sing e2 -> SErrorMessage (e1 ':$$: e2) infixl 6 :%<>: infixl 5 :%$$: -type SErrorMessage = (Sing :: PErrorMessage -> Type)+type instance Sing = SErrorMessage instance SingKind PErrorMessage where type Demote PErrorMessage = ErrorMessage@@ -158,30 +154,18 @@ instance SingI (TextSym0 :: Symbol ~> PErrorMessage) where sing = singFun1 SText-instance SingI (TyCon1 'Text :: Symbol ~> PErrorMessage) where- sing = singFun1 SText instance SingI (ShowTypeSym0 :: t ~> PErrorMessage) where sing = singFun1 SShowType-instance SingI (TyCon1 'ShowType :: t ~> PErrorMessage) where- sing = singFun1 SShowType instance SingI ((:<>:@#@$) :: PErrorMessage ~> PErrorMessage ~> PErrorMessage) where sing = singFun2 (:%<>:)-instance SingI (TyCon2 '(:<>:) :: PErrorMessage ~> PErrorMessage ~> PErrorMessage) where- sing = singFun2 (:%<>:) instance SingI x => SingI ((:<>:@#@$$) x :: PErrorMessage ~> PErrorMessage) where sing = singFun1 (sing @x :%<>:)-instance SingI x => SingI (TyCon1 ('(:<>:) x) :: PErrorMessage ~> PErrorMessage) where- sing = singFun1 (sing @x :%<>:) instance SingI ((:$$:@#@$) :: PErrorMessage ~> PErrorMessage ~> PErrorMessage) where sing = singFun2 (:%$$:)-instance SingI (TyCon2 '(:$$:) :: PErrorMessage ~> PErrorMessage ~> PErrorMessage) where- sing = singFun2 (:%$$:) instance SingI x => SingI ((:$$:@#@$$) x :: PErrorMessage ~> PErrorMessage) where- sing = singFun1 (sing @x :%$$:)-instance SingI x => SingI (TyCon1 ('(:$$:) x) :: PErrorMessage ~> PErrorMessage) where sing = singFun1 (sing @x :%$$:) instance SingI TypeErrorSym0 where
src/Data/Singletons/TypeLits.hs view
@@ -19,8 +19,7 @@ module Data.Singletons.TypeLits ( Nat, Symbol,- Sing(SNat, SSym),- SNat, SSymbol, withKnownNat, withKnownSymbol,+ Sing, SNat(..), SSymbol(..), withKnownNat, withKnownSymbol, Error, sError, ErrorWithoutStackTrace, sErrorWithoutStackTrace, Undefined, sUndefined,
src/Data/Singletons/TypeLits/Internal.hs view
@@ -16,15 +16,14 @@ {-# LANGUAGE PolyKinds, DataKinds, TypeFamilies, FlexibleInstances, UndecidableInstances, ScopedTypeVariables, RankNTypes, GADTs, FlexibleContexts, TypeOperators, ConstraintKinds,- TemplateHaskell, StandaloneDeriving,- TypeApplications #-}+ TemplateHaskell, TypeApplications #-} {-# OPTIONS_GHC -Wno-orphans #-} module Data.Singletons.TypeLits.Internal (- Sing(..),+ Sing, Nat, Symbol,- SNat, SSymbol, withKnownNat, withKnownSymbol,+ SNat(..), SSymbol(..), withKnownNat, withKnownSymbol, Error, sError, ErrorWithoutStackTrace, sErrorWithoutStackTrace, Undefined, sUndefined,@@ -49,7 +48,6 @@ import GHC.Stack (HasCallStack) import GHC.TypeLits as TL import qualified GHC.TypeNats as TN-import Data.Proxy ( Proxy(..) ) import Numeric.Natural (Natural) import Unsafe.Coerce @@ -60,7 +58,8 @@ ---- TypeLits singletons --------------------------------------------- ---------------------------------------------------------------------- -data instance Sing (n :: Nat) = KnownNat n => SNat+data SNat (n :: Nat) = KnownNat n => SNat+type instance Sing = SNat instance KnownNat n => SingI n where sing = SNat@@ -71,7 +70,8 @@ toSing n = case TN.someNatVal n of SomeNat (_ :: Proxy n) -> SomeSing (SNat :: Sing n) -data instance Sing (n :: Symbol) = KnownSymbol n => SSym+data SSymbol (n :: Symbol) = KnownSymbol n => SSym+type instance Sing = SSymbol instance KnownSymbol n => SingI n where sing = SSym@@ -122,12 +122,6 @@ instance POrd Symbol where type (a :: Symbol) `Compare` (b :: Symbol) = a `TL.CmpSymbol` b---- | Kind-restricted synonym for 'Sing' for @Nat@s-type SNat (x :: Nat) = Sing x---- | Kind-restricted synonym for 'Sing' for @Symbol@s-type SSymbol (x :: Symbol) = Sing x -- SOrd instances instance SOrd Nat where
src/Data/Singletons/TypeRepTYPE.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RankNTypes, TypeFamilies, FlexibleInstances, GADTs, UndecidableInstances, ScopedTypeVariables,- MagicHash, TypeOperators, PolyKinds #-}+ MagicHash, TypeOperators, PolyKinds, TypeApplications #-} {-# OPTIONS_GHC -Wno-orphans #-} -----------------------------------------------------------------------------@@ -20,11 +20,10 @@ ---------------------------------------------------------------------------- module Data.Singletons.TypeRepTYPE (- Sing(STypeRep),+ Sing, -- | Here is the definition of the singleton for @'TYPE' rep@: --- -- > newtype instance Sing :: forall (rep :: RuntimeRep). TYPE rep -> Type where- -- > STypeRep :: forall (rep :: RuntimeRep) (a :: TYPE rep). TypeRep a -> Sing a+ -- > type instance Sing \@(TYPE rep) = TypeRep -- -- Instances for 'SingI', 'SingKind', 'SEq', 'SDecide', and -- 'TestCoercion' are also supplied.@@ -37,7 +36,6 @@ import Data.Singletons.Internal import Data.Singletons.Prelude.Eq import Data.Singletons.Decide-import Data.Type.Equality ((:~:)(..)) import GHC.Exts (RuntimeRep, TYPE) import Type.Reflection import Type.Reflection.Unsafe@@ -46,7 +44,7 @@ -- | A choice of singleton for the kind @'TYPE' rep@ (for some 'RuntimeRep' -- @rep@), an instantiation of which is the famous kind 'Type'. ----- Conceivably, one could generalize this instance to `Sing :: k -> Type` for+-- Conceivably, one could generalize this instance to `Sing \@k` for -- /any/ kind @k@, and remove all other 'Sing' instances. We don't adopt this -- design, however, since it is far more convenient in practice to work with -- explicit singleton values than 'TypeRep's (for instance, 'TypeRep's are@@ -55,9 +53,7 @@ -- We cannot produce explicit singleton values for everything in @'TYPE' rep@, -- however, since it is an open kind, so we reach for 'TypeRep' in this one -- particular case.-newtype instance Sing :: forall (rep :: RuntimeRep). TYPE rep -> Type where- STypeRep :: forall (rep :: RuntimeRep) (a :: TYPE rep). TypeRep a -> Sing a- deriving (Eq, Ord, Show)+type instance Sing @(TYPE rep) = TypeRep -- | A variant of 'SomeTypeRep' whose underlying 'TypeRep' is restricted to -- kind @'TYPE' rep@ (for some 'RuntimeRep' @rep@).@@ -78,15 +74,15 @@ showsPrec p (SomeTypeRepTYPE ty) = showsPrec p ty instance Typeable a => SingI (a :: TYPE rep) where- sing = STypeRep typeRep+ sing = typeRep instance SingKind (TYPE rep) where type Demote (TYPE rep) = SomeTypeRepTYPE rep- fromSing (STypeRep tr) = SomeTypeRepTYPE tr- toSing (SomeTypeRepTYPE tr) = SomeSing $ STypeRep tr+ fromSing = SomeTypeRepTYPE+ toSing (SomeTypeRepTYPE tr) = SomeSing tr instance PEq (TYPE rep) instance SEq (TYPE rep) where- STypeRep tra %== STypeRep trb =+ tra %== trb = case eqTypeRep tra trb of Just HRefl -> STrue Nothing -> unsafeCoerce SFalse@@ -94,7 +90,7 @@ -- to enable us to define this without unsafeCoerce instance SDecide (TYPE rep) where- STypeRep tra %~ STypeRep trb =+ tra %~ trb = case eqTypeRep tra trb of Just HRefl -> Proved Refl Nothing -> Disproved (\Refl -> error "Type.Reflection.eqTypeRep failed")
src/Data/Singletons/Util.hs view
@@ -9,8 +9,7 @@ {-# LANGUAGE TypeSynonymInstances, FlexibleInstances, RankNTypes, TemplateHaskell, GeneralizedNewtypeDeriving,- MultiParamTypeClasses, StandaloneDeriving,- UndecidableInstances, MagicHash, UnboxedTuples,+ MultiParamTypeClasses, UndecidableInstances, MagicHash, LambdaCase, NoMonomorphismRestriction #-} module Data.Singletons.Util where@@ -33,7 +32,6 @@ import Data.Generics import Data.Maybe import Data.Void-import Control.Monad.Fail ( MonadFail ) -- The list of types that singletons processes by default basicTypes :: [Name]@@ -92,7 +90,7 @@ qReportError = qReport True -- | Generate a new Unique-qNewUnique :: DsMonad q => q Int+qNewUnique :: DsMonad q => q Uniq qNewUnique = do Name _ flav <- qNewName "x" case flav of@@ -203,7 +201,7 @@ -- convert a number into both alphanumeric and symoblic forms uniquePrefixes :: String -- alphanumeric prefix -> String -- symbolic prefix- -> Int+ -> Uniq -> (String, String) -- (alphanum, symbolic) uniquePrefixes alpha symb n = (alpha ++ n_str, symb ++ convert n_str) where@@ -253,15 +251,6 @@ ravel [] res = res ravel (h:t) res = DAppT (DAppT DArrowT h) (ravel t res) --- | Convert a 'DPred' to a 'DType'.-predToType :: DPred -> DType-predToType (DForallPr tvbs cxt p) = DForallT tvbs cxt (predToType p)-predToType (DAppPr p t) = DAppT (predToType p) t-predToType (DSigPr p k) = DSigT (predToType p) k-predToType (DVarPr n) = DVarT n-predToType (DConPr n) = DConT n-predToType DWildCardPr = DWildCardT- -- count the number of arguments in a type countArgs :: DType -> Int countArgs ty = length args@@ -298,9 +287,10 @@ = DForallT tvbs' cxt' inner_ty' where (subst', tvbs') = mapAccumL subst_tvb subst tvbs- cxt' = map (substPred subst') cxt+ cxt' = map (substType subst') cxt inner_ty' = substType subst' inner_ty substType subst (DAppT ty1 ty2) = substType subst ty1 `DAppT` substType subst ty2+substType subst (DAppKindT ty ki) = substType subst ty `DAppKindT` substType subst ki substType subst (DSigT ty ki) = substType subst ty `DSigT` substType subst ki substType subst (DVarT n) = case Map.lookup n subst of@@ -311,22 +301,6 @@ substType _ ty@(DLitT {}) = ty substType _ ty@DWildCardT = ty -substPred :: Map Name DType -> DPred -> DPred-substPred subst pred | Map.null subst = pred-substPred subst (DForallPr tvbs cxt inner_pred)- = DForallPr tvbs' cxt' inner_pred'- where- (subst', tvbs') = mapAccumL subst_tvb subst tvbs- cxt' = map (substPred subst') cxt- inner_pred' = substPred subst' inner_pred-substPred subst (DAppPr pred ty) =- DAppPr (substPred subst pred) (substType subst ty)-substPred subst (DSigPr pred ki) =- DSigPr (substPred subst pred) (substKind subst ki)-substPred _ pred@(DVarPr {}) = pred-substPred _ pred@(DConPr {}) = pred-substPred _ pred@DWildCardPr = pred- subst_tvb :: Map Name DKind -> DTyVarBndr -> (Map Name DKind, DTyVarBndr) subst_tvb s tvb@(DPlainTV n) = (Map.delete n s, tvb) subst_tvb s (DKindedTV n k) = (Map.delete n s, DKindedTV n (substKind s k))@@ -342,34 +316,6 @@ -- apply a type to a list of type variable binders foldTypeTvbs :: DType -> [DTyVarBndr] -> DType foldTypeTvbs ty = foldType ty . map tvbToType---- apply a pred to a list of types-foldPred :: DPred -> [DType] -> DPred-foldPred = foldl DAppPr---- apply a pred to a list of type variable binders-foldPredTvbs :: DPred -> [DTyVarBndr] -> DPred-foldPredTvbs pr = foldPred pr . map tvbToType---- | Decompose an applied type into its individual components. For example, this:------ @--- Either Int Char--- @------ would be unfolded to this:------ @--- Either :| [Int, Char]--- @-unfoldType :: DType -> NonEmpty DType-unfoldType = go []- where- go :: [DType] -> DType -> NonEmpty DType- go acc (DAppT t1 t2) = go (t2:acc) t1- go acc (DSigT t _) = go acc t- go acc (DForallT _ _ t) = go acc t- go acc t = t :| acc -- Construct a data type's variable binders, possibly using fresh variables -- from the data type's kind signature.
tests/ByHand.hs view
@@ -15,7 +15,7 @@ RankNTypes, TypeOperators, MultiParamTypeClasses, FunctionalDependencies, ScopedTypeVariables, LambdaCase, TemplateHaskell, EmptyCase,- AllowAmbiguousTypes, TypeApplications, EmptyCase+ TypeApplications, EmptyCase #-} module ByHand where@@ -88,9 +88,10 @@ -- Nat -data instance Sing :: Nat -> Type where- SZero :: Sing Zero- SSucc :: Sing n -> Sing (Succ n)+data SNat :: Nat -> Type where+ SZero :: SNat Zero+ SSucc :: SNat n -> SNat (Succ n)+type instance Sing = SNat data SuccSym0 :: Nat ~> Nat type instance Apply SuccSym0 x = Succ x@@ -130,9 +131,10 @@ -- Bool -data instance Sing :: Bool -> Type where- SFalse :: Sing False- STrue :: Sing True+data SBool :: Bool -> Type where+ SFalse :: SBool False+ STrue :: SBool True+type instance Sing = SBool (&&) :: Bool -> Bool -> Bool False && _ = False@@ -161,9 +163,10 @@ -- Maybe -data instance Sing :: Maybe k -> Type where- SNothing :: Sing Nothing- SJust :: forall k (a :: k). Sing a -> Sing (Just a)+data SMaybe :: forall k. Maybe k -> Type where+ SNothing :: SMaybe Nothing+ SJust :: forall k (a :: k). Sing a -> SMaybe (Just a)+type instance Sing = SMaybe type family EqualsMaybe (a :: Maybe k) (b :: Maybe k) where EqualsMaybe Nothing Nothing = True@@ -202,9 +205,10 @@ -- List -data instance Sing :: List k -> Type where- SNil :: Sing Nil- SCons :: forall k (h :: k) (t :: List k). Sing h -> Sing t -> Sing (Cons h t)+data SList :: forall k. List k -> Type where+ SNil :: SList Nil+ SCons :: forall k (h :: k) (t :: List k). Sing h -> SList t -> SList (Cons h t)+type instance Sing = SList type NilSym0 = Nil @@ -256,9 +260,10 @@ -- Either -data instance Sing :: Either k1 k2 -> Type where- SLeft :: forall k1 (a :: k1). Sing a -> Sing (Left a)- SRight :: forall k2 (b :: k2). Sing b -> Sing (Right b)+data SEither :: forall k1 k2. Either k1 k2 -> Type where+ SLeft :: forall k1 (a :: k1). Sing a -> SEither (Left a)+ SRight :: forall k2 (b :: k2). Sing b -> SEither (Right b)+type instance Sing = SEither instance (SingI a) => SingI (Left (a :: k)) where sing = SLeft sing@@ -292,8 +297,9 @@ data Composite :: Type -> Type -> Type where MkComp :: Either (Maybe a) b -> Composite a b -data instance Sing :: Composite k1 k2 -> Type where- SMkComp :: forall k1 k2 (a :: Either (Maybe k1) k2). Sing a -> Sing (MkComp a)+data SComposite :: forall k1 k2. Composite k1 k2 -> Type where+ SMkComp :: forall k1 k2 (a :: Either (Maybe k1) k2). SEither a -> SComposite (MkComp a)+type instance Sing = SComposite instance SingI a => SingI (MkComp (a :: Either (Maybe k1) k2)) where sing = SMkComp sing@@ -314,7 +320,8 @@ -- Empty data Empty-data instance Sing :: Empty -> Type+data SEmpty :: Empty -> Type+type instance Sing = SEmpty instance SingKind Empty where type Demote Empty = Empty fromSing = \case@@ -328,10 +335,11 @@ data Rep = Nat | Maybe Rep | Vec Rep Nat -data instance Sing :: Type -> Type where- SNat :: Sing Nat- SMaybe :: Sing a -> Sing (Maybe a)- SVec :: Sing a -> Sing n -> Sing (Vec a n)+data SRep :: Type -> Type where+ SNat :: SRep Nat+ SMaybe :: SRep a -> SRep (Maybe a)+ SVec :: SRep a -> SNat n -> SRep (Vec a n)+type instance Sing = SRep instance SingI Nat where sing = SNat@@ -723,7 +731,7 @@ callImpNat :: forall n m. Sing n -> Sing m -> Sing (n + m) callImpNat sn sm = withSingI sn (impNat (Proxy :: Proxy n) sm) -instance Show (Sing (n :: Nat)) where+instance Show (SNat n) where show SZero = "SZero" show (SSucc n) = "SSucc (" ++ (show n) ++ ")" @@ -857,8 +865,9 @@ ------------------------------------------------------------ -data G a where+data G :: Type -> Type where MkG :: G Bool -data instance Sing :: G a -> Type where- SMkG :: Sing MkG+data SG :: forall a. G a -> Type where+ SMkG :: SG MkG+type instance Sing = SG
tests/ByHand2.hs view
@@ -31,13 +31,15 @@ Succ _ == Zero = False Succ x == Succ y = x == y -data instance Sing :: Bool -> Type where- SFalse :: Sing 'False- STrue :: Sing 'True+data SBool :: Bool -> Type where+ SFalse :: SBool 'False+ STrue :: SBool 'True+type instance Sing = SBool -data instance Sing :: Nat -> Type where- SZero :: Sing 'Zero- SSucc :: Sing n -> Sing ('Succ n)+data SNat :: Nat -> Type where+ SZero :: SNat 'Zero+ SSucc :: SNat n -> SNat ('Succ n)+type instance Sing = SNat type family Not (x :: Bool) :: Bool where Not 'True = 'False@@ -112,10 +114,11 @@ type Compare ('Succ x) 'Zero = 'GT type Compare ('Succ x) ('Succ y) = Compare x y -data instance Sing :: Ordering -> Type where- SLT :: Sing 'LT- SEQ :: Sing 'EQ- SGT :: Sing 'GT+data SOrdering :: Ordering -> Type where+ SLT :: SOrdering 'LT+ SEQ :: SOrdering 'EQ+ SGT :: SOrdering 'GT+type instance Sing = SOrdering instance PEq Ordering where type 'LT == 'LT = 'True
tests/SingletonsTestSuite.hs view
@@ -2,16 +2,13 @@ main ) where -import Test.Tasty ( TestTree, defaultMain, testGroup )+import Test.Tasty ( DependencyType(..), TestTree+ , after, defaultMain, testGroup ) import SingletonsTestSuiteUtils ( compileAndDumpStdTest, compileAndDumpTest- , testCompileAndDumpGroup, ghcOpts- -- , cleanFiles- )+ , testCompileAndDumpGroup, ghcOpts ) main :: IO ()-main = do--- cleanFiles We really need to parallelize the testsuite.- defaultMain tests+main = defaultMain tests tests :: TestTree tests =@@ -21,29 +18,44 @@ , compileAndDumpStdTest "Empty" , compileAndDumpStdTest "Maybe" , compileAndDumpStdTest "BoxUnBox"- , compileAndDumpStdTest "Operators"- , compileAndDumpStdTest "HigherOrder"+ , afterSingletonsNat .+ compileAndDumpStdTest "Operators"+ , afterSingletonsNat .+ compileAndDumpStdTest "HigherOrder" , compileAndDumpStdTest "Contains"- , compileAndDumpStdTest "AsPattern"- , compileAndDumpStdTest "DataValues"- , compileAndDumpStdTest "EqInstances"+ , afterSingletonsNat .+ compileAndDumpStdTest "AsPattern"+ , afterSingletonsNat .+ compileAndDumpStdTest "DataValues"+ , after AllSucceed "$3 == \"Empty\"" .+ after AllSucceed "$3 == \"Operators\"" .+ compileAndDumpStdTest "EqInstances" , compileAndDumpStdTest "CaseExpressions"- , compileAndDumpStdTest "Star"- , compileAndDumpStdTest "ReturnFunc"+ , afterSingletonsNat .+ compileAndDumpStdTest "Star"+ , afterSingletonsNat .+ compileAndDumpStdTest "ReturnFunc" , compileAndDumpStdTest "Lambdas"- , compileAndDumpStdTest "LambdasComprehensive"+ , afterSingletonsNat .+ compileAndDumpStdTest "LambdasComprehensive" , compileAndDumpStdTest "Error" , compileAndDumpStdTest "TopLevelPatterns"- , compileAndDumpStdTest "LetStatements"+ , afterSingletonsNat .+ compileAndDumpStdTest "LetStatements" , compileAndDumpStdTest "LambdaCase"- , compileAndDumpStdTest "Sections"- , compileAndDumpStdTest "PatternMatching"+ , afterSingletonsNat .+ compileAndDumpStdTest "Sections"+ , afterSingletonsNat .+ compileAndDumpStdTest "PatternMatching" , compileAndDumpStdTest "Records" , compileAndDumpStdTest "T29" , compileAndDumpStdTest "T33" , compileAndDumpStdTest "T54"- , compileAndDumpStdTest "Classes"- , compileAndDumpStdTest "Classes2"+ , afterSingletonsNat .+ compileAndDumpStdTest "Classes"+ , afterSingletonsNat .+ after AllSucceed "$3 == \"Classes\"" .+ compileAndDumpStdTest "Classes2" , compileAndDumpStdTest "FunDeps" , compileAndDumpStdTest "T78" , compileAndDumpStdTest "OrdDeriving"@@ -102,12 +114,16 @@ , compileAndDumpStdTest "FunctorLikeDeriving" , compileAndDumpStdTest "T353" , compileAndDumpStdTest "T358"+ , compileAndDumpStdTest "T367" , compileAndDumpStdTest "T371"+ , compileAndDumpStdTest "T376"+ , compileAndDumpStdTest "T402" ], testCompileAndDumpGroup "Promote" [ compileAndDumpStdTest "Constructors" , compileAndDumpStdTest "GenDefunSymbols"- , compileAndDumpStdTest "Newtypes"+ , afterSingletonsNat .+ compileAndDumpStdTest "Newtypes" , compileAndDumpStdTest "Pragmas" , compileAndDumpStdTest "Prelude" , compileAndDumpStdTest "T180"@@ -115,9 +131,13 @@ ], testGroup "Database client" [ compileAndDumpTest "GradingClient/Database" ghcOpts- , compileAndDumpTest "GradingClient/Main" ghcOpts+ , after AllSucceed "$3 == \"Database\"" $+ compileAndDumpTest "GradingClient/Main" ghcOpts ], testCompileAndDumpGroup "InsertionSort" [ compileAndDumpStdTest "InsertionSortImp" ] ]++afterSingletonsNat :: TestTree -> TestTree+afterSingletonsNat = after AllSucceed "$3 == \"Nat\""
tests/SingletonsTestSuiteUtils.hs view
@@ -2,6 +2,8 @@ {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TypeApplications #-} module SingletonsTestSuiteUtils ( compileAndDumpTest , compileAndDumpStdTest@@ -12,7 +14,10 @@ import Build_singletons ( ghcPath, ghcFlags, rootDir ) import Control.Exception ( Exception, throw )+import Data.Foldable ( asum ) import Data.List ( intercalate )+import Data.Text ( Text )+import Data.String ( IsString(fromString) ) import System.Exit ( ExitCode(..) ) import System.FilePath ( takeBaseName, pathSeparator ) import System.IO ( IOMode(..), hGetContents, openFile )@@ -22,6 +27,7 @@ , callCommand ) import Test.Tasty ( TestTree, testGroup ) import Test.Tasty.Golden ( goldenVsFileDiff )+import qualified Turtle -- Some infractructure for handling external process errors newtype ProcessException = ProcessException String@@ -33,7 +39,7 @@ goldenPath = rootDir </> "tests/compile-and-dump/" ghcVersion :: String-ghcVersion = ".ghc86"+ghcVersion = ".ghc88" -- GHC options used when running the tests ghcOpts :: [String]@@ -71,8 +77,8 @@ , "-XNoStarIsType" ] --- Compile a test using specified GHC options. Save output to file, filter with--- sed and compare it with golden file. This function also builds golden file+-- Compile a test using specified GHC options. Save output to file, normalize+-- and compare it with golden file. This function also builds golden file -- from a template file. Putting it here is a bit of a hack but it's easy and it -- works. --@@ -100,7 +106,7 @@ , std_err = UseHandle hActualFile , cwd = Just goldenPath } _ <- waitForProcess pid -- see Note [Ignore exit code]- filterWithSed actualFilePath -- see Note [Normalization with sed]+ normalizeOutput actualFilePath -- see Note [Output normalization] buildGoldenFile templateFilePath goldenFilePath return () @@ -137,10 +143,10 @@ -- -w - Ignore all white space. -- -B - Ignore changes whose lines are all blank. --- Note [Normalization with sed]+-- Note [Output normalization] -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ----- Output file is normalized with sed. Line numbers generated in splices:+-- Output file is normalized inplace. Line numbers generated in splices: -- -- Foo:(40,3)-(42,4) -- Foo.hs:7:3:@@ -155,29 +161,27 @@ -- This allows to insert comments into test file without the need to modify the -- golden file to adjust line numbers. ----- Note that GNU sed (on Linux) and BSD sed (on MacOS) are slightly different.--- We use conditional compilation to deal with this. -filterWithSed :: FilePath -> IO ()-filterWithSed file = runProcessWithOpts CreatePipe "sed"-#ifdef darwin_HOST_OS- [ "-i", "''"-#else- [ "-i"-#endif- , "-e", "'s/([0-9]*,[0-9]*)-([0-9]*,[0-9]*)/(0,0)-(0,0)/g'"- , "-e", "'s/:[0-9][0-9]*:[0-9][0-9]*/:0:0/g'"- , "-e", "'s/:[0-9]*:[0-9]*-[0-9]*/:0:0:/g'"- , "-e", "'s/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/0123456789/g'"- , "-e", "'s/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/0123456789876543210/g'"- , "-e", "'s/[!#$%&*+./>]\\{10\\}/%%%%%%%%%%/g'"- , "-e", "'s/[!#$%&*+./>]\\{19\\}/%%%%%%%%%%%%%%%%%%%/g'"- -- Remove pretty-printed references to the singletons package- -- (e.g., turn `singletons-2.4.1:Sing` into `Sing`) to make the output- -- more stable.- , "-e", "'s/singletons-[0-9]\\+\\(\\.[0-9]\\+\\)*://g'"- , file- ]+normalizeOutput :: FilePath -> IO ()+normalizeOutput file = Turtle.inplace pat (fromString file)+ where+ pat :: Turtle.Pattern Text+ pat = asum+ [ "(0,0)-(0,0)" <$ numPair <* "-" <* numPair+ , ":0:0:" <$ ":" <* d <* ":" <* d <* "-" <* d+ , ":0:0" <$ ":" <* d <* ":" <* d+ , fromString @Text . numPeriod <$> Turtle.lowerBounded 10 Turtle.digit+ , fromString @Text . ('%' <$) <$> Turtle.lowerBounded 10 punctSym+ -- Remove pretty-printed references to the singletons package+ -- (e.g., turn `singletons-2.4.1:Sing` into `Sing`) to make the output+ -- more stable.+ , "" <$ "singletons-" <* verNum <* ":"+ ]+ verNum = d `Turtle.sepBy` Turtle.char '.'+ numPair = () <$ "(" <* d <* "," <* d <* ")"+ punctSym = Turtle.oneOf "!#$%&*+./>"+ numPeriod = zipWith const (cycle "0123456789876543210")+ d = Turtle.some Turtle.digit buildGoldenFile :: FilePath -> FilePath -> IO () buildGoldenFile templateFilePath goldenFilePath = do
− tests/compile-and-dump/GradingClient/Database.ghc86.template
@@ -1,2610 +0,0 @@-GradingClient/Database.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Nat- = Zero | Succ Nat- deriving (Eq, Ord) |]- ======>- data Nat- = Zero | Succ Nat- deriving (Eq, Ord)- type ZeroSym0 = Zero- type SuccSym1 (t0123456789876543210 :: Nat) =- Succ t0123456789876543210- instance SuppressUnusedWarnings SuccSym0 where- suppressUnusedWarnings = snd (((,) SuccSym0KindInference) ())- data SuccSym0 :: (~>) Nat Nat- where- SuccSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>- SuccSym0 t0123456789876543210- type instance Apply SuccSym0 t0123456789876543210 = Succ t0123456789876543210- type family Compare_0123456789876543210 (a :: Nat) (a :: Nat) :: Ordering where- Compare_0123456789876543210 Zero Zero = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 (Succ a_0123456789876543210) (Succ b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])- Compare_0123456789876543210 Zero (Succ _) = LTSym0- Compare_0123456789876543210 (Succ _) Zero = GTSym0- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Nat Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd Nat where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family Equals_0123456789876543210 (a :: Nat) (b :: Nat) :: Bool where- Equals_0123456789876543210 Zero Zero = TrueSym0- Equals_0123456789876543210 (Succ a) (Succ b) = (==) a b- Equals_0123456789876543210 (_ :: Nat) (_ :: Nat) = FalseSym0- instance PEq Nat where- type (==) a b = Equals_0123456789876543210 a b- data instance Sing :: Nat -> Type- where- SZero :: Sing Zero- SSucc :: forall (n :: Nat). (Sing (n :: Nat)) -> Sing (Succ n)- type SNat = (Sing :: Nat -> Type)- instance SingKind Nat where- type Demote Nat = Nat- fromSing SZero = Zero- fromSing (SSucc b) = Succ (fromSing b)- toSing Zero = SomeSing SZero- toSing (Succ (b :: Demote Nat))- = case toSing b :: SomeSing Nat of {- SomeSing c -> SomeSing (SSucc c) }- instance SOrd Nat => SOrd Nat where- sCompare ::- forall (t1 :: Nat) (t2 :: Nat).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)- -> Type) t1) t2)- sCompare SZero SZero- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- SNil- sCompare- (SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil)- sCompare SZero (SSucc _) = SLT- sCompare (SSucc _) SZero = SGT- instance SEq Nat => SEq Nat where- (%==) SZero SZero = STrue- (%==) SZero (SSucc _) = SFalse- (%==) (SSucc _) SZero = SFalse- (%==) (SSucc a) (SSucc b) = ((%==) a) b- instance SDecide Nat => SDecide Nat where- (%~) SZero SZero = Proved Refl- (%~) SZero (SSucc _) = Disproved (\ x -> case x of)- (%~) (SSucc _) SZero = Disproved (\ x -> case x of)- (%~) (SSucc a) (SSucc b)- = case ((%~) a) b of- Proved Refl -> Proved Refl- Disproved contra- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- instance SingI Zero where- sing = SZero- instance SingI n => SingI (Succ (n :: Nat)) where- sing = SSucc sing- instance SingI (SuccSym0 :: (~>) Nat Nat) where- sing = (singFun1 @SuccSym0) SSucc- instance SingI (TyCon1 Succ :: (~>) Nat Nat) where- sing = (singFun1 @(TyCon1 Succ)) SSucc-GradingClient/Database.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| append :: Schema -> Schema -> Schema- append (Sch s1) (Sch s2) = Sch (s1 ++ s2)- attrNotIn :: Attribute -> Schema -> Bool- attrNotIn _ (Sch []) = True- attrNotIn (Attr name u) (Sch ((Attr name' _) : t))- = (name /= name') && (attrNotIn (Attr name u) (Sch t))- disjoint :: Schema -> Schema -> Bool- disjoint (Sch []) _ = True- disjoint (Sch (h : t)) s = (attrNotIn h s) && (disjoint (Sch t) s)- occurs :: [AChar] -> Schema -> Bool- occurs _ (Sch []) = False- occurs name (Sch ((Attr name' _) : attrs))- = name == name' || occurs name (Sch attrs)- lookup :: [AChar] -> Schema -> U- lookup _ (Sch []) = undefined- lookup name (Sch ((Attr name' u) : attrs))- = if name == name' then u else lookup name (Sch attrs)- - data U- = BOOL | STRING | NAT | VEC U Nat- deriving (Read, Eq, Show)- data AChar- = CA |- CB |- CC |- CD |- CE |- CF |- CG |- CH |- CI |- CJ |- CK |- CL |- CM |- CN |- CO |- CP |- CQ |- CR |- CS |- CT |- CU |- CV |- CW |- CX |- CY |- CZ- deriving (Read, Show, Eq)- data Attribute = Attr [AChar] U- data Schema = Sch [Attribute] |]- ======>- data U- = BOOL | STRING | NAT | VEC U Nat- deriving (Read, Eq, Show)- data AChar- = CA |- CB |- CC |- CD |- CE |- CF |- CG |- CH |- CI |- CJ |- CK |- CL |- CM |- CN |- CO |- CP |- CQ |- CR |- CS |- CT |- CU |- CV |- CW |- CX |- CY |- CZ- deriving (Read, Show, Eq)- data Attribute = Attr [AChar] U- data Schema = Sch [Attribute]- append :: Schema -> Schema -> Schema- append (Sch s1) (Sch s2) = Sch (s1 ++ s2)- attrNotIn :: Attribute -> Schema -> Bool- attrNotIn _ (Sch []) = True- attrNotIn (Attr name u) (Sch (Attr name' _ : t))- = ((name /= name') && (attrNotIn ((Attr name) u)) (Sch t))- disjoint :: Schema -> Schema -> Bool- disjoint (Sch []) _ = True- disjoint (Sch (h : t)) s- = ((attrNotIn h) s && (disjoint (Sch t)) s)- occurs :: [AChar] -> Schema -> Bool- occurs _ (Sch []) = False- occurs name (Sch (Attr name' _ : attrs))- = ((name == name') || (occurs name) (Sch attrs))- lookup :: [AChar] -> Schema -> U- lookup _ (Sch []) = undefined- lookup name (Sch (Attr name' u : attrs))- = if (name == name') then u else (lookup name) (Sch attrs)- type BOOLSym0 = BOOL- type STRINGSym0 = STRING- type NATSym0 = NAT- type VECSym2 (t0123456789876543210 :: U) (t0123456789876543210 :: Nat) =- VEC t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (VECSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) VECSym1KindInference) ())- data VECSym1 (t0123456789876543210 :: U) :: (~>) Nat U- where- VECSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (VECSym1 t0123456789876543210) arg) (VECSym2 t0123456789876543210 arg) =>- VECSym1 t0123456789876543210 t0123456789876543210- type instance Apply (VECSym1 t0123456789876543210) t0123456789876543210 = VEC t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings VECSym0 where- suppressUnusedWarnings = snd (((,) VECSym0KindInference) ())- data VECSym0 :: (~>) U ((~>) Nat U)- where- VECSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply VECSym0 arg) (VECSym1 arg) =>- VECSym0 t0123456789876543210- type instance Apply VECSym0 t0123456789876543210 = VECSym1 t0123456789876543210- type CASym0 = CA- type CBSym0 = CB- type CCSym0 = CC- type CDSym0 = CD- type CESym0 = CE- type CFSym0 = CF- type CGSym0 = CG- type CHSym0 = CH- type CISym0 = CI- type CJSym0 = CJ- type CKSym0 = CK- type CLSym0 = CL- type CMSym0 = CM- type CNSym0 = CN- type COSym0 = CO- type CPSym0 = CP- type CQSym0 = CQ- type CRSym0 = CR- type CSSym0 = CS- type CTSym0 = CT- type CUSym0 = CU- type CVSym0 = CV- type CWSym0 = CW- type CXSym0 = CX- type CYSym0 = CY- type CZSym0 = CZ- type AttrSym2 (t0123456789876543210 :: [AChar]) (t0123456789876543210 :: U) =- Attr t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (AttrSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) AttrSym1KindInference) ())- data AttrSym1 (t0123456789876543210 :: [AChar]) :: (~>) U Attribute- where- AttrSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (AttrSym1 t0123456789876543210) arg) (AttrSym2 t0123456789876543210 arg) =>- AttrSym1 t0123456789876543210 t0123456789876543210- type instance Apply (AttrSym1 t0123456789876543210) t0123456789876543210 = Attr t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings AttrSym0 where- suppressUnusedWarnings = snd (((,) AttrSym0KindInference) ())- data AttrSym0 :: (~>) [AChar] ((~>) U Attribute)- where- AttrSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply AttrSym0 arg) (AttrSym1 arg) =>- AttrSym0 t0123456789876543210- type instance Apply AttrSym0 t0123456789876543210 = AttrSym1 t0123456789876543210- type SchSym1 (t0123456789876543210 :: [Attribute]) =- Sch t0123456789876543210- instance SuppressUnusedWarnings SchSym0 where- suppressUnusedWarnings = snd (((,) SchSym0KindInference) ())- data SchSym0 :: (~>) [Attribute] Schema- where- SchSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply SchSym0 arg) (SchSym1 arg) =>- SchSym0 t0123456789876543210- type instance Apply SchSym0 t0123456789876543210 = Sch t0123456789876543210- type Let0123456789876543210Scrutinee_0123456789876543210Sym4 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210 =- Let0123456789876543210Scrutinee_0123456789876543210 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym3 u0123456789876543210 name'0123456789876543210 name0123456789876543210) where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym3KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym3KindInference :: forall name0123456789876543210- name'0123456789876543210- u0123456789876543210- attrs0123456789876543210- arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name0123456789876543210 name'0123456789876543210 u0123456789876543210 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210- type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym3 u0123456789876543210 name'0123456789876543210 name0123456789876543210) attrs0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 u0123456789876543210 name'0123456789876543210 name0123456789876543210 attrs0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name'0123456789876543210 name0123456789876543210) where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210 u0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference :: forall name0123456789876543210- name'0123456789876543210- u0123456789876543210- arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210 u0123456789876543210- type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name'0123456789876543210 name0123456789876543210) u0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym3 name'0123456789876543210 name0123456789876543210 u0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210 name'0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference :: forall name0123456789876543210- name'0123456789876543210- arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210 name'0123456789876543210- type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) name'0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall name0123456789876543210- arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210- type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210- type family Let0123456789876543210Scrutinee_0123456789876543210 name name' u attrs where- Let0123456789876543210Scrutinee_0123456789876543210 name name' u attrs = Apply (Apply (==@#@$) name) name'- type family Case_0123456789876543210 name name' u attrs t where- Case_0123456789876543210 name name' u attrs 'True = u- Case_0123456789876543210 name name' u attrs 'False = Apply (Apply LookupSym0 name) (Apply SchSym0 attrs)- type LookupSym2 (a0123456789876543210 :: [AChar]) (a0123456789876543210 :: Schema) =- Lookup a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (LookupSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) LookupSym1KindInference) ())- data LookupSym1 (a0123456789876543210 :: [AChar]) :: (~>) Schema U- where- LookupSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (LookupSym1 a0123456789876543210) arg) (LookupSym2 a0123456789876543210 arg) =>- LookupSym1 a0123456789876543210 a0123456789876543210- type instance Apply (LookupSym1 a0123456789876543210) a0123456789876543210 = Lookup a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings LookupSym0 where- suppressUnusedWarnings = snd (((,) LookupSym0KindInference) ())- data LookupSym0 :: (~>) [AChar] ((~>) Schema U)- where- LookupSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply LookupSym0 arg) (LookupSym1 arg) =>- LookupSym0 a0123456789876543210- type instance Apply LookupSym0 a0123456789876543210 = LookupSym1 a0123456789876543210- type OccursSym2 (a0123456789876543210 :: [AChar]) (a0123456789876543210 :: Schema) =- Occurs a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (OccursSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) OccursSym1KindInference) ())- data OccursSym1 (a0123456789876543210 :: [AChar]) :: (~>) Schema Bool- where- OccursSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (OccursSym1 a0123456789876543210) arg) (OccursSym2 a0123456789876543210 arg) =>- OccursSym1 a0123456789876543210 a0123456789876543210- type instance Apply (OccursSym1 a0123456789876543210) a0123456789876543210 = Occurs a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings OccursSym0 where- suppressUnusedWarnings = snd (((,) OccursSym0KindInference) ())- data OccursSym0 :: (~>) [AChar] ((~>) Schema Bool)- where- OccursSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply OccursSym0 arg) (OccursSym1 arg) =>- OccursSym0 a0123456789876543210- type instance Apply OccursSym0 a0123456789876543210 = OccursSym1 a0123456789876543210- type AttrNotInSym2 (a0123456789876543210 :: Attribute) (a0123456789876543210 :: Schema) =- AttrNotIn a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (AttrNotInSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) AttrNotInSym1KindInference) ())- data AttrNotInSym1 (a0123456789876543210 :: Attribute) :: (~>) Schema Bool- where- AttrNotInSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (AttrNotInSym1 a0123456789876543210) arg) (AttrNotInSym2 a0123456789876543210 arg) =>- AttrNotInSym1 a0123456789876543210 a0123456789876543210- type instance Apply (AttrNotInSym1 a0123456789876543210) a0123456789876543210 = AttrNotIn a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings AttrNotInSym0 where- suppressUnusedWarnings = snd (((,) AttrNotInSym0KindInference) ())- data AttrNotInSym0 :: (~>) Attribute ((~>) Schema Bool)- where- AttrNotInSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply AttrNotInSym0 arg) (AttrNotInSym1 arg) =>- AttrNotInSym0 a0123456789876543210- type instance Apply AttrNotInSym0 a0123456789876543210 = AttrNotInSym1 a0123456789876543210- type DisjointSym2 (a0123456789876543210 :: Schema) (a0123456789876543210 :: Schema) =- Disjoint a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (DisjointSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) DisjointSym1KindInference) ())- data DisjointSym1 (a0123456789876543210 :: Schema) :: (~>) Schema Bool- where- DisjointSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (DisjointSym1 a0123456789876543210) arg) (DisjointSym2 a0123456789876543210 arg) =>- DisjointSym1 a0123456789876543210 a0123456789876543210- type instance Apply (DisjointSym1 a0123456789876543210) a0123456789876543210 = Disjoint a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings DisjointSym0 where- suppressUnusedWarnings = snd (((,) DisjointSym0KindInference) ())- data DisjointSym0 :: (~>) Schema ((~>) Schema Bool)- where- DisjointSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply DisjointSym0 arg) (DisjointSym1 arg) =>- DisjointSym0 a0123456789876543210- type instance Apply DisjointSym0 a0123456789876543210 = DisjointSym1 a0123456789876543210- type AppendSym2 (a0123456789876543210 :: Schema) (a0123456789876543210 :: Schema) =- Append a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (AppendSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) AppendSym1KindInference) ())- data AppendSym1 (a0123456789876543210 :: Schema) :: (~>) Schema Schema- where- AppendSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (AppendSym1 a0123456789876543210) arg) (AppendSym2 a0123456789876543210 arg) =>- AppendSym1 a0123456789876543210 a0123456789876543210- type instance Apply (AppendSym1 a0123456789876543210) a0123456789876543210 = Append a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings AppendSym0 where- suppressUnusedWarnings = snd (((,) AppendSym0KindInference) ())- data AppendSym0 :: (~>) Schema ((~>) Schema Schema)- where- AppendSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply AppendSym0 arg) (AppendSym1 arg) =>- AppendSym0 a0123456789876543210- type instance Apply AppendSym0 a0123456789876543210 = AppendSym1 a0123456789876543210- type family Lookup (a :: [AChar]) (a :: Schema) :: U where- Lookup _ (Sch '[]) = UndefinedSym0- Lookup name (Sch ( '(:) (Attr name' u) attrs)) = Case_0123456789876543210 name name' u attrs (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs)- type family Occurs (a :: [AChar]) (a :: Schema) :: Bool where- Occurs _ (Sch '[]) = FalseSym0- Occurs name (Sch ( '(:) (Attr name' _) attrs)) = Apply (Apply (||@#@$) (Apply (Apply (==@#@$) name) name')) (Apply (Apply OccursSym0 name) (Apply SchSym0 attrs))- type family AttrNotIn (a :: Attribute) (a :: Schema) :: Bool where- AttrNotIn _ (Sch '[]) = TrueSym0- AttrNotIn (Attr name u) (Sch ( '(:) (Attr name' _) t)) = Apply (Apply (&&@#@$) (Apply (Apply (/=@#@$) name) name')) (Apply (Apply AttrNotInSym0 (Apply (Apply AttrSym0 name) u)) (Apply SchSym0 t))- type family Disjoint (a :: Schema) (a :: Schema) :: Bool where- Disjoint (Sch '[]) _ = TrueSym0- Disjoint (Sch ( '(:) h t)) s = Apply (Apply (&&@#@$) (Apply (Apply AttrNotInSym0 h) s)) (Apply (Apply DisjointSym0 (Apply SchSym0 t)) s)- type family Append (a :: Schema) (a :: Schema) :: Schema where- Append (Sch s1) (Sch s2) = Apply SchSym0 (Apply (Apply (++@#@$) s1) s2)- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: U) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 _ BOOL a_0123456789876543210 = Apply (Apply ShowStringSym0 "BOOL") a_0123456789876543210- ShowsPrec_0123456789876543210 _ STRING a_0123456789876543210 = Apply (Apply ShowStringSym0 "STRING") a_0123456789876543210- ShowsPrec_0123456789876543210 _ NAT a_0123456789876543210 = Apply (Apply ShowStringSym0 "NAT") a_0123456789876543210- ShowsPrec_0123456789876543210 p_0123456789876543210 (VEC arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "VEC ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: U) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: U) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) U ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) U ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow U where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: AChar) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 _ CA a_0123456789876543210 = Apply (Apply ShowStringSym0 "CA") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CB a_0123456789876543210 = Apply (Apply ShowStringSym0 "CB") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CC a_0123456789876543210 = Apply (Apply ShowStringSym0 "CC") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CD a_0123456789876543210 = Apply (Apply ShowStringSym0 "CD") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CE a_0123456789876543210 = Apply (Apply ShowStringSym0 "CE") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CF a_0123456789876543210 = Apply (Apply ShowStringSym0 "CF") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CG a_0123456789876543210 = Apply (Apply ShowStringSym0 "CG") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CH a_0123456789876543210 = Apply (Apply ShowStringSym0 "CH") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CI a_0123456789876543210 = Apply (Apply ShowStringSym0 "CI") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CJ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CJ") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CK a_0123456789876543210 = Apply (Apply ShowStringSym0 "CK") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CL a_0123456789876543210 = Apply (Apply ShowStringSym0 "CL") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CM a_0123456789876543210 = Apply (Apply ShowStringSym0 "CM") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CN a_0123456789876543210 = Apply (Apply ShowStringSym0 "CN") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CO a_0123456789876543210 = Apply (Apply ShowStringSym0 "CO") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CP a_0123456789876543210 = Apply (Apply ShowStringSym0 "CP") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CQ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CQ") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CR a_0123456789876543210 = Apply (Apply ShowStringSym0 "CR") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CS a_0123456789876543210 = Apply (Apply ShowStringSym0 "CS") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CT a_0123456789876543210 = Apply (Apply ShowStringSym0 "CT") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CU a_0123456789876543210 = Apply (Apply ShowStringSym0 "CU") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CV a_0123456789876543210 = Apply (Apply ShowStringSym0 "CV") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CW a_0123456789876543210 = Apply (Apply ShowStringSym0 "CW") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CX a_0123456789876543210 = Apply (Apply ShowStringSym0 "CX") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CY a_0123456789876543210 = Apply (Apply ShowStringSym0 "CY") a_0123456789876543210- ShowsPrec_0123456789876543210 _ CZ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CZ") a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: AChar) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: AChar) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) AChar ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) AChar ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow AChar where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family Equals_0123456789876543210 (a :: U) (b :: U) :: Bool where- Equals_0123456789876543210 BOOL BOOL = TrueSym0- Equals_0123456789876543210 STRING STRING = TrueSym0- Equals_0123456789876543210 NAT NAT = TrueSym0- Equals_0123456789876543210 (VEC a a) (VEC b b) = (&&) ((==) a b) ((==) a b)- Equals_0123456789876543210 (_ :: U) (_ :: U) = FalseSym0- instance PEq U where- type (==) a b = Equals_0123456789876543210 a b- type family Equals_0123456789876543210 (a :: AChar) (b :: AChar) :: Bool where- Equals_0123456789876543210 CA CA = TrueSym0- Equals_0123456789876543210 CB CB = TrueSym0- Equals_0123456789876543210 CC CC = TrueSym0- Equals_0123456789876543210 CD CD = TrueSym0- Equals_0123456789876543210 CE CE = TrueSym0- Equals_0123456789876543210 CF CF = TrueSym0- Equals_0123456789876543210 CG CG = TrueSym0- Equals_0123456789876543210 CH CH = TrueSym0- Equals_0123456789876543210 CI CI = TrueSym0- Equals_0123456789876543210 CJ CJ = TrueSym0- Equals_0123456789876543210 CK CK = TrueSym0- Equals_0123456789876543210 CL CL = TrueSym0- Equals_0123456789876543210 CM CM = TrueSym0- Equals_0123456789876543210 CN CN = TrueSym0- Equals_0123456789876543210 CO CO = TrueSym0- Equals_0123456789876543210 CP CP = TrueSym0- Equals_0123456789876543210 CQ CQ = TrueSym0- Equals_0123456789876543210 CR CR = TrueSym0- Equals_0123456789876543210 CS CS = TrueSym0- Equals_0123456789876543210 CT CT = TrueSym0- Equals_0123456789876543210 CU CU = TrueSym0- Equals_0123456789876543210 CV CV = TrueSym0- Equals_0123456789876543210 CW CW = TrueSym0- Equals_0123456789876543210 CX CX = TrueSym0- Equals_0123456789876543210 CY CY = TrueSym0- Equals_0123456789876543210 CZ CZ = TrueSym0- Equals_0123456789876543210 (_ :: AChar) (_ :: AChar) = FalseSym0- instance PEq AChar where- type (==) a b = Equals_0123456789876543210 a b- sLookup ::- forall (t :: [AChar]) (t :: Schema).- Sing t -> Sing t -> Sing (Apply (Apply LookupSym0 t) t :: U)- sOccurs ::- forall (t :: [AChar]) (t :: Schema).- Sing t -> Sing t -> Sing (Apply (Apply OccursSym0 t) t :: Bool)- sAttrNotIn ::- forall (t :: Attribute) (t :: Schema).- Sing t -> Sing t -> Sing (Apply (Apply AttrNotInSym0 t) t :: Bool)- sDisjoint ::- forall (t :: Schema) (t :: Schema).- Sing t -> Sing t -> Sing (Apply (Apply DisjointSym0 t) t :: Bool)- sAppend ::- forall (t :: Schema) (t :: Schema).- Sing t -> Sing t -> Sing (Apply (Apply AppendSym0 t) t :: Schema)- sLookup _ (SSch SNil) = sUndefined- sLookup- (sName :: Sing name)- (SSch (SCons (SAttr (sName' :: Sing name') (sU :: Sing u))- (sAttrs :: Sing attrs)))- = let- sScrutinee_0123456789876543210 ::- Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs)- sScrutinee_0123456789876543210- = (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sName))- sName'- in (case sScrutinee_0123456789876543210 of- STrue -> sU- SFalse- -> (applySing ((applySing ((singFun2 @LookupSym0) sLookup)) sName))- ((applySing ((singFun1 @SchSym0) SSch)) sAttrs)) ::- Sing (Case_0123456789876543210 name name' u attrs (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs) :: U)- sOccurs _ (SSch SNil) = SFalse- sOccurs- (sName :: Sing name)- (SSch (SCons (SAttr (sName' :: Sing name') _)- (sAttrs :: Sing attrs)))- = (applySing- ((applySing ((singFun2 @(||@#@$)) (%||)))- ((applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sName))- sName')))- ((applySing ((applySing ((singFun2 @OccursSym0) sOccurs)) sName))- ((applySing ((singFun1 @SchSym0) SSch)) sAttrs))- sAttrNotIn _ (SSch SNil) = STrue- sAttrNotIn- (SAttr (sName :: Sing name) (sU :: Sing u))- (SSch (SCons (SAttr (sName' :: Sing name') _) (sT :: Sing t)))- = (applySing- ((applySing ((singFun2 @(&&@#@$)) (%&&)))- ((applySing ((applySing ((singFun2 @(/=@#@$)) (%/=))) sName))- sName')))- ((applySing- ((applySing ((singFun2 @AttrNotInSym0) sAttrNotIn))- ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sName)) sU)))- ((applySing ((singFun1 @SchSym0) SSch)) sT))- sDisjoint (SSch SNil) _ = STrue- sDisjoint- (SSch (SCons (sH :: Sing h) (sT :: Sing t)))- (sS :: Sing s)- = (applySing- ((applySing ((singFun2 @(&&@#@$)) (%&&)))- ((applySing- ((applySing ((singFun2 @AttrNotInSym0) sAttrNotIn)) sH))- sS)))- ((applySing- ((applySing ((singFun2 @DisjointSym0) sDisjoint))- ((applySing ((singFun1 @SchSym0) SSch)) sT)))- sS)- sAppend (SSch (sS1 :: Sing s1)) (SSch (sS2 :: Sing s2))- = (applySing ((singFun1 @SchSym0) SSch))- ((applySing ((applySing ((singFun2 @(++@#@$)) (%++))) sS1)) sS2)- instance SingI (LookupSym0 :: (~>) [AChar] ((~>) Schema U)) where- sing = (singFun2 @LookupSym0) sLookup- instance SingI d =>- SingI (LookupSym1 (d :: [AChar]) :: (~>) Schema U) where- sing = (singFun1 @(LookupSym1 (d :: [AChar]))) (sLookup (sing @d))- instance SingI (OccursSym0 :: (~>) [AChar] ((~>) Schema Bool)) where- sing = (singFun2 @OccursSym0) sOccurs- instance SingI d =>- SingI (OccursSym1 (d :: [AChar]) :: (~>) Schema Bool) where- sing = (singFun1 @(OccursSym1 (d :: [AChar]))) (sOccurs (sing @d))- instance SingI (AttrNotInSym0 :: (~>) Attribute ((~>) Schema Bool)) where- sing = (singFun2 @AttrNotInSym0) sAttrNotIn- instance SingI d =>- SingI (AttrNotInSym1 (d :: Attribute) :: (~>) Schema Bool) where- sing- = (singFun1 @(AttrNotInSym1 (d :: Attribute)))- (sAttrNotIn (sing @d))- instance SingI (DisjointSym0 :: (~>) Schema ((~>) Schema Bool)) where- sing = (singFun2 @DisjointSym0) sDisjoint- instance SingI d =>- SingI (DisjointSym1 (d :: Schema) :: (~>) Schema Bool) where- sing- = (singFun1 @(DisjointSym1 (d :: Schema))) (sDisjoint (sing @d))- instance SingI (AppendSym0 :: (~>) Schema ((~>) Schema Schema)) where- sing = (singFun2 @AppendSym0) sAppend- instance SingI d =>- SingI (AppendSym1 (d :: Schema) :: (~>) Schema Schema) where- sing = (singFun1 @(AppendSym1 (d :: Schema))) (sAppend (sing @d))- data instance Sing :: U -> Type- where- SBOOL :: Sing BOOL- SSTRING :: Sing STRING- SNAT :: Sing NAT- SVEC :: forall (n :: U) (n :: Nat).- (Sing (n :: U)) -> (Sing (n :: Nat)) -> Sing (VEC n n)- type SU = (Sing :: U -> Type)- instance SingKind U where- type Demote U = U- fromSing SBOOL = BOOL- fromSing SSTRING = STRING- fromSing SNAT = NAT- fromSing (SVEC b b) = (VEC (fromSing b)) (fromSing b)- toSing BOOL = SomeSing SBOOL- toSing STRING = SomeSing SSTRING- toSing NAT = SomeSing SNAT- toSing (VEC (b :: Demote U) (b :: Demote Nat))- = case- ((,) (toSing b :: SomeSing U)) (toSing b :: SomeSing Nat)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SVEC c) c) }- data instance Sing :: AChar -> Type- where- SCA :: Sing CA- SCB :: Sing CB- SCC :: Sing CC- SCD :: Sing CD- SCE :: Sing CE- SCF :: Sing CF- SCG :: Sing CG- SCH :: Sing CH- SCI :: Sing CI- SCJ :: Sing CJ- SCK :: Sing CK- SCL :: Sing CL- SCM :: Sing CM- SCN :: Sing CN- SCO :: Sing CO- SCP :: Sing CP- SCQ :: Sing CQ- SCR :: Sing CR- SCS :: Sing CS- SCT :: Sing CT- SCU :: Sing CU- SCV :: Sing CV- SCW :: Sing CW- SCX :: Sing CX- SCY :: Sing CY- SCZ :: Sing CZ- type SAChar = (Sing :: AChar -> Type)- instance SingKind AChar where- type Demote AChar = AChar- fromSing SCA = CA- fromSing SCB = CB- fromSing SCC = CC- fromSing SCD = CD- fromSing SCE = CE- fromSing SCF = CF- fromSing SCG = CG- fromSing SCH = CH- fromSing SCI = CI- fromSing SCJ = CJ- fromSing SCK = CK- fromSing SCL = CL- fromSing SCM = CM- fromSing SCN = CN- fromSing SCO = CO- fromSing SCP = CP- fromSing SCQ = CQ- fromSing SCR = CR- fromSing SCS = CS- fromSing SCT = CT- fromSing SCU = CU- fromSing SCV = CV- fromSing SCW = CW- fromSing SCX = CX- fromSing SCY = CY- fromSing SCZ = CZ- toSing CA = SomeSing SCA- toSing CB = SomeSing SCB- toSing CC = SomeSing SCC- toSing CD = SomeSing SCD- toSing CE = SomeSing SCE- toSing CF = SomeSing SCF- toSing CG = SomeSing SCG- toSing CH = SomeSing SCH- toSing CI = SomeSing SCI- toSing CJ = SomeSing SCJ- toSing CK = SomeSing SCK- toSing CL = SomeSing SCL- toSing CM = SomeSing SCM- toSing CN = SomeSing SCN- toSing CO = SomeSing SCO- toSing CP = SomeSing SCP- toSing CQ = SomeSing SCQ- toSing CR = SomeSing SCR- toSing CS = SomeSing SCS- toSing CT = SomeSing SCT- toSing CU = SomeSing SCU- toSing CV = SomeSing SCV- toSing CW = SomeSing SCW- toSing CX = SomeSing SCX- toSing CY = SomeSing SCY- toSing CZ = SomeSing SCZ- data instance Sing :: Attribute -> Type- where- SAttr :: forall (n :: [AChar]) (n :: U).- (Sing (n :: [AChar])) -> (Sing (n :: U)) -> Sing (Attr n n)- type SAttribute = (Sing :: Attribute -> Type)- instance SingKind Attribute where- type Demote Attribute = Attribute- fromSing (SAttr b b) = (Attr (fromSing b)) (fromSing b)- toSing (Attr (b :: Demote [AChar]) (b :: Demote U))- = case- ((,) (toSing b :: SomeSing [AChar])) (toSing b :: SomeSing U)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SAttr c) c) }- data instance Sing :: Schema -> Type- where- SSch :: forall (n :: [Attribute]).- (Sing (n :: [Attribute])) -> Sing (Sch n)- type SSchema = (Sing :: Schema -> Type)- instance SingKind Schema where- type Demote Schema = Schema- fromSing (SSch b) = Sch (fromSing b)- toSing (Sch (b :: Demote [Attribute]))- = case toSing b :: SomeSing [Attribute] of {- SomeSing c -> SomeSing (SSch c) }- instance (SShow U, SShow Nat) => SShow U where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: U) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) U ((~>) Symbol Symbol))- -> Type) t1) t2) t3)- sShowsPrec- _- SBOOL- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "BOOL")))- sA_0123456789876543210- sShowsPrec- _- SSTRING- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "STRING")))- sA_0123456789876543210- sShowsPrec- _- SNAT- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "NAT")))- sA_0123456789876543210- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SVEC (sArg_0123456789876543210 :: Sing arg_0123456789876543210)- (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "VEC "))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @ShowSpaceSym0) sShowSpace)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))))- sA_0123456789876543210- instance SShow AChar where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: AChar) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) AChar ((~>) Symbol Symbol))- -> Type) t1) t2) t3)- sShowsPrec- _- SCA- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CA")))- sA_0123456789876543210- sShowsPrec- _- SCB- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CB")))- sA_0123456789876543210- sShowsPrec- _- SCC- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CC")))- sA_0123456789876543210- sShowsPrec- _- SCD- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CD")))- sA_0123456789876543210- sShowsPrec- _- SCE- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CE")))- sA_0123456789876543210- sShowsPrec- _- SCF- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CF")))- sA_0123456789876543210- sShowsPrec- _- SCG- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CG")))- sA_0123456789876543210- sShowsPrec- _- SCH- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CH")))- sA_0123456789876543210- sShowsPrec- _- SCI- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CI")))- sA_0123456789876543210- sShowsPrec- _- SCJ- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CJ")))- sA_0123456789876543210- sShowsPrec- _- SCK- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CK")))- sA_0123456789876543210- sShowsPrec- _- SCL- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CL")))- sA_0123456789876543210- sShowsPrec- _- SCM- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CM")))- sA_0123456789876543210- sShowsPrec- _- SCN- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CN")))- sA_0123456789876543210- sShowsPrec- _- SCO- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CO")))- sA_0123456789876543210- sShowsPrec- _- SCP- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CP")))- sA_0123456789876543210- sShowsPrec- _- SCQ- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CQ")))- sA_0123456789876543210- sShowsPrec- _- SCR- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CR")))- sA_0123456789876543210- sShowsPrec- _- SCS- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CS")))- sA_0123456789876543210- sShowsPrec- _- SCT- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CT")))- sA_0123456789876543210- sShowsPrec- _- SCU- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CU")))- sA_0123456789876543210- sShowsPrec- _- SCV- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CV")))- sA_0123456789876543210- sShowsPrec- _- SCW- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CW")))- sA_0123456789876543210- sShowsPrec- _- SCX- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CX")))- sA_0123456789876543210- sShowsPrec- _- SCY- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CY")))- sA_0123456789876543210- sShowsPrec- _- SCZ- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "CZ")))- sA_0123456789876543210- instance (SEq U, SEq Nat) => SEq U where- (%==) SBOOL SBOOL = STrue- (%==) SBOOL SSTRING = SFalse- (%==) SBOOL SNAT = SFalse- (%==) SBOOL (SVEC _ _) = SFalse- (%==) SSTRING SBOOL = SFalse- (%==) SSTRING SSTRING = STrue- (%==) SSTRING SNAT = SFalse- (%==) SSTRING (SVEC _ _) = SFalse- (%==) SNAT SBOOL = SFalse- (%==) SNAT SSTRING = SFalse- (%==) SNAT SNAT = STrue- (%==) SNAT (SVEC _ _) = SFalse- (%==) (SVEC _ _) SBOOL = SFalse- (%==) (SVEC _ _) SSTRING = SFalse- (%==) (SVEC _ _) SNAT = SFalse- (%==) (SVEC a a) (SVEC b b) = ((%&&) (((%==) a) b)) (((%==) a) b)- instance (SDecide U, SDecide Nat) => SDecide U where- (%~) SBOOL SBOOL = Proved Refl- (%~) SBOOL SSTRING = Disproved (\ x -> case x of)- (%~) SBOOL SNAT = Disproved (\ x -> case x of)- (%~) SBOOL (SVEC _ _) = Disproved (\ x -> case x of)- (%~) SSTRING SBOOL = Disproved (\ x -> case x of)- (%~) SSTRING SSTRING = Proved Refl- (%~) SSTRING SNAT = Disproved (\ x -> case x of)- (%~) SSTRING (SVEC _ _) = Disproved (\ x -> case x of)- (%~) SNAT SBOOL = Disproved (\ x -> case x of)- (%~) SNAT SSTRING = Disproved (\ x -> case x of)- (%~) SNAT SNAT = Proved Refl- (%~) SNAT (SVEC _ _) = Disproved (\ x -> case x of)- (%~) (SVEC _ _) SBOOL = Disproved (\ x -> case x of)- (%~) (SVEC _ _) SSTRING = Disproved (\ x -> case x of)- (%~) (SVEC _ _) SNAT = Disproved (\ x -> case x of)- (%~) (SVEC a a) (SVEC b b)- = case ((,) (((%~) a) b)) (((%~) a) b) of- (,) (Proved Refl) (Proved Refl) -> Proved Refl- (,) (Disproved contra) _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,) _ (Disproved contra)- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- instance SEq AChar where- (%==) SCA SCA = STrue- (%==) SCA SCB = SFalse- (%==) SCA SCC = SFalse- (%==) SCA SCD = SFalse- (%==) SCA SCE = SFalse- (%==) SCA SCF = SFalse- (%==) SCA SCG = SFalse- (%==) SCA SCH = SFalse- (%==) SCA SCI = SFalse- (%==) SCA SCJ = SFalse- (%==) SCA SCK = SFalse- (%==) SCA SCL = SFalse- (%==) SCA SCM = SFalse- (%==) SCA SCN = SFalse- (%==) SCA SCO = SFalse- (%==) SCA SCP = SFalse- (%==) SCA SCQ = SFalse- (%==) SCA SCR = SFalse- (%==) SCA SCS = SFalse- (%==) SCA SCT = SFalse- (%==) SCA SCU = SFalse- (%==) SCA SCV = SFalse- (%==) SCA SCW = SFalse- (%==) SCA SCX = SFalse- (%==) SCA SCY = SFalse- (%==) SCA SCZ = SFalse- (%==) SCB SCA = SFalse- (%==) SCB SCB = STrue- (%==) SCB SCC = SFalse- (%==) SCB SCD = SFalse- (%==) SCB SCE = SFalse- (%==) SCB SCF = SFalse- (%==) SCB SCG = SFalse- (%==) SCB SCH = SFalse- (%==) SCB SCI = SFalse- (%==) SCB SCJ = SFalse- (%==) SCB SCK = SFalse- (%==) SCB SCL = SFalse- (%==) SCB SCM = SFalse- (%==) SCB SCN = SFalse- (%==) SCB SCO = SFalse- (%==) SCB SCP = SFalse- (%==) SCB SCQ = SFalse- (%==) SCB SCR = SFalse- (%==) SCB SCS = SFalse- (%==) SCB SCT = SFalse- (%==) SCB SCU = SFalse- (%==) SCB SCV = SFalse- (%==) SCB SCW = SFalse- (%==) SCB SCX = SFalse- (%==) SCB SCY = SFalse- (%==) SCB SCZ = SFalse- (%==) SCC SCA = SFalse- (%==) SCC SCB = SFalse- (%==) SCC SCC = STrue- (%==) SCC SCD = SFalse- (%==) SCC SCE = SFalse- (%==) SCC SCF = SFalse- (%==) SCC SCG = SFalse- (%==) SCC SCH = SFalse- (%==) SCC SCI = SFalse- (%==) SCC SCJ = SFalse- (%==) SCC SCK = SFalse- (%==) SCC SCL = SFalse- (%==) SCC SCM = SFalse- (%==) SCC SCN = SFalse- (%==) SCC SCO = SFalse- (%==) SCC SCP = SFalse- (%==) SCC SCQ = SFalse- (%==) SCC SCR = SFalse- (%==) SCC SCS = SFalse- (%==) SCC SCT = SFalse- (%==) SCC SCU = SFalse- (%==) SCC SCV = SFalse- (%==) SCC SCW = SFalse- (%==) SCC SCX = SFalse- (%==) SCC SCY = SFalse- (%==) SCC SCZ = SFalse- (%==) SCD SCA = SFalse- (%==) SCD SCB = SFalse- (%==) SCD SCC = SFalse- (%==) SCD SCD = STrue- (%==) SCD SCE = SFalse- (%==) SCD SCF = SFalse- (%==) SCD SCG = SFalse- (%==) SCD SCH = SFalse- (%==) SCD SCI = SFalse- (%==) SCD SCJ = SFalse- (%==) SCD SCK = SFalse- (%==) SCD SCL = SFalse- (%==) SCD SCM = SFalse- (%==) SCD SCN = SFalse- (%==) SCD SCO = SFalse- (%==) SCD SCP = SFalse- (%==) SCD SCQ = SFalse- (%==) SCD SCR = SFalse- (%==) SCD SCS = SFalse- (%==) SCD SCT = SFalse- (%==) SCD SCU = SFalse- (%==) SCD SCV = SFalse- (%==) SCD SCW = SFalse- (%==) SCD SCX = SFalse- (%==) SCD SCY = SFalse- (%==) SCD SCZ = SFalse- (%==) SCE SCA = SFalse- (%==) SCE SCB = SFalse- (%==) SCE SCC = SFalse- (%==) SCE SCD = SFalse- (%==) SCE SCE = STrue- (%==) SCE SCF = SFalse- (%==) SCE SCG = SFalse- (%==) SCE SCH = SFalse- (%==) SCE SCI = SFalse- (%==) SCE SCJ = SFalse- (%==) SCE SCK = SFalse- (%==) SCE SCL = SFalse- (%==) SCE SCM = SFalse- (%==) SCE SCN = SFalse- (%==) SCE SCO = SFalse- (%==) SCE SCP = SFalse- (%==) SCE SCQ = SFalse- (%==) SCE SCR = SFalse- (%==) SCE SCS = SFalse- (%==) SCE SCT = SFalse- (%==) SCE SCU = SFalse- (%==) SCE SCV = SFalse- (%==) SCE SCW = SFalse- (%==) SCE SCX = SFalse- (%==) SCE SCY = SFalse- (%==) SCE SCZ = SFalse- (%==) SCF SCA = SFalse- (%==) SCF SCB = SFalse- (%==) SCF SCC = SFalse- (%==) SCF SCD = SFalse- (%==) SCF SCE = SFalse- (%==) SCF SCF = STrue- (%==) SCF SCG = SFalse- (%==) SCF SCH = SFalse- (%==) SCF SCI = SFalse- (%==) SCF SCJ = SFalse- (%==) SCF SCK = SFalse- (%==) SCF SCL = SFalse- (%==) SCF SCM = SFalse- (%==) SCF SCN = SFalse- (%==) SCF SCO = SFalse- (%==) SCF SCP = SFalse- (%==) SCF SCQ = SFalse- (%==) SCF SCR = SFalse- (%==) SCF SCS = SFalse- (%==) SCF SCT = SFalse- (%==) SCF SCU = SFalse- (%==) SCF SCV = SFalse- (%==) SCF SCW = SFalse- (%==) SCF SCX = SFalse- (%==) SCF SCY = SFalse- (%==) SCF SCZ = SFalse- (%==) SCG SCA = SFalse- (%==) SCG SCB = SFalse- (%==) SCG SCC = SFalse- (%==) SCG SCD = SFalse- (%==) SCG SCE = SFalse- (%==) SCG SCF = SFalse- (%==) SCG SCG = STrue- (%==) SCG SCH = SFalse- (%==) SCG SCI = SFalse- (%==) SCG SCJ = SFalse- (%==) SCG SCK = SFalse- (%==) SCG SCL = SFalse- (%==) SCG SCM = SFalse- (%==) SCG SCN = SFalse- (%==) SCG SCO = SFalse- (%==) SCG SCP = SFalse- (%==) SCG SCQ = SFalse- (%==) SCG SCR = SFalse- (%==) SCG SCS = SFalse- (%==) SCG SCT = SFalse- (%==) SCG SCU = SFalse- (%==) SCG SCV = SFalse- (%==) SCG SCW = SFalse- (%==) SCG SCX = SFalse- (%==) SCG SCY = SFalse- (%==) SCG SCZ = SFalse- (%==) SCH SCA = SFalse- (%==) SCH SCB = SFalse- (%==) SCH SCC = SFalse- (%==) SCH SCD = SFalse- (%==) SCH SCE = SFalse- (%==) SCH SCF = SFalse- (%==) SCH SCG = SFalse- (%==) SCH SCH = STrue- (%==) SCH SCI = SFalse- (%==) SCH SCJ = SFalse- (%==) SCH SCK = SFalse- (%==) SCH SCL = SFalse- (%==) SCH SCM = SFalse- (%==) SCH SCN = SFalse- (%==) SCH SCO = SFalse- (%==) SCH SCP = SFalse- (%==) SCH SCQ = SFalse- (%==) SCH SCR = SFalse- (%==) SCH SCS = SFalse- (%==) SCH SCT = SFalse- (%==) SCH SCU = SFalse- (%==) SCH SCV = SFalse- (%==) SCH SCW = SFalse- (%==) SCH SCX = SFalse- (%==) SCH SCY = SFalse- (%==) SCH SCZ = SFalse- (%==) SCI SCA = SFalse- (%==) SCI SCB = SFalse- (%==) SCI SCC = SFalse- (%==) SCI SCD = SFalse- (%==) SCI SCE = SFalse- (%==) SCI SCF = SFalse- (%==) SCI SCG = SFalse- (%==) SCI SCH = SFalse- (%==) SCI SCI = STrue- (%==) SCI SCJ = SFalse- (%==) SCI SCK = SFalse- (%==) SCI SCL = SFalse- (%==) SCI SCM = SFalse- (%==) SCI SCN = SFalse- (%==) SCI SCO = SFalse- (%==) SCI SCP = SFalse- (%==) SCI SCQ = SFalse- (%==) SCI SCR = SFalse- (%==) SCI SCS = SFalse- (%==) SCI SCT = SFalse- (%==) SCI SCU = SFalse- (%==) SCI SCV = SFalse- (%==) SCI SCW = SFalse- (%==) SCI SCX = SFalse- (%==) SCI SCY = SFalse- (%==) SCI SCZ = SFalse- (%==) SCJ SCA = SFalse- (%==) SCJ SCB = SFalse- (%==) SCJ SCC = SFalse- (%==) SCJ SCD = SFalse- (%==) SCJ SCE = SFalse- (%==) SCJ SCF = SFalse- (%==) SCJ SCG = SFalse- (%==) SCJ SCH = SFalse- (%==) SCJ SCI = SFalse- (%==) SCJ SCJ = STrue- (%==) SCJ SCK = SFalse- (%==) SCJ SCL = SFalse- (%==) SCJ SCM = SFalse- (%==) SCJ SCN = SFalse- (%==) SCJ SCO = SFalse- (%==) SCJ SCP = SFalse- (%==) SCJ SCQ = SFalse- (%==) SCJ SCR = SFalse- (%==) SCJ SCS = SFalse- (%==) SCJ SCT = SFalse- (%==) SCJ SCU = SFalse- (%==) SCJ SCV = SFalse- (%==) SCJ SCW = SFalse- (%==) SCJ SCX = SFalse- (%==) SCJ SCY = SFalse- (%==) SCJ SCZ = SFalse- (%==) SCK SCA = SFalse- (%==) SCK SCB = SFalse- (%==) SCK SCC = SFalse- (%==) SCK SCD = SFalse- (%==) SCK SCE = SFalse- (%==) SCK SCF = SFalse- (%==) SCK SCG = SFalse- (%==) SCK SCH = SFalse- (%==) SCK SCI = SFalse- (%==) SCK SCJ = SFalse- (%==) SCK SCK = STrue- (%==) SCK SCL = SFalse- (%==) SCK SCM = SFalse- (%==) SCK SCN = SFalse- (%==) SCK SCO = SFalse- (%==) SCK SCP = SFalse- (%==) SCK SCQ = SFalse- (%==) SCK SCR = SFalse- (%==) SCK SCS = SFalse- (%==) SCK SCT = SFalse- (%==) SCK SCU = SFalse- (%==) SCK SCV = SFalse- (%==) SCK SCW = SFalse- (%==) SCK SCX = SFalse- (%==) SCK SCY = SFalse- (%==) SCK SCZ = SFalse- (%==) SCL SCA = SFalse- (%==) SCL SCB = SFalse- (%==) SCL SCC = SFalse- (%==) SCL SCD = SFalse- (%==) SCL SCE = SFalse- (%==) SCL SCF = SFalse- (%==) SCL SCG = SFalse- (%==) SCL SCH = SFalse- (%==) SCL SCI = SFalse- (%==) SCL SCJ = SFalse- (%==) SCL SCK = SFalse- (%==) SCL SCL = STrue- (%==) SCL SCM = SFalse- (%==) SCL SCN = SFalse- (%==) SCL SCO = SFalse- (%==) SCL SCP = SFalse- (%==) SCL SCQ = SFalse- (%==) SCL SCR = SFalse- (%==) SCL SCS = SFalse- (%==) SCL SCT = SFalse- (%==) SCL SCU = SFalse- (%==) SCL SCV = SFalse- (%==) SCL SCW = SFalse- (%==) SCL SCX = SFalse- (%==) SCL SCY = SFalse- (%==) SCL SCZ = SFalse- (%==) SCM SCA = SFalse- (%==) SCM SCB = SFalse- (%==) SCM SCC = SFalse- (%==) SCM SCD = SFalse- (%==) SCM SCE = SFalse- (%==) SCM SCF = SFalse- (%==) SCM SCG = SFalse- (%==) SCM SCH = SFalse- (%==) SCM SCI = SFalse- (%==) SCM SCJ = SFalse- (%==) SCM SCK = SFalse- (%==) SCM SCL = SFalse- (%==) SCM SCM = STrue- (%==) SCM SCN = SFalse- (%==) SCM SCO = SFalse- (%==) SCM SCP = SFalse- (%==) SCM SCQ = SFalse- (%==) SCM SCR = SFalse- (%==) SCM SCS = SFalse- (%==) SCM SCT = SFalse- (%==) SCM SCU = SFalse- (%==) SCM SCV = SFalse- (%==) SCM SCW = SFalse- (%==) SCM SCX = SFalse- (%==) SCM SCY = SFalse- (%==) SCM SCZ = SFalse- (%==) SCN SCA = SFalse- (%==) SCN SCB = SFalse- (%==) SCN SCC = SFalse- (%==) SCN SCD = SFalse- (%==) SCN SCE = SFalse- (%==) SCN SCF = SFalse- (%==) SCN SCG = SFalse- (%==) SCN SCH = SFalse- (%==) SCN SCI = SFalse- (%==) SCN SCJ = SFalse- (%==) SCN SCK = SFalse- (%==) SCN SCL = SFalse- (%==) SCN SCM = SFalse- (%==) SCN SCN = STrue- (%==) SCN SCO = SFalse- (%==) SCN SCP = SFalse- (%==) SCN SCQ = SFalse- (%==) SCN SCR = SFalse- (%==) SCN SCS = SFalse- (%==) SCN SCT = SFalse- (%==) SCN SCU = SFalse- (%==) SCN SCV = SFalse- (%==) SCN SCW = SFalse- (%==) SCN SCX = SFalse- (%==) SCN SCY = SFalse- (%==) SCN SCZ = SFalse- (%==) SCO SCA = SFalse- (%==) SCO SCB = SFalse- (%==) SCO SCC = SFalse- (%==) SCO SCD = SFalse- (%==) SCO SCE = SFalse- (%==) SCO SCF = SFalse- (%==) SCO SCG = SFalse- (%==) SCO SCH = SFalse- (%==) SCO SCI = SFalse- (%==) SCO SCJ = SFalse- (%==) SCO SCK = SFalse- (%==) SCO SCL = SFalse- (%==) SCO SCM = SFalse- (%==) SCO SCN = SFalse- (%==) SCO SCO = STrue- (%==) SCO SCP = SFalse- (%==) SCO SCQ = SFalse- (%==) SCO SCR = SFalse- (%==) SCO SCS = SFalse- (%==) SCO SCT = SFalse- (%==) SCO SCU = SFalse- (%==) SCO SCV = SFalse- (%==) SCO SCW = SFalse- (%==) SCO SCX = SFalse- (%==) SCO SCY = SFalse- (%==) SCO SCZ = SFalse- (%==) SCP SCA = SFalse- (%==) SCP SCB = SFalse- (%==) SCP SCC = SFalse- (%==) SCP SCD = SFalse- (%==) SCP SCE = SFalse- (%==) SCP SCF = SFalse- (%==) SCP SCG = SFalse- (%==) SCP SCH = SFalse- (%==) SCP SCI = SFalse- (%==) SCP SCJ = SFalse- (%==) SCP SCK = SFalse- (%==) SCP SCL = SFalse- (%==) SCP SCM = SFalse- (%==) SCP SCN = SFalse- (%==) SCP SCO = SFalse- (%==) SCP SCP = STrue- (%==) SCP SCQ = SFalse- (%==) SCP SCR = SFalse- (%==) SCP SCS = SFalse- (%==) SCP SCT = SFalse- (%==) SCP SCU = SFalse- (%==) SCP SCV = SFalse- (%==) SCP SCW = SFalse- (%==) SCP SCX = SFalse- (%==) SCP SCY = SFalse- (%==) SCP SCZ = SFalse- (%==) SCQ SCA = SFalse- (%==) SCQ SCB = SFalse- (%==) SCQ SCC = SFalse- (%==) SCQ SCD = SFalse- (%==) SCQ SCE = SFalse- (%==) SCQ SCF = SFalse- (%==) SCQ SCG = SFalse- (%==) SCQ SCH = SFalse- (%==) SCQ SCI = SFalse- (%==) SCQ SCJ = SFalse- (%==) SCQ SCK = SFalse- (%==) SCQ SCL = SFalse- (%==) SCQ SCM = SFalse- (%==) SCQ SCN = SFalse- (%==) SCQ SCO = SFalse- (%==) SCQ SCP = SFalse- (%==) SCQ SCQ = STrue- (%==) SCQ SCR = SFalse- (%==) SCQ SCS = SFalse- (%==) SCQ SCT = SFalse- (%==) SCQ SCU = SFalse- (%==) SCQ SCV = SFalse- (%==) SCQ SCW = SFalse- (%==) SCQ SCX = SFalse- (%==) SCQ SCY = SFalse- (%==) SCQ SCZ = SFalse- (%==) SCR SCA = SFalse- (%==) SCR SCB = SFalse- (%==) SCR SCC = SFalse- (%==) SCR SCD = SFalse- (%==) SCR SCE = SFalse- (%==) SCR SCF = SFalse- (%==) SCR SCG = SFalse- (%==) SCR SCH = SFalse- (%==) SCR SCI = SFalse- (%==) SCR SCJ = SFalse- (%==) SCR SCK = SFalse- (%==) SCR SCL = SFalse- (%==) SCR SCM = SFalse- (%==) SCR SCN = SFalse- (%==) SCR SCO = SFalse- (%==) SCR SCP = SFalse- (%==) SCR SCQ = SFalse- (%==) SCR SCR = STrue- (%==) SCR SCS = SFalse- (%==) SCR SCT = SFalse- (%==) SCR SCU = SFalse- (%==) SCR SCV = SFalse- (%==) SCR SCW = SFalse- (%==) SCR SCX = SFalse- (%==) SCR SCY = SFalse- (%==) SCR SCZ = SFalse- (%==) SCS SCA = SFalse- (%==) SCS SCB = SFalse- (%==) SCS SCC = SFalse- (%==) SCS SCD = SFalse- (%==) SCS SCE = SFalse- (%==) SCS SCF = SFalse- (%==) SCS SCG = SFalse- (%==) SCS SCH = SFalse- (%==) SCS SCI = SFalse- (%==) SCS SCJ = SFalse- (%==) SCS SCK = SFalse- (%==) SCS SCL = SFalse- (%==) SCS SCM = SFalse- (%==) SCS SCN = SFalse- (%==) SCS SCO = SFalse- (%==) SCS SCP = SFalse- (%==) SCS SCQ = SFalse- (%==) SCS SCR = SFalse- (%==) SCS SCS = STrue- (%==) SCS SCT = SFalse- (%==) SCS SCU = SFalse- (%==) SCS SCV = SFalse- (%==) SCS SCW = SFalse- (%==) SCS SCX = SFalse- (%==) SCS SCY = SFalse- (%==) SCS SCZ = SFalse- (%==) SCT SCA = SFalse- (%==) SCT SCB = SFalse- (%==) SCT SCC = SFalse- (%==) SCT SCD = SFalse- (%==) SCT SCE = SFalse- (%==) SCT SCF = SFalse- (%==) SCT SCG = SFalse- (%==) SCT SCH = SFalse- (%==) SCT SCI = SFalse- (%==) SCT SCJ = SFalse- (%==) SCT SCK = SFalse- (%==) SCT SCL = SFalse- (%==) SCT SCM = SFalse- (%==) SCT SCN = SFalse- (%==) SCT SCO = SFalse- (%==) SCT SCP = SFalse- (%==) SCT SCQ = SFalse- (%==) SCT SCR = SFalse- (%==) SCT SCS = SFalse- (%==) SCT SCT = STrue- (%==) SCT SCU = SFalse- (%==) SCT SCV = SFalse- (%==) SCT SCW = SFalse- (%==) SCT SCX = SFalse- (%==) SCT SCY = SFalse- (%==) SCT SCZ = SFalse- (%==) SCU SCA = SFalse- (%==) SCU SCB = SFalse- (%==) SCU SCC = SFalse- (%==) SCU SCD = SFalse- (%==) SCU SCE = SFalse- (%==) SCU SCF = SFalse- (%==) SCU SCG = SFalse- (%==) SCU SCH = SFalse- (%==) SCU SCI = SFalse- (%==) SCU SCJ = SFalse- (%==) SCU SCK = SFalse- (%==) SCU SCL = SFalse- (%==) SCU SCM = SFalse- (%==) SCU SCN = SFalse- (%==) SCU SCO = SFalse- (%==) SCU SCP = SFalse- (%==) SCU SCQ = SFalse- (%==) SCU SCR = SFalse- (%==) SCU SCS = SFalse- (%==) SCU SCT = SFalse- (%==) SCU SCU = STrue- (%==) SCU SCV = SFalse- (%==) SCU SCW = SFalse- (%==) SCU SCX = SFalse- (%==) SCU SCY = SFalse- (%==) SCU SCZ = SFalse- (%==) SCV SCA = SFalse- (%==) SCV SCB = SFalse- (%==) SCV SCC = SFalse- (%==) SCV SCD = SFalse- (%==) SCV SCE = SFalse- (%==) SCV SCF = SFalse- (%==) SCV SCG = SFalse- (%==) SCV SCH = SFalse- (%==) SCV SCI = SFalse- (%==) SCV SCJ = SFalse- (%==) SCV SCK = SFalse- (%==) SCV SCL = SFalse- (%==) SCV SCM = SFalse- (%==) SCV SCN = SFalse- (%==) SCV SCO = SFalse- (%==) SCV SCP = SFalse- (%==) SCV SCQ = SFalse- (%==) SCV SCR = SFalse- (%==) SCV SCS = SFalse- (%==) SCV SCT = SFalse- (%==) SCV SCU = SFalse- (%==) SCV SCV = STrue- (%==) SCV SCW = SFalse- (%==) SCV SCX = SFalse- (%==) SCV SCY = SFalse- (%==) SCV SCZ = SFalse- (%==) SCW SCA = SFalse- (%==) SCW SCB = SFalse- (%==) SCW SCC = SFalse- (%==) SCW SCD = SFalse- (%==) SCW SCE = SFalse- (%==) SCW SCF = SFalse- (%==) SCW SCG = SFalse- (%==) SCW SCH = SFalse- (%==) SCW SCI = SFalse- (%==) SCW SCJ = SFalse- (%==) SCW SCK = SFalse- (%==) SCW SCL = SFalse- (%==) SCW SCM = SFalse- (%==) SCW SCN = SFalse- (%==) SCW SCO = SFalse- (%==) SCW SCP = SFalse- (%==) SCW SCQ = SFalse- (%==) SCW SCR = SFalse- (%==) SCW SCS = SFalse- (%==) SCW SCT = SFalse- (%==) SCW SCU = SFalse- (%==) SCW SCV = SFalse- (%==) SCW SCW = STrue- (%==) SCW SCX = SFalse- (%==) SCW SCY = SFalse- (%==) SCW SCZ = SFalse- (%==) SCX SCA = SFalse- (%==) SCX SCB = SFalse- (%==) SCX SCC = SFalse- (%==) SCX SCD = SFalse- (%==) SCX SCE = SFalse- (%==) SCX SCF = SFalse- (%==) SCX SCG = SFalse- (%==) SCX SCH = SFalse- (%==) SCX SCI = SFalse- (%==) SCX SCJ = SFalse- (%==) SCX SCK = SFalse- (%==) SCX SCL = SFalse- (%==) SCX SCM = SFalse- (%==) SCX SCN = SFalse- (%==) SCX SCO = SFalse- (%==) SCX SCP = SFalse- (%==) SCX SCQ = SFalse- (%==) SCX SCR = SFalse- (%==) SCX SCS = SFalse- (%==) SCX SCT = SFalse- (%==) SCX SCU = SFalse- (%==) SCX SCV = SFalse- (%==) SCX SCW = SFalse- (%==) SCX SCX = STrue- (%==) SCX SCY = SFalse- (%==) SCX SCZ = SFalse- (%==) SCY SCA = SFalse- (%==) SCY SCB = SFalse- (%==) SCY SCC = SFalse- (%==) SCY SCD = SFalse- (%==) SCY SCE = SFalse- (%==) SCY SCF = SFalse- (%==) SCY SCG = SFalse- (%==) SCY SCH = SFalse- (%==) SCY SCI = SFalse- (%==) SCY SCJ = SFalse- (%==) SCY SCK = SFalse- (%==) SCY SCL = SFalse- (%==) SCY SCM = SFalse- (%==) SCY SCN = SFalse- (%==) SCY SCO = SFalse- (%==) SCY SCP = SFalse- (%==) SCY SCQ = SFalse- (%==) SCY SCR = SFalse- (%==) SCY SCS = SFalse- (%==) SCY SCT = SFalse- (%==) SCY SCU = SFalse- (%==) SCY SCV = SFalse- (%==) SCY SCW = SFalse- (%==) SCY SCX = SFalse- (%==) SCY SCY = STrue- (%==) SCY SCZ = SFalse- (%==) SCZ SCA = SFalse- (%==) SCZ SCB = SFalse- (%==) SCZ SCC = SFalse- (%==) SCZ SCD = SFalse- (%==) SCZ SCE = SFalse- (%==) SCZ SCF = SFalse- (%==) SCZ SCG = SFalse- (%==) SCZ SCH = SFalse- (%==) SCZ SCI = SFalse- (%==) SCZ SCJ = SFalse- (%==) SCZ SCK = SFalse- (%==) SCZ SCL = SFalse- (%==) SCZ SCM = SFalse- (%==) SCZ SCN = SFalse- (%==) SCZ SCO = SFalse- (%==) SCZ SCP = SFalse- (%==) SCZ SCQ = SFalse- (%==) SCZ SCR = SFalse- (%==) SCZ SCS = SFalse- (%==) SCZ SCT = SFalse- (%==) SCZ SCU = SFalse- (%==) SCZ SCV = SFalse- (%==) SCZ SCW = SFalse- (%==) SCZ SCX = SFalse- (%==) SCZ SCY = SFalse- (%==) SCZ SCZ = STrue- instance SDecide AChar where- (%~) SCA SCA = Proved Refl- (%~) SCA SCB = Disproved (\ x -> case x of)- (%~) SCA SCC = Disproved (\ x -> case x of)- (%~) SCA SCD = Disproved (\ x -> case x of)- (%~) SCA SCE = Disproved (\ x -> case x of)- (%~) SCA SCF = Disproved (\ x -> case x of)- (%~) SCA SCG = Disproved (\ x -> case x of)- (%~) SCA SCH = Disproved (\ x -> case x of)- (%~) SCA SCI = Disproved (\ x -> case x of)- (%~) SCA SCJ = Disproved (\ x -> case x of)- (%~) SCA SCK = Disproved (\ x -> case x of)- (%~) SCA SCL = Disproved (\ x -> case x of)- (%~) SCA SCM = Disproved (\ x -> case x of)- (%~) SCA SCN = Disproved (\ x -> case x of)- (%~) SCA SCO = Disproved (\ x -> case x of)- (%~) SCA SCP = Disproved (\ x -> case x of)- (%~) SCA SCQ = Disproved (\ x -> case x of)- (%~) SCA SCR = Disproved (\ x -> case x of)- (%~) SCA SCS = Disproved (\ x -> case x of)- (%~) SCA SCT = Disproved (\ x -> case x of)- (%~) SCA SCU = Disproved (\ x -> case x of)- (%~) SCA SCV = Disproved (\ x -> case x of)- (%~) SCA SCW = Disproved (\ x -> case x of)- (%~) SCA SCX = Disproved (\ x -> case x of)- (%~) SCA SCY = Disproved (\ x -> case x of)- (%~) SCA SCZ = Disproved (\ x -> case x of)- (%~) SCB SCA = Disproved (\ x -> case x of)- (%~) SCB SCB = Proved Refl- (%~) SCB SCC = Disproved (\ x -> case x of)- (%~) SCB SCD = Disproved (\ x -> case x of)- (%~) SCB SCE = Disproved (\ x -> case x of)- (%~) SCB SCF = Disproved (\ x -> case x of)- (%~) SCB SCG = Disproved (\ x -> case x of)- (%~) SCB SCH = Disproved (\ x -> case x of)- (%~) SCB SCI = Disproved (\ x -> case x of)- (%~) SCB SCJ = Disproved (\ x -> case x of)- (%~) SCB SCK = Disproved (\ x -> case x of)- (%~) SCB SCL = Disproved (\ x -> case x of)- (%~) SCB SCM = Disproved (\ x -> case x of)- (%~) SCB SCN = Disproved (\ x -> case x of)- (%~) SCB SCO = Disproved (\ x -> case x of)- (%~) SCB SCP = Disproved (\ x -> case x of)- (%~) SCB SCQ = Disproved (\ x -> case x of)- (%~) SCB SCR = Disproved (\ x -> case x of)- (%~) SCB SCS = Disproved (\ x -> case x of)- (%~) SCB SCT = Disproved (\ x -> case x of)- (%~) SCB SCU = Disproved (\ x -> case x of)- (%~) SCB SCV = Disproved (\ x -> case x of)- (%~) SCB SCW = Disproved (\ x -> case x of)- (%~) SCB SCX = Disproved (\ x -> case x of)- (%~) SCB SCY = Disproved (\ x -> case x of)- (%~) SCB SCZ = Disproved (\ x -> case x of)- (%~) SCC SCA = Disproved (\ x -> case x of)- (%~) SCC SCB = Disproved (\ x -> case x of)- (%~) SCC SCC = Proved Refl- (%~) SCC SCD = Disproved (\ x -> case x of)- (%~) SCC SCE = Disproved (\ x -> case x of)- (%~) SCC SCF = Disproved (\ x -> case x of)- (%~) SCC SCG = Disproved (\ x -> case x of)- (%~) SCC SCH = Disproved (\ x -> case x of)- (%~) SCC SCI = Disproved (\ x -> case x of)- (%~) SCC SCJ = Disproved (\ x -> case x of)- (%~) SCC SCK = Disproved (\ x -> case x of)- (%~) SCC SCL = Disproved (\ x -> case x of)- (%~) SCC SCM = Disproved (\ x -> case x of)- (%~) SCC SCN = Disproved (\ x -> case x of)- (%~) SCC SCO = Disproved (\ x -> case x of)- (%~) SCC SCP = Disproved (\ x -> case x of)- (%~) SCC SCQ = Disproved (\ x -> case x of)- (%~) SCC SCR = Disproved (\ x -> case x of)- (%~) SCC SCS = Disproved (\ x -> case x of)- (%~) SCC SCT = Disproved (\ x -> case x of)- (%~) SCC SCU = Disproved (\ x -> case x of)- (%~) SCC SCV = Disproved (\ x -> case x of)- (%~) SCC SCW = Disproved (\ x -> case x of)- (%~) SCC SCX = Disproved (\ x -> case x of)- (%~) SCC SCY = Disproved (\ x -> case x of)- (%~) SCC SCZ = Disproved (\ x -> case x of)- (%~) SCD SCA = Disproved (\ x -> case x of)- (%~) SCD SCB = Disproved (\ x -> case x of)- (%~) SCD SCC = Disproved (\ x -> case x of)- (%~) SCD SCD = Proved Refl- (%~) SCD SCE = Disproved (\ x -> case x of)- (%~) SCD SCF = Disproved (\ x -> case x of)- (%~) SCD SCG = Disproved (\ x -> case x of)- (%~) SCD SCH = Disproved (\ x -> case x of)- (%~) SCD SCI = Disproved (\ x -> case x of)- (%~) SCD SCJ = Disproved (\ x -> case x of)- (%~) SCD SCK = Disproved (\ x -> case x of)- (%~) SCD SCL = Disproved (\ x -> case x of)- (%~) SCD SCM = Disproved (\ x -> case x of)- (%~) SCD SCN = Disproved (\ x -> case x of)- (%~) SCD SCO = Disproved (\ x -> case x of)- (%~) SCD SCP = Disproved (\ x -> case x of)- (%~) SCD SCQ = Disproved (\ x -> case x of)- (%~) SCD SCR = Disproved (\ x -> case x of)- (%~) SCD SCS = Disproved (\ x -> case x of)- (%~) SCD SCT = Disproved (\ x -> case x of)- (%~) SCD SCU = Disproved (\ x -> case x of)- (%~) SCD SCV = Disproved (\ x -> case x of)- (%~) SCD SCW = Disproved (\ x -> case x of)- (%~) SCD SCX = Disproved (\ x -> case x of)- (%~) SCD SCY = Disproved (\ x -> case x of)- (%~) SCD SCZ = Disproved (\ x -> case x of)- (%~) SCE SCA = Disproved (\ x -> case x of)- (%~) SCE SCB = Disproved (\ x -> case x of)- (%~) SCE SCC = Disproved (\ x -> case x of)- (%~) SCE SCD = Disproved (\ x -> case x of)- (%~) SCE SCE = Proved Refl- (%~) SCE SCF = Disproved (\ x -> case x of)- (%~) SCE SCG = Disproved (\ x -> case x of)- (%~) SCE SCH = Disproved (\ x -> case x of)- (%~) SCE SCI = Disproved (\ x -> case x of)- (%~) SCE SCJ = Disproved (\ x -> case x of)- (%~) SCE SCK = Disproved (\ x -> case x of)- (%~) SCE SCL = Disproved (\ x -> case x of)- (%~) SCE SCM = Disproved (\ x -> case x of)- (%~) SCE SCN = Disproved (\ x -> case x of)- (%~) SCE SCO = Disproved (\ x -> case x of)- (%~) SCE SCP = Disproved (\ x -> case x of)- (%~) SCE SCQ = Disproved (\ x -> case x of)- (%~) SCE SCR = Disproved (\ x -> case x of)- (%~) SCE SCS = Disproved (\ x -> case x of)- (%~) SCE SCT = Disproved (\ x -> case x of)- (%~) SCE SCU = Disproved (\ x -> case x of)- (%~) SCE SCV = Disproved (\ x -> case x of)- (%~) SCE SCW = Disproved (\ x -> case x of)- (%~) SCE SCX = Disproved (\ x -> case x of)- (%~) SCE SCY = Disproved (\ x -> case x of)- (%~) SCE SCZ = Disproved (\ x -> case x of)- (%~) SCF SCA = Disproved (\ x -> case x of)- (%~) SCF SCB = Disproved (\ x -> case x of)- (%~) SCF SCC = Disproved (\ x -> case x of)- (%~) SCF SCD = Disproved (\ x -> case x of)- (%~) SCF SCE = Disproved (\ x -> case x of)- (%~) SCF SCF = Proved Refl- (%~) SCF SCG = Disproved (\ x -> case x of)- (%~) SCF SCH = Disproved (\ x -> case x of)- (%~) SCF SCI = Disproved (\ x -> case x of)- (%~) SCF SCJ = Disproved (\ x -> case x of)- (%~) SCF SCK = Disproved (\ x -> case x of)- (%~) SCF SCL = Disproved (\ x -> case x of)- (%~) SCF SCM = Disproved (\ x -> case x of)- (%~) SCF SCN = Disproved (\ x -> case x of)- (%~) SCF SCO = Disproved (\ x -> case x of)- (%~) SCF SCP = Disproved (\ x -> case x of)- (%~) SCF SCQ = Disproved (\ x -> case x of)- (%~) SCF SCR = Disproved (\ x -> case x of)- (%~) SCF SCS = Disproved (\ x -> case x of)- (%~) SCF SCT = Disproved (\ x -> case x of)- (%~) SCF SCU = Disproved (\ x -> case x of)- (%~) SCF SCV = Disproved (\ x -> case x of)- (%~) SCF SCW = Disproved (\ x -> case x of)- (%~) SCF SCX = Disproved (\ x -> case x of)- (%~) SCF SCY = Disproved (\ x -> case x of)- (%~) SCF SCZ = Disproved (\ x -> case x of)- (%~) SCG SCA = Disproved (\ x -> case x of)- (%~) SCG SCB = Disproved (\ x -> case x of)- (%~) SCG SCC = Disproved (\ x -> case x of)- (%~) SCG SCD = Disproved (\ x -> case x of)- (%~) SCG SCE = Disproved (\ x -> case x of)- (%~) SCG SCF = Disproved (\ x -> case x of)- (%~) SCG SCG = Proved Refl- (%~) SCG SCH = Disproved (\ x -> case x of)- (%~) SCG SCI = Disproved (\ x -> case x of)- (%~) SCG SCJ = Disproved (\ x -> case x of)- (%~) SCG SCK = Disproved (\ x -> case x of)- (%~) SCG SCL = Disproved (\ x -> case x of)- (%~) SCG SCM = Disproved (\ x -> case x of)- (%~) SCG SCN = Disproved (\ x -> case x of)- (%~) SCG SCO = Disproved (\ x -> case x of)- (%~) SCG SCP = Disproved (\ x -> case x of)- (%~) SCG SCQ = Disproved (\ x -> case x of)- (%~) SCG SCR = Disproved (\ x -> case x of)- (%~) SCG SCS = Disproved (\ x -> case x of)- (%~) SCG SCT = Disproved (\ x -> case x of)- (%~) SCG SCU = Disproved (\ x -> case x of)- (%~) SCG SCV = Disproved (\ x -> case x of)- (%~) SCG SCW = Disproved (\ x -> case x of)- (%~) SCG SCX = Disproved (\ x -> case x of)- (%~) SCG SCY = Disproved (\ x -> case x of)- (%~) SCG SCZ = Disproved (\ x -> case x of)- (%~) SCH SCA = Disproved (\ x -> case x of)- (%~) SCH SCB = Disproved (\ x -> case x of)- (%~) SCH SCC = Disproved (\ x -> case x of)- (%~) SCH SCD = Disproved (\ x -> case x of)- (%~) SCH SCE = Disproved (\ x -> case x of)- (%~) SCH SCF = Disproved (\ x -> case x of)- (%~) SCH SCG = Disproved (\ x -> case x of)- (%~) SCH SCH = Proved Refl- (%~) SCH SCI = Disproved (\ x -> case x of)- (%~) SCH SCJ = Disproved (\ x -> case x of)- (%~) SCH SCK = Disproved (\ x -> case x of)- (%~) SCH SCL = Disproved (\ x -> case x of)- (%~) SCH SCM = Disproved (\ x -> case x of)- (%~) SCH SCN = Disproved (\ x -> case x of)- (%~) SCH SCO = Disproved (\ x -> case x of)- (%~) SCH SCP = Disproved (\ x -> case x of)- (%~) SCH SCQ = Disproved (\ x -> case x of)- (%~) SCH SCR = Disproved (\ x -> case x of)- (%~) SCH SCS = Disproved (\ x -> case x of)- (%~) SCH SCT = Disproved (\ x -> case x of)- (%~) SCH SCU = Disproved (\ x -> case x of)- (%~) SCH SCV = Disproved (\ x -> case x of)- (%~) SCH SCW = Disproved (\ x -> case x of)- (%~) SCH SCX = Disproved (\ x -> case x of)- (%~) SCH SCY = Disproved (\ x -> case x of)- (%~) SCH SCZ = Disproved (\ x -> case x of)- (%~) SCI SCA = Disproved (\ x -> case x of)- (%~) SCI SCB = Disproved (\ x -> case x of)- (%~) SCI SCC = Disproved (\ x -> case x of)- (%~) SCI SCD = Disproved (\ x -> case x of)- (%~) SCI SCE = Disproved (\ x -> case x of)- (%~) SCI SCF = Disproved (\ x -> case x of)- (%~) SCI SCG = Disproved (\ x -> case x of)- (%~) SCI SCH = Disproved (\ x -> case x of)- (%~) SCI SCI = Proved Refl- (%~) SCI SCJ = Disproved (\ x -> case x of)- (%~) SCI SCK = Disproved (\ x -> case x of)- (%~) SCI SCL = Disproved (\ x -> case x of)- (%~) SCI SCM = Disproved (\ x -> case x of)- (%~) SCI SCN = Disproved (\ x -> case x of)- (%~) SCI SCO = Disproved (\ x -> case x of)- (%~) SCI SCP = Disproved (\ x -> case x of)- (%~) SCI SCQ = Disproved (\ x -> case x of)- (%~) SCI SCR = Disproved (\ x -> case x of)- (%~) SCI SCS = Disproved (\ x -> case x of)- (%~) SCI SCT = Disproved (\ x -> case x of)- (%~) SCI SCU = Disproved (\ x -> case x of)- (%~) SCI SCV = Disproved (\ x -> case x of)- (%~) SCI SCW = Disproved (\ x -> case x of)- (%~) SCI SCX = Disproved (\ x -> case x of)- (%~) SCI SCY = Disproved (\ x -> case x of)- (%~) SCI SCZ = Disproved (\ x -> case x of)- (%~) SCJ SCA = Disproved (\ x -> case x of)- (%~) SCJ SCB = Disproved (\ x -> case x of)- (%~) SCJ SCC = Disproved (\ x -> case x of)- (%~) SCJ SCD = Disproved (\ x -> case x of)- (%~) SCJ SCE = Disproved (\ x -> case x of)- (%~) SCJ SCF = Disproved (\ x -> case x of)- (%~) SCJ SCG = Disproved (\ x -> case x of)- (%~) SCJ SCH = Disproved (\ x -> case x of)- (%~) SCJ SCI = Disproved (\ x -> case x of)- (%~) SCJ SCJ = Proved Refl- (%~) SCJ SCK = Disproved (\ x -> case x of)- (%~) SCJ SCL = Disproved (\ x -> case x of)- (%~) SCJ SCM = Disproved (\ x -> case x of)- (%~) SCJ SCN = Disproved (\ x -> case x of)- (%~) SCJ SCO = Disproved (\ x -> case x of)- (%~) SCJ SCP = Disproved (\ x -> case x of)- (%~) SCJ SCQ = Disproved (\ x -> case x of)- (%~) SCJ SCR = Disproved (\ x -> case x of)- (%~) SCJ SCS = Disproved (\ x -> case x of)- (%~) SCJ SCT = Disproved (\ x -> case x of)- (%~) SCJ SCU = Disproved (\ x -> case x of)- (%~) SCJ SCV = Disproved (\ x -> case x of)- (%~) SCJ SCW = Disproved (\ x -> case x of)- (%~) SCJ SCX = Disproved (\ x -> case x of)- (%~) SCJ SCY = Disproved (\ x -> case x of)- (%~) SCJ SCZ = Disproved (\ x -> case x of)- (%~) SCK SCA = Disproved (\ x -> case x of)- (%~) SCK SCB = Disproved (\ x -> case x of)- (%~) SCK SCC = Disproved (\ x -> case x of)- (%~) SCK SCD = Disproved (\ x -> case x of)- (%~) SCK SCE = Disproved (\ x -> case x of)- (%~) SCK SCF = Disproved (\ x -> case x of)- (%~) SCK SCG = Disproved (\ x -> case x of)- (%~) SCK SCH = Disproved (\ x -> case x of)- (%~) SCK SCI = Disproved (\ x -> case x of)- (%~) SCK SCJ = Disproved (\ x -> case x of)- (%~) SCK SCK = Proved Refl- (%~) SCK SCL = Disproved (\ x -> case x of)- (%~) SCK SCM = Disproved (\ x -> case x of)- (%~) SCK SCN = Disproved (\ x -> case x of)- (%~) SCK SCO = Disproved (\ x -> case x of)- (%~) SCK SCP = Disproved (\ x -> case x of)- (%~) SCK SCQ = Disproved (\ x -> case x of)- (%~) SCK SCR = Disproved (\ x -> case x of)- (%~) SCK SCS = Disproved (\ x -> case x of)- (%~) SCK SCT = Disproved (\ x -> case x of)- (%~) SCK SCU = Disproved (\ x -> case x of)- (%~) SCK SCV = Disproved (\ x -> case x of)- (%~) SCK SCW = Disproved (\ x -> case x of)- (%~) SCK SCX = Disproved (\ x -> case x of)- (%~) SCK SCY = Disproved (\ x -> case x of)- (%~) SCK SCZ = Disproved (\ x -> case x of)- (%~) SCL SCA = Disproved (\ x -> case x of)- (%~) SCL SCB = Disproved (\ x -> case x of)- (%~) SCL SCC = Disproved (\ x -> case x of)- (%~) SCL SCD = Disproved (\ x -> case x of)- (%~) SCL SCE = Disproved (\ x -> case x of)- (%~) SCL SCF = Disproved (\ x -> case x of)- (%~) SCL SCG = Disproved (\ x -> case x of)- (%~) SCL SCH = Disproved (\ x -> case x of)- (%~) SCL SCI = Disproved (\ x -> case x of)- (%~) SCL SCJ = Disproved (\ x -> case x of)- (%~) SCL SCK = Disproved (\ x -> case x of)- (%~) SCL SCL = Proved Refl- (%~) SCL SCM = Disproved (\ x -> case x of)- (%~) SCL SCN = Disproved (\ x -> case x of)- (%~) SCL SCO = Disproved (\ x -> case x of)- (%~) SCL SCP = Disproved (\ x -> case x of)- (%~) SCL SCQ = Disproved (\ x -> case x of)- (%~) SCL SCR = Disproved (\ x -> case x of)- (%~) SCL SCS = Disproved (\ x -> case x of)- (%~) SCL SCT = Disproved (\ x -> case x of)- (%~) SCL SCU = Disproved (\ x -> case x of)- (%~) SCL SCV = Disproved (\ x -> case x of)- (%~) SCL SCW = Disproved (\ x -> case x of)- (%~) SCL SCX = Disproved (\ x -> case x of)- (%~) SCL SCY = Disproved (\ x -> case x of)- (%~) SCL SCZ = Disproved (\ x -> case x of)- (%~) SCM SCA = Disproved (\ x -> case x of)- (%~) SCM SCB = Disproved (\ x -> case x of)- (%~) SCM SCC = Disproved (\ x -> case x of)- (%~) SCM SCD = Disproved (\ x -> case x of)- (%~) SCM SCE = Disproved (\ x -> case x of)- (%~) SCM SCF = Disproved (\ x -> case x of)- (%~) SCM SCG = Disproved (\ x -> case x of)- (%~) SCM SCH = Disproved (\ x -> case x of)- (%~) SCM SCI = Disproved (\ x -> case x of)- (%~) SCM SCJ = Disproved (\ x -> case x of)- (%~) SCM SCK = Disproved (\ x -> case x of)- (%~) SCM SCL = Disproved (\ x -> case x of)- (%~) SCM SCM = Proved Refl- (%~) SCM SCN = Disproved (\ x -> case x of)- (%~) SCM SCO = Disproved (\ x -> case x of)- (%~) SCM SCP = Disproved (\ x -> case x of)- (%~) SCM SCQ = Disproved (\ x -> case x of)- (%~) SCM SCR = Disproved (\ x -> case x of)- (%~) SCM SCS = Disproved (\ x -> case x of)- (%~) SCM SCT = Disproved (\ x -> case x of)- (%~) SCM SCU = Disproved (\ x -> case x of)- (%~) SCM SCV = Disproved (\ x -> case x of)- (%~) SCM SCW = Disproved (\ x -> case x of)- (%~) SCM SCX = Disproved (\ x -> case x of)- (%~) SCM SCY = Disproved (\ x -> case x of)- (%~) SCM SCZ = Disproved (\ x -> case x of)- (%~) SCN SCA = Disproved (\ x -> case x of)- (%~) SCN SCB = Disproved (\ x -> case x of)- (%~) SCN SCC = Disproved (\ x -> case x of)- (%~) SCN SCD = Disproved (\ x -> case x of)- (%~) SCN SCE = Disproved (\ x -> case x of)- (%~) SCN SCF = Disproved (\ x -> case x of)- (%~) SCN SCG = Disproved (\ x -> case x of)- (%~) SCN SCH = Disproved (\ x -> case x of)- (%~) SCN SCI = Disproved (\ x -> case x of)- (%~) SCN SCJ = Disproved (\ x -> case x of)- (%~) SCN SCK = Disproved (\ x -> case x of)- (%~) SCN SCL = Disproved (\ x -> case x of)- (%~) SCN SCM = Disproved (\ x -> case x of)- (%~) SCN SCN = Proved Refl- (%~) SCN SCO = Disproved (\ x -> case x of)- (%~) SCN SCP = Disproved (\ x -> case x of)- (%~) SCN SCQ = Disproved (\ x -> case x of)- (%~) SCN SCR = Disproved (\ x -> case x of)- (%~) SCN SCS = Disproved (\ x -> case x of)- (%~) SCN SCT = Disproved (\ x -> case x of)- (%~) SCN SCU = Disproved (\ x -> case x of)- (%~) SCN SCV = Disproved (\ x -> case x of)- (%~) SCN SCW = Disproved (\ x -> case x of)- (%~) SCN SCX = Disproved (\ x -> case x of)- (%~) SCN SCY = Disproved (\ x -> case x of)- (%~) SCN SCZ = Disproved (\ x -> case x of)- (%~) SCO SCA = Disproved (\ x -> case x of)- (%~) SCO SCB = Disproved (\ x -> case x of)- (%~) SCO SCC = Disproved (\ x -> case x of)- (%~) SCO SCD = Disproved (\ x -> case x of)- (%~) SCO SCE = Disproved (\ x -> case x of)- (%~) SCO SCF = Disproved (\ x -> case x of)- (%~) SCO SCG = Disproved (\ x -> case x of)- (%~) SCO SCH = Disproved (\ x -> case x of)- (%~) SCO SCI = Disproved (\ x -> case x of)- (%~) SCO SCJ = Disproved (\ x -> case x of)- (%~) SCO SCK = Disproved (\ x -> case x of)- (%~) SCO SCL = Disproved (\ x -> case x of)- (%~) SCO SCM = Disproved (\ x -> case x of)- (%~) SCO SCN = Disproved (\ x -> case x of)- (%~) SCO SCO = Proved Refl- (%~) SCO SCP = Disproved (\ x -> case x of)- (%~) SCO SCQ = Disproved (\ x -> case x of)- (%~) SCO SCR = Disproved (\ x -> case x of)- (%~) SCO SCS = Disproved (\ x -> case x of)- (%~) SCO SCT = Disproved (\ x -> case x of)- (%~) SCO SCU = Disproved (\ x -> case x of)- (%~) SCO SCV = Disproved (\ x -> case x of)- (%~) SCO SCW = Disproved (\ x -> case x of)- (%~) SCO SCX = Disproved (\ x -> case x of)- (%~) SCO SCY = Disproved (\ x -> case x of)- (%~) SCO SCZ = Disproved (\ x -> case x of)- (%~) SCP SCA = Disproved (\ x -> case x of)- (%~) SCP SCB = Disproved (\ x -> case x of)- (%~) SCP SCC = Disproved (\ x -> case x of)- (%~) SCP SCD = Disproved (\ x -> case x of)- (%~) SCP SCE = Disproved (\ x -> case x of)- (%~) SCP SCF = Disproved (\ x -> case x of)- (%~) SCP SCG = Disproved (\ x -> case x of)- (%~) SCP SCH = Disproved (\ x -> case x of)- (%~) SCP SCI = Disproved (\ x -> case x of)- (%~) SCP SCJ = Disproved (\ x -> case x of)- (%~) SCP SCK = Disproved (\ x -> case x of)- (%~) SCP SCL = Disproved (\ x -> case x of)- (%~) SCP SCM = Disproved (\ x -> case x of)- (%~) SCP SCN = Disproved (\ x -> case x of)- (%~) SCP SCO = Disproved (\ x -> case x of)- (%~) SCP SCP = Proved Refl- (%~) SCP SCQ = Disproved (\ x -> case x of)- (%~) SCP SCR = Disproved (\ x -> case x of)- (%~) SCP SCS = Disproved (\ x -> case x of)- (%~) SCP SCT = Disproved (\ x -> case x of)- (%~) SCP SCU = Disproved (\ x -> case x of)- (%~) SCP SCV = Disproved (\ x -> case x of)- (%~) SCP SCW = Disproved (\ x -> case x of)- (%~) SCP SCX = Disproved (\ x -> case x of)- (%~) SCP SCY = Disproved (\ x -> case x of)- (%~) SCP SCZ = Disproved (\ x -> case x of)- (%~) SCQ SCA = Disproved (\ x -> case x of)- (%~) SCQ SCB = Disproved (\ x -> case x of)- (%~) SCQ SCC = Disproved (\ x -> case x of)- (%~) SCQ SCD = Disproved (\ x -> case x of)- (%~) SCQ SCE = Disproved (\ x -> case x of)- (%~) SCQ SCF = Disproved (\ x -> case x of)- (%~) SCQ SCG = Disproved (\ x -> case x of)- (%~) SCQ SCH = Disproved (\ x -> case x of)- (%~) SCQ SCI = Disproved (\ x -> case x of)- (%~) SCQ SCJ = Disproved (\ x -> case x of)- (%~) SCQ SCK = Disproved (\ x -> case x of)- (%~) SCQ SCL = Disproved (\ x -> case x of)- (%~) SCQ SCM = Disproved (\ x -> case x of)- (%~) SCQ SCN = Disproved (\ x -> case x of)- (%~) SCQ SCO = Disproved (\ x -> case x of)- (%~) SCQ SCP = Disproved (\ x -> case x of)- (%~) SCQ SCQ = Proved Refl- (%~) SCQ SCR = Disproved (\ x -> case x of)- (%~) SCQ SCS = Disproved (\ x -> case x of)- (%~) SCQ SCT = Disproved (\ x -> case x of)- (%~) SCQ SCU = Disproved (\ x -> case x of)- (%~) SCQ SCV = Disproved (\ x -> case x of)- (%~) SCQ SCW = Disproved (\ x -> case x of)- (%~) SCQ SCX = Disproved (\ x -> case x of)- (%~) SCQ SCY = Disproved (\ x -> case x of)- (%~) SCQ SCZ = Disproved (\ x -> case x of)- (%~) SCR SCA = Disproved (\ x -> case x of)- (%~) SCR SCB = Disproved (\ x -> case x of)- (%~) SCR SCC = Disproved (\ x -> case x of)- (%~) SCR SCD = Disproved (\ x -> case x of)- (%~) SCR SCE = Disproved (\ x -> case x of)- (%~) SCR SCF = Disproved (\ x -> case x of)- (%~) SCR SCG = Disproved (\ x -> case x of)- (%~) SCR SCH = Disproved (\ x -> case x of)- (%~) SCR SCI = Disproved (\ x -> case x of)- (%~) SCR SCJ = Disproved (\ x -> case x of)- (%~) SCR SCK = Disproved (\ x -> case x of)- (%~) SCR SCL = Disproved (\ x -> case x of)- (%~) SCR SCM = Disproved (\ x -> case x of)- (%~) SCR SCN = Disproved (\ x -> case x of)- (%~) SCR SCO = Disproved (\ x -> case x of)- (%~) SCR SCP = Disproved (\ x -> case x of)- (%~) SCR SCQ = Disproved (\ x -> case x of)- (%~) SCR SCR = Proved Refl- (%~) SCR SCS = Disproved (\ x -> case x of)- (%~) SCR SCT = Disproved (\ x -> case x of)- (%~) SCR SCU = Disproved (\ x -> case x of)- (%~) SCR SCV = Disproved (\ x -> case x of)- (%~) SCR SCW = Disproved (\ x -> case x of)- (%~) SCR SCX = Disproved (\ x -> case x of)- (%~) SCR SCY = Disproved (\ x -> case x of)- (%~) SCR SCZ = Disproved (\ x -> case x of)- (%~) SCS SCA = Disproved (\ x -> case x of)- (%~) SCS SCB = Disproved (\ x -> case x of)- (%~) SCS SCC = Disproved (\ x -> case x of)- (%~) SCS SCD = Disproved (\ x -> case x of)- (%~) SCS SCE = Disproved (\ x -> case x of)- (%~) SCS SCF = Disproved (\ x -> case x of)- (%~) SCS SCG = Disproved (\ x -> case x of)- (%~) SCS SCH = Disproved (\ x -> case x of)- (%~) SCS SCI = Disproved (\ x -> case x of)- (%~) SCS SCJ = Disproved (\ x -> case x of)- (%~) SCS SCK = Disproved (\ x -> case x of)- (%~) SCS SCL = Disproved (\ x -> case x of)- (%~) SCS SCM = Disproved (\ x -> case x of)- (%~) SCS SCN = Disproved (\ x -> case x of)- (%~) SCS SCO = Disproved (\ x -> case x of)- (%~) SCS SCP = Disproved (\ x -> case x of)- (%~) SCS SCQ = Disproved (\ x -> case x of)- (%~) SCS SCR = Disproved (\ x -> case x of)- (%~) SCS SCS = Proved Refl- (%~) SCS SCT = Disproved (\ x -> case x of)- (%~) SCS SCU = Disproved (\ x -> case x of)- (%~) SCS SCV = Disproved (\ x -> case x of)- (%~) SCS SCW = Disproved (\ x -> case x of)- (%~) SCS SCX = Disproved (\ x -> case x of)- (%~) SCS SCY = Disproved (\ x -> case x of)- (%~) SCS SCZ = Disproved (\ x -> case x of)- (%~) SCT SCA = Disproved (\ x -> case x of)- (%~) SCT SCB = Disproved (\ x -> case x of)- (%~) SCT SCC = Disproved (\ x -> case x of)- (%~) SCT SCD = Disproved (\ x -> case x of)- (%~) SCT SCE = Disproved (\ x -> case x of)- (%~) SCT SCF = Disproved (\ x -> case x of)- (%~) SCT SCG = Disproved (\ x -> case x of)- (%~) SCT SCH = Disproved (\ x -> case x of)- (%~) SCT SCI = Disproved (\ x -> case x of)- (%~) SCT SCJ = Disproved (\ x -> case x of)- (%~) SCT SCK = Disproved (\ x -> case x of)- (%~) SCT SCL = Disproved (\ x -> case x of)- (%~) SCT SCM = Disproved (\ x -> case x of)- (%~) SCT SCN = Disproved (\ x -> case x of)- (%~) SCT SCO = Disproved (\ x -> case x of)- (%~) SCT SCP = Disproved (\ x -> case x of)- (%~) SCT SCQ = Disproved (\ x -> case x of)- (%~) SCT SCR = Disproved (\ x -> case x of)- (%~) SCT SCS = Disproved (\ x -> case x of)- (%~) SCT SCT = Proved Refl- (%~) SCT SCU = Disproved (\ x -> case x of)- (%~) SCT SCV = Disproved (\ x -> case x of)- (%~) SCT SCW = Disproved (\ x -> case x of)- (%~) SCT SCX = Disproved (\ x -> case x of)- (%~) SCT SCY = Disproved (\ x -> case x of)- (%~) SCT SCZ = Disproved (\ x -> case x of)- (%~) SCU SCA = Disproved (\ x -> case x of)- (%~) SCU SCB = Disproved (\ x -> case x of)- (%~) SCU SCC = Disproved (\ x -> case x of)- (%~) SCU SCD = Disproved (\ x -> case x of)- (%~) SCU SCE = Disproved (\ x -> case x of)- (%~) SCU SCF = Disproved (\ x -> case x of)- (%~) SCU SCG = Disproved (\ x -> case x of)- (%~) SCU SCH = Disproved (\ x -> case x of)- (%~) SCU SCI = Disproved (\ x -> case x of)- (%~) SCU SCJ = Disproved (\ x -> case x of)- (%~) SCU SCK = Disproved (\ x -> case x of)- (%~) SCU SCL = Disproved (\ x -> case x of)- (%~) SCU SCM = Disproved (\ x -> case x of)- (%~) SCU SCN = Disproved (\ x -> case x of)- (%~) SCU SCO = Disproved (\ x -> case x of)- (%~) SCU SCP = Disproved (\ x -> case x of)- (%~) SCU SCQ = Disproved (\ x -> case x of)- (%~) SCU SCR = Disproved (\ x -> case x of)- (%~) SCU SCS = Disproved (\ x -> case x of)- (%~) SCU SCT = Disproved (\ x -> case x of)- (%~) SCU SCU = Proved Refl- (%~) SCU SCV = Disproved (\ x -> case x of)- (%~) SCU SCW = Disproved (\ x -> case x of)- (%~) SCU SCX = Disproved (\ x -> case x of)- (%~) SCU SCY = Disproved (\ x -> case x of)- (%~) SCU SCZ = Disproved (\ x -> case x of)- (%~) SCV SCA = Disproved (\ x -> case x of)- (%~) SCV SCB = Disproved (\ x -> case x of)- (%~) SCV SCC = Disproved (\ x -> case x of)- (%~) SCV SCD = Disproved (\ x -> case x of)- (%~) SCV SCE = Disproved (\ x -> case x of)- (%~) SCV SCF = Disproved (\ x -> case x of)- (%~) SCV SCG = Disproved (\ x -> case x of)- (%~) SCV SCH = Disproved (\ x -> case x of)- (%~) SCV SCI = Disproved (\ x -> case x of)- (%~) SCV SCJ = Disproved (\ x -> case x of)- (%~) SCV SCK = Disproved (\ x -> case x of)- (%~) SCV SCL = Disproved (\ x -> case x of)- (%~) SCV SCM = Disproved (\ x -> case x of)- (%~) SCV SCN = Disproved (\ x -> case x of)- (%~) SCV SCO = Disproved (\ x -> case x of)- (%~) SCV SCP = Disproved (\ x -> case x of)- (%~) SCV SCQ = Disproved (\ x -> case x of)- (%~) SCV SCR = Disproved (\ x -> case x of)- (%~) SCV SCS = Disproved (\ x -> case x of)- (%~) SCV SCT = Disproved (\ x -> case x of)- (%~) SCV SCU = Disproved (\ x -> case x of)- (%~) SCV SCV = Proved Refl- (%~) SCV SCW = Disproved (\ x -> case x of)- (%~) SCV SCX = Disproved (\ x -> case x of)- (%~) SCV SCY = Disproved (\ x -> case x of)- (%~) SCV SCZ = Disproved (\ x -> case x of)- (%~) SCW SCA = Disproved (\ x -> case x of)- (%~) SCW SCB = Disproved (\ x -> case x of)- (%~) SCW SCC = Disproved (\ x -> case x of)- (%~) SCW SCD = Disproved (\ x -> case x of)- (%~) SCW SCE = Disproved (\ x -> case x of)- (%~) SCW SCF = Disproved (\ x -> case x of)- (%~) SCW SCG = Disproved (\ x -> case x of)- (%~) SCW SCH = Disproved (\ x -> case x of)- (%~) SCW SCI = Disproved (\ x -> case x of)- (%~) SCW SCJ = Disproved (\ x -> case x of)- (%~) SCW SCK = Disproved (\ x -> case x of)- (%~) SCW SCL = Disproved (\ x -> case x of)- (%~) SCW SCM = Disproved (\ x -> case x of)- (%~) SCW SCN = Disproved (\ x -> case x of)- (%~) SCW SCO = Disproved (\ x -> case x of)- (%~) SCW SCP = Disproved (\ x -> case x of)- (%~) SCW SCQ = Disproved (\ x -> case x of)- (%~) SCW SCR = Disproved (\ x -> case x of)- (%~) SCW SCS = Disproved (\ x -> case x of)- (%~) SCW SCT = Disproved (\ x -> case x of)- (%~) SCW SCU = Disproved (\ x -> case x of)- (%~) SCW SCV = Disproved (\ x -> case x of)- (%~) SCW SCW = Proved Refl- (%~) SCW SCX = Disproved (\ x -> case x of)- (%~) SCW SCY = Disproved (\ x -> case x of)- (%~) SCW SCZ = Disproved (\ x -> case x of)- (%~) SCX SCA = Disproved (\ x -> case x of)- (%~) SCX SCB = Disproved (\ x -> case x of)- (%~) SCX SCC = Disproved (\ x -> case x of)- (%~) SCX SCD = Disproved (\ x -> case x of)- (%~) SCX SCE = Disproved (\ x -> case x of)- (%~) SCX SCF = Disproved (\ x -> case x of)- (%~) SCX SCG = Disproved (\ x -> case x of)- (%~) SCX SCH = Disproved (\ x -> case x of)- (%~) SCX SCI = Disproved (\ x -> case x of)- (%~) SCX SCJ = Disproved (\ x -> case x of)- (%~) SCX SCK = Disproved (\ x -> case x of)- (%~) SCX SCL = Disproved (\ x -> case x of)- (%~) SCX SCM = Disproved (\ x -> case x of)- (%~) SCX SCN = Disproved (\ x -> case x of)- (%~) SCX SCO = Disproved (\ x -> case x of)- (%~) SCX SCP = Disproved (\ x -> case x of)- (%~) SCX SCQ = Disproved (\ x -> case x of)- (%~) SCX SCR = Disproved (\ x -> case x of)- (%~) SCX SCS = Disproved (\ x -> case x of)- (%~) SCX SCT = Disproved (\ x -> case x of)- (%~) SCX SCU = Disproved (\ x -> case x of)- (%~) SCX SCV = Disproved (\ x -> case x of)- (%~) SCX SCW = Disproved (\ x -> case x of)- (%~) SCX SCX = Proved Refl- (%~) SCX SCY = Disproved (\ x -> case x of)- (%~) SCX SCZ = Disproved (\ x -> case x of)- (%~) SCY SCA = Disproved (\ x -> case x of)- (%~) SCY SCB = Disproved (\ x -> case x of)- (%~) SCY SCC = Disproved (\ x -> case x of)- (%~) SCY SCD = Disproved (\ x -> case x of)- (%~) SCY SCE = Disproved (\ x -> case x of)- (%~) SCY SCF = Disproved (\ x -> case x of)- (%~) SCY SCG = Disproved (\ x -> case x of)- (%~) SCY SCH = Disproved (\ x -> case x of)- (%~) SCY SCI = Disproved (\ x -> case x of)- (%~) SCY SCJ = Disproved (\ x -> case x of)- (%~) SCY SCK = Disproved (\ x -> case x of)- (%~) SCY SCL = Disproved (\ x -> case x of)- (%~) SCY SCM = Disproved (\ x -> case x of)- (%~) SCY SCN = Disproved (\ x -> case x of)- (%~) SCY SCO = Disproved (\ x -> case x of)- (%~) SCY SCP = Disproved (\ x -> case x of)- (%~) SCY SCQ = Disproved (\ x -> case x of)- (%~) SCY SCR = Disproved (\ x -> case x of)- (%~) SCY SCS = Disproved (\ x -> case x of)- (%~) SCY SCT = Disproved (\ x -> case x of)- (%~) SCY SCU = Disproved (\ x -> case x of)- (%~) SCY SCV = Disproved (\ x -> case x of)- (%~) SCY SCW = Disproved (\ x -> case x of)- (%~) SCY SCX = Disproved (\ x -> case x of)- (%~) SCY SCY = Proved Refl- (%~) SCY SCZ = Disproved (\ x -> case x of)- (%~) SCZ SCA = Disproved (\ x -> case x of)- (%~) SCZ SCB = Disproved (\ x -> case x of)- (%~) SCZ SCC = Disproved (\ x -> case x of)- (%~) SCZ SCD = Disproved (\ x -> case x of)- (%~) SCZ SCE = Disproved (\ x -> case x of)- (%~) SCZ SCF = Disproved (\ x -> case x of)- (%~) SCZ SCG = Disproved (\ x -> case x of)- (%~) SCZ SCH = Disproved (\ x -> case x of)- (%~) SCZ SCI = Disproved (\ x -> case x of)- (%~) SCZ SCJ = Disproved (\ x -> case x of)- (%~) SCZ SCK = Disproved (\ x -> case x of)- (%~) SCZ SCL = Disproved (\ x -> case x of)- (%~) SCZ SCM = Disproved (\ x -> case x of)- (%~) SCZ SCN = Disproved (\ x -> case x of)- (%~) SCZ SCO = Disproved (\ x -> case x of)- (%~) SCZ SCP = Disproved (\ x -> case x of)- (%~) SCZ SCQ = Disproved (\ x -> case x of)- (%~) SCZ SCR = Disproved (\ x -> case x of)- (%~) SCZ SCS = Disproved (\ x -> case x of)- (%~) SCZ SCT = Disproved (\ x -> case x of)- (%~) SCZ SCU = Disproved (\ x -> case x of)- (%~) SCZ SCV = Disproved (\ x -> case x of)- (%~) SCZ SCW = Disproved (\ x -> case x of)- (%~) SCZ SCX = Disproved (\ x -> case x of)- (%~) SCZ SCY = Disproved (\ x -> case x of)- (%~) SCZ SCZ = Proved Refl- deriving instance (Data.Singletons.ShowSing.ShowSing U,- Data.Singletons.ShowSing.ShowSing Nat) =>- Show (Sing (z :: U))- deriving instance Show (Sing (z :: AChar))- instance SingI BOOL where- sing = SBOOL- instance SingI STRING where- sing = SSTRING- instance SingI NAT where- sing = SNAT- instance (SingI n, SingI n) =>- SingI (VEC (n :: U) (n :: Nat)) where- sing = (SVEC sing) sing- instance SingI (VECSym0 :: (~>) U ((~>) Nat U)) where- sing = (singFun2 @VECSym0) SVEC- instance SingI (TyCon2 VEC :: (~>) U ((~>) Nat U)) where- sing = (singFun2 @(TyCon2 VEC)) SVEC- instance SingI d => SingI (VECSym1 (d :: U) :: (~>) Nat U) where- sing = (singFun1 @(VECSym1 (d :: U))) (SVEC (sing @d))- instance SingI d =>- SingI (TyCon1 (VEC (d :: U)) :: (~>) Nat U) where- sing = (singFun1 @(TyCon1 (VEC (d :: U)))) (SVEC (sing @d))- instance SingI CA where- sing = SCA- instance SingI CB where- sing = SCB- instance SingI CC where- sing = SCC- instance SingI CD where- sing = SCD- instance SingI CE where- sing = SCE- instance SingI CF where- sing = SCF- instance SingI CG where- sing = SCG- instance SingI CH where- sing = SCH- instance SingI CI where- sing = SCI- instance SingI CJ where- sing = SCJ- instance SingI CK where- sing = SCK- instance SingI CL where- sing = SCL- instance SingI CM where- sing = SCM- instance SingI CN where- sing = SCN- instance SingI CO where- sing = SCO- instance SingI CP where- sing = SCP- instance SingI CQ where- sing = SCQ- instance SingI CR where- sing = SCR- instance SingI CS where- sing = SCS- instance SingI CT where- sing = SCT- instance SingI CU where- sing = SCU- instance SingI CV where- sing = SCV- instance SingI CW where- sing = SCW- instance SingI CX where- sing = SCX- instance SingI CY where- sing = SCY- instance SingI CZ where- sing = SCZ- instance (SingI n, SingI n) =>- SingI (Attr (n :: [AChar]) (n :: U)) where- sing = (SAttr sing) sing- instance SingI (AttrSym0 :: (~>) [AChar] ((~>) U Attribute)) where- sing = (singFun2 @AttrSym0) SAttr- instance SingI (TyCon2 Attr :: (~>) [AChar] ((~>) U Attribute)) where- sing = (singFun2 @(TyCon2 Attr)) SAttr- instance SingI d =>- SingI (AttrSym1 (d :: [AChar]) :: (~>) U Attribute) where- sing = (singFun1 @(AttrSym1 (d :: [AChar]))) (SAttr (sing @d))- instance SingI d =>- SingI (TyCon1 (Attr (d :: [AChar])) :: (~>) U Attribute) where- sing = (singFun1 @(TyCon1 (Attr (d :: [AChar])))) (SAttr (sing @d))- instance SingI n => SingI (Sch (n :: [Attribute])) where- sing = SSch sing- instance SingI (SchSym0 :: (~>) [Attribute] Schema) where- sing = (singFun1 @SchSym0) SSch- instance SingI (TyCon1 Sch :: (~>) [Attribute] Schema) where- sing = (singFun1 @(TyCon1 Sch)) SSch-GradingClient/Database.hs:0:0:: Splicing declarations- return [] ======>-GradingClient/Database.hs:(0,0)-(0,0): Splicing expression- cases ''Row [| r |] [| changeId (n ++ (getId r)) r |]- ======>- case r of- EmptyRow _ -> (changeId (((++) n) (getId r))) r- ConsRow _ _ -> (changeId (((++) n) (getId r))) r
+ tests/compile-and-dump/GradingClient/Database.ghc88.template view
@@ -0,0 +1,2663 @@+GradingClient/Database.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Nat+ = Zero | Succ Nat+ deriving (Eq, Ord) |]+ ======>+ data Nat+ = Zero | Succ Nat+ deriving (Eq, Ord)+ type ZeroSym0 = Zero+ type SuccSym1 (t0123456789876543210 :: Nat) =+ Succ t0123456789876543210+ instance SuppressUnusedWarnings SuccSym0 where+ suppressUnusedWarnings = snd (((,) SuccSym0KindInference) ())+ data SuccSym0 :: (~>) Nat Nat+ where+ SuccSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>+ SuccSym0 t0123456789876543210+ type instance Apply SuccSym0 t0123456789876543210 = Succ t0123456789876543210+ type family Compare_0123456789876543210 (a :: Nat) (a :: Nat) :: Ordering where+ Compare_0123456789876543210 Zero Zero = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 (Succ a_0123456789876543210) (Succ b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])+ Compare_0123456789876543210 Zero (Succ _) = LTSym0+ Compare_0123456789876543210 (Succ _) Zero = GTSym0+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Nat Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd Nat where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family Equals_0123456789876543210 (a :: Nat) (b :: Nat) :: Bool where+ Equals_0123456789876543210 Zero Zero = TrueSym0+ Equals_0123456789876543210 (Succ a) (Succ b) = (==) a b+ Equals_0123456789876543210 (_ :: Nat) (_ :: Nat) = FalseSym0+ instance PEq Nat where+ type (==) a b = Equals_0123456789876543210 a b+ data SNat :: Nat -> Type+ where+ SZero :: SNat Zero+ SSucc :: forall (n :: Nat). (Sing (n :: Nat)) -> SNat (Succ n)+ type instance Sing @Nat = SNat+ instance SingKind Nat where+ type Demote Nat = Nat+ fromSing SZero = Zero+ fromSing (SSucc b) = Succ (fromSing b)+ toSing Zero = SomeSing SZero+ toSing (Succ (b :: Demote Nat))+ = case toSing b :: SomeSing Nat of {+ SomeSing c -> SomeSing (SSucc c) }+ instance SOrd Nat => SOrd Nat where+ sCompare ::+ forall (t1 :: Nat) (t2 :: Nat).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)+ -> Type) t1) t2)+ sCompare SZero SZero+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ SNil+ sCompare+ (SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil)+ sCompare SZero (SSucc _) = SLT+ sCompare (SSucc _) SZero = SGT+ instance SEq Nat => SEq Nat where+ (%==) SZero SZero = STrue+ (%==) SZero (SSucc _) = SFalse+ (%==) (SSucc _) SZero = SFalse+ (%==) (SSucc a) (SSucc b) = ((%==) a) b+ instance SDecide Nat => SDecide Nat where+ (%~) SZero SZero = Proved Refl+ (%~) SZero (SSucc _) = Disproved (\ x -> case x of)+ (%~) (SSucc _) SZero = Disproved (\ x -> case x of)+ (%~) (SSucc a) (SSucc b)+ = case ((%~) a) b of+ Proved Refl -> Proved Refl+ Disproved contra+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ instance SDecide Nat =>+ Data.Type.Equality.TestEquality (SNat :: Nat -> Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance SDecide Nat =>+ Data.Type.Coercion.TestCoercion (SNat :: Nat -> Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance SingI Zero where+ sing = SZero+ instance SingI n => SingI (Succ (n :: Nat)) where+ sing = SSucc sing+ instance SingI (SuccSym0 :: (~>) Nat Nat) where+ sing = (singFun1 @SuccSym0) SSucc+GradingClient/Database.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| append :: Schema -> Schema -> Schema+ append (Sch s1) (Sch s2) = Sch (s1 ++ s2)+ attrNotIn :: Attribute -> Schema -> Bool+ attrNotIn _ (Sch []) = True+ attrNotIn (Attr name u) (Sch ((Attr name' _) : t))+ = (name /= name') && (attrNotIn (Attr name u) (Sch t))+ disjoint :: Schema -> Schema -> Bool+ disjoint (Sch []) _ = True+ disjoint (Sch (h : t)) s = (attrNotIn h s) && (disjoint (Sch t) s)+ occurs :: [AChar] -> Schema -> Bool+ occurs _ (Sch []) = False+ occurs name (Sch ((Attr name' _) : attrs))+ = name == name' || occurs name (Sch attrs)+ lookup :: [AChar] -> Schema -> U+ lookup _ (Sch []) = undefined+ lookup name (Sch ((Attr name' u) : attrs))+ = if name == name' then u else lookup name (Sch attrs)+ + data U+ = BOOL | STRING | NAT | VEC U Nat+ deriving (Read, Eq, Show)+ data AChar+ = CA |+ CB |+ CC |+ CD |+ CE |+ CF |+ CG |+ CH |+ CI |+ CJ |+ CK |+ CL |+ CM |+ CN |+ CO |+ CP |+ CQ |+ CR |+ CS |+ CT |+ CU |+ CV |+ CW |+ CX |+ CY |+ CZ+ deriving (Read, Show, Eq)+ data Attribute = Attr [AChar] U+ data Schema = Sch [Attribute] |]+ ======>+ data U+ = BOOL | STRING | NAT | VEC U Nat+ deriving (Read, Eq, Show)+ data AChar+ = CA |+ CB |+ CC |+ CD |+ CE |+ CF |+ CG |+ CH |+ CI |+ CJ |+ CK |+ CL |+ CM |+ CN |+ CO |+ CP |+ CQ |+ CR |+ CS |+ CT |+ CU |+ CV |+ CW |+ CX |+ CY |+ CZ+ deriving (Read, Show, Eq)+ data Attribute = Attr [AChar] U+ data Schema = Sch [Attribute]+ append :: Schema -> Schema -> Schema+ append (Sch s1) (Sch s2) = Sch (s1 ++ s2)+ attrNotIn :: Attribute -> Schema -> Bool+ attrNotIn _ (Sch []) = True+ attrNotIn (Attr name u) (Sch (Attr name' _ : t))+ = ((name /= name') && (attrNotIn ((Attr name) u)) (Sch t))+ disjoint :: Schema -> Schema -> Bool+ disjoint (Sch []) _ = True+ disjoint (Sch (h : t)) s+ = ((attrNotIn h) s && (disjoint (Sch t)) s)+ occurs :: [AChar] -> Schema -> Bool+ occurs _ (Sch []) = False+ occurs name (Sch (Attr name' _ : attrs))+ = ((name == name') || (occurs name) (Sch attrs))+ lookup :: [AChar] -> Schema -> U+ lookup _ (Sch []) = undefined+ lookup name (Sch (Attr name' u : attrs))+ = if (name == name') then u else (lookup name) (Sch attrs)+ type BOOLSym0 = BOOL+ type STRINGSym0 = STRING+ type NATSym0 = NAT+ type VECSym2 (t0123456789876543210 :: U) (t0123456789876543210 :: Nat) =+ VEC t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (VECSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) VECSym1KindInference) ())+ data VECSym1 (t0123456789876543210 :: U) :: (~>) Nat U+ where+ VECSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (VECSym1 t0123456789876543210) arg) (VECSym2 t0123456789876543210 arg) =>+ VECSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (VECSym1 t0123456789876543210) t0123456789876543210 = VEC t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings VECSym0 where+ suppressUnusedWarnings = snd (((,) VECSym0KindInference) ())+ data VECSym0 :: (~>) U ((~>) Nat U)+ where+ VECSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply VECSym0 arg) (VECSym1 arg) =>+ VECSym0 t0123456789876543210+ type instance Apply VECSym0 t0123456789876543210 = VECSym1 t0123456789876543210+ type CASym0 = CA+ type CBSym0 = CB+ type CCSym0 = CC+ type CDSym0 = CD+ type CESym0 = CE+ type CFSym0 = CF+ type CGSym0 = CG+ type CHSym0 = CH+ type CISym0 = CI+ type CJSym0 = CJ+ type CKSym0 = CK+ type CLSym0 = CL+ type CMSym0 = CM+ type CNSym0 = CN+ type COSym0 = CO+ type CPSym0 = CP+ type CQSym0 = CQ+ type CRSym0 = CR+ type CSSym0 = CS+ type CTSym0 = CT+ type CUSym0 = CU+ type CVSym0 = CV+ type CWSym0 = CW+ type CXSym0 = CX+ type CYSym0 = CY+ type CZSym0 = CZ+ type AttrSym2 (t0123456789876543210 :: [AChar]) (t0123456789876543210 :: U) =+ Attr t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (AttrSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) AttrSym1KindInference) ())+ data AttrSym1 (t0123456789876543210 :: [AChar]) :: (~>) U Attribute+ where+ AttrSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (AttrSym1 t0123456789876543210) arg) (AttrSym2 t0123456789876543210 arg) =>+ AttrSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (AttrSym1 t0123456789876543210) t0123456789876543210 = Attr t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings AttrSym0 where+ suppressUnusedWarnings = snd (((,) AttrSym0KindInference) ())+ data AttrSym0 :: (~>) [AChar] ((~>) U Attribute)+ where+ AttrSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply AttrSym0 arg) (AttrSym1 arg) =>+ AttrSym0 t0123456789876543210+ type instance Apply AttrSym0 t0123456789876543210 = AttrSym1 t0123456789876543210+ type SchSym1 (t0123456789876543210 :: [Attribute]) =+ Sch t0123456789876543210+ instance SuppressUnusedWarnings SchSym0 where+ suppressUnusedWarnings = snd (((,) SchSym0KindInference) ())+ data SchSym0 :: (~>) [Attribute] Schema+ where+ SchSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply SchSym0 arg) (SchSym1 arg) =>+ SchSym0 t0123456789876543210+ type instance Apply SchSym0 t0123456789876543210 = Sch t0123456789876543210+ type Let0123456789876543210Scrutinee_0123456789876543210Sym4 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210 =+ Let0123456789876543210Scrutinee_0123456789876543210 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym3 u0123456789876543210 name'0123456789876543210 name0123456789876543210) where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym3KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym3KindInference :: forall name0123456789876543210+ name'0123456789876543210+ u0123456789876543210+ attrs0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name0123456789876543210 name'0123456789876543210 u0123456789876543210 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 u0123456789876543210 attrs0123456789876543210+ type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym3 u0123456789876543210 name'0123456789876543210 name0123456789876543210) attrs0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 u0123456789876543210 name'0123456789876543210 name0123456789876543210 attrs0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name'0123456789876543210 name0123456789876543210) where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210 u0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference :: forall name0123456789876543210+ name'0123456789876543210+ u0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym3 name0123456789876543210 name'0123456789876543210 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210 u0123456789876543210+ type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name'0123456789876543210 name0123456789876543210) u0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym3 name'0123456789876543210 name0123456789876543210 u0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210 name'0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference :: forall name0123456789876543210+ name'0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210 name'0123456789876543210+ type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210) name'0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym2 name0123456789876543210 name'0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall name0123456789876543210+ arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210+ type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 name0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym1 name0123456789876543210+ type family Let0123456789876543210Scrutinee_0123456789876543210 name name' u attrs where+ Let0123456789876543210Scrutinee_0123456789876543210 name name' u attrs = Apply (Apply (==@#@$) name) name'+ type family Case_0123456789876543210 name name' u attrs t where+ Case_0123456789876543210 name name' u attrs 'True = u+ Case_0123456789876543210 name name' u attrs 'False = Apply (Apply LookupSym0 name) (Apply SchSym0 attrs)+ type LookupSym2 (a0123456789876543210 :: [AChar]) (a0123456789876543210 :: Schema) =+ Lookup a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (LookupSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) LookupSym1KindInference) ())+ data LookupSym1 (a0123456789876543210 :: [AChar]) :: (~>) Schema U+ where+ LookupSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (LookupSym1 a0123456789876543210) arg) (LookupSym2 a0123456789876543210 arg) =>+ LookupSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (LookupSym1 a0123456789876543210) a0123456789876543210 = Lookup a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings LookupSym0 where+ suppressUnusedWarnings = snd (((,) LookupSym0KindInference) ())+ data LookupSym0 :: (~>) [AChar] ((~>) Schema U)+ where+ LookupSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply LookupSym0 arg) (LookupSym1 arg) =>+ LookupSym0 a0123456789876543210+ type instance Apply LookupSym0 a0123456789876543210 = LookupSym1 a0123456789876543210+ type OccursSym2 (a0123456789876543210 :: [AChar]) (a0123456789876543210 :: Schema) =+ Occurs a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (OccursSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) OccursSym1KindInference) ())+ data OccursSym1 (a0123456789876543210 :: [AChar]) :: (~>) Schema Bool+ where+ OccursSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (OccursSym1 a0123456789876543210) arg) (OccursSym2 a0123456789876543210 arg) =>+ OccursSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (OccursSym1 a0123456789876543210) a0123456789876543210 = Occurs a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings OccursSym0 where+ suppressUnusedWarnings = snd (((,) OccursSym0KindInference) ())+ data OccursSym0 :: (~>) [AChar] ((~>) Schema Bool)+ where+ OccursSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply OccursSym0 arg) (OccursSym1 arg) =>+ OccursSym0 a0123456789876543210+ type instance Apply OccursSym0 a0123456789876543210 = OccursSym1 a0123456789876543210+ type DisjointSym2 (a0123456789876543210 :: Schema) (a0123456789876543210 :: Schema) =+ Disjoint a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (DisjointSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) DisjointSym1KindInference) ())+ data DisjointSym1 (a0123456789876543210 :: Schema) :: (~>) Schema Bool+ where+ DisjointSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (DisjointSym1 a0123456789876543210) arg) (DisjointSym2 a0123456789876543210 arg) =>+ DisjointSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (DisjointSym1 a0123456789876543210) a0123456789876543210 = Disjoint a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings DisjointSym0 where+ suppressUnusedWarnings = snd (((,) DisjointSym0KindInference) ())+ data DisjointSym0 :: (~>) Schema ((~>) Schema Bool)+ where+ DisjointSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply DisjointSym0 arg) (DisjointSym1 arg) =>+ DisjointSym0 a0123456789876543210+ type instance Apply DisjointSym0 a0123456789876543210 = DisjointSym1 a0123456789876543210+ type AttrNotInSym2 (a0123456789876543210 :: Attribute) (a0123456789876543210 :: Schema) =+ AttrNotIn a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (AttrNotInSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) AttrNotInSym1KindInference) ())+ data AttrNotInSym1 (a0123456789876543210 :: Attribute) :: (~>) Schema Bool+ where+ AttrNotInSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (AttrNotInSym1 a0123456789876543210) arg) (AttrNotInSym2 a0123456789876543210 arg) =>+ AttrNotInSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (AttrNotInSym1 a0123456789876543210) a0123456789876543210 = AttrNotIn a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings AttrNotInSym0 where+ suppressUnusedWarnings = snd (((,) AttrNotInSym0KindInference) ())+ data AttrNotInSym0 :: (~>) Attribute ((~>) Schema Bool)+ where+ AttrNotInSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply AttrNotInSym0 arg) (AttrNotInSym1 arg) =>+ AttrNotInSym0 a0123456789876543210+ type instance Apply AttrNotInSym0 a0123456789876543210 = AttrNotInSym1 a0123456789876543210+ type AppendSym2 (a0123456789876543210 :: Schema) (a0123456789876543210 :: Schema) =+ Append a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (AppendSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) AppendSym1KindInference) ())+ data AppendSym1 (a0123456789876543210 :: Schema) :: (~>) Schema Schema+ where+ AppendSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (AppendSym1 a0123456789876543210) arg) (AppendSym2 a0123456789876543210 arg) =>+ AppendSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (AppendSym1 a0123456789876543210) a0123456789876543210 = Append a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings AppendSym0 where+ suppressUnusedWarnings = snd (((,) AppendSym0KindInference) ())+ data AppendSym0 :: (~>) Schema ((~>) Schema Schema)+ where+ AppendSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply AppendSym0 arg) (AppendSym1 arg) =>+ AppendSym0 a0123456789876543210+ type instance Apply AppendSym0 a0123456789876543210 = AppendSym1 a0123456789876543210+ type family Lookup (a :: [AChar]) (a :: Schema) :: U where+ Lookup _ (Sch '[]) = UndefinedSym0+ Lookup name (Sch ('(:) (Attr name' u) attrs)) = Case_0123456789876543210 name name' u attrs (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs)+ type family Occurs (a :: [AChar]) (a :: Schema) :: Bool where+ Occurs _ (Sch '[]) = FalseSym0+ Occurs name (Sch ('(:) (Attr name' _) attrs)) = Apply (Apply (||@#@$) (Apply (Apply (==@#@$) name) name')) (Apply (Apply OccursSym0 name) (Apply SchSym0 attrs))+ type family Disjoint (a :: Schema) (a :: Schema) :: Bool where+ Disjoint (Sch '[]) _ = TrueSym0+ Disjoint (Sch ('(:) h t)) s = Apply (Apply (&&@#@$) (Apply (Apply AttrNotInSym0 h) s)) (Apply (Apply DisjointSym0 (Apply SchSym0 t)) s)+ type family AttrNotIn (a :: Attribute) (a :: Schema) :: Bool where+ AttrNotIn _ (Sch '[]) = TrueSym0+ AttrNotIn (Attr name u) (Sch ('(:) (Attr name' _) t)) = Apply (Apply (&&@#@$) (Apply (Apply (/=@#@$) name) name')) (Apply (Apply AttrNotInSym0 (Apply (Apply AttrSym0 name) u)) (Apply SchSym0 t))+ type family Append (a :: Schema) (a :: Schema) :: Schema where+ Append (Sch s1) (Sch s2) = Apply SchSym0 (Apply (Apply (++@#@$) s1) s2)+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: U) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 _ BOOL a_0123456789876543210 = Apply (Apply ShowStringSym0 "BOOL") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ STRING a_0123456789876543210 = Apply (Apply ShowStringSym0 "STRING") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ NAT a_0123456789876543210 = Apply (Apply ShowStringSym0 "NAT") a_0123456789876543210+ ShowsPrec_0123456789876543210 p_0123456789876543210 (VEC arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "VEC ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: U) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: U) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) U ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) U ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow U where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: AChar) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 _ CA a_0123456789876543210 = Apply (Apply ShowStringSym0 "CA") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CB a_0123456789876543210 = Apply (Apply ShowStringSym0 "CB") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CC a_0123456789876543210 = Apply (Apply ShowStringSym0 "CC") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CD a_0123456789876543210 = Apply (Apply ShowStringSym0 "CD") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CE a_0123456789876543210 = Apply (Apply ShowStringSym0 "CE") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CF a_0123456789876543210 = Apply (Apply ShowStringSym0 "CF") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CG a_0123456789876543210 = Apply (Apply ShowStringSym0 "CG") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CH a_0123456789876543210 = Apply (Apply ShowStringSym0 "CH") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CI a_0123456789876543210 = Apply (Apply ShowStringSym0 "CI") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CJ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CJ") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CK a_0123456789876543210 = Apply (Apply ShowStringSym0 "CK") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CL a_0123456789876543210 = Apply (Apply ShowStringSym0 "CL") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CM a_0123456789876543210 = Apply (Apply ShowStringSym0 "CM") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CN a_0123456789876543210 = Apply (Apply ShowStringSym0 "CN") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CO a_0123456789876543210 = Apply (Apply ShowStringSym0 "CO") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CP a_0123456789876543210 = Apply (Apply ShowStringSym0 "CP") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CQ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CQ") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CR a_0123456789876543210 = Apply (Apply ShowStringSym0 "CR") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CS a_0123456789876543210 = Apply (Apply ShowStringSym0 "CS") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CT a_0123456789876543210 = Apply (Apply ShowStringSym0 "CT") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CU a_0123456789876543210 = Apply (Apply ShowStringSym0 "CU") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CV a_0123456789876543210 = Apply (Apply ShowStringSym0 "CV") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CW a_0123456789876543210 = Apply (Apply ShowStringSym0 "CW") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CX a_0123456789876543210 = Apply (Apply ShowStringSym0 "CX") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CY a_0123456789876543210 = Apply (Apply ShowStringSym0 "CY") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ CZ a_0123456789876543210 = Apply (Apply ShowStringSym0 "CZ") a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: AChar) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: AChar) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) AChar ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) AChar ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow AChar where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family Equals_0123456789876543210 (a :: U) (b :: U) :: Bool where+ Equals_0123456789876543210 BOOL BOOL = TrueSym0+ Equals_0123456789876543210 STRING STRING = TrueSym0+ Equals_0123456789876543210 NAT NAT = TrueSym0+ Equals_0123456789876543210 (VEC a a) (VEC b b) = (&&) ((==) a b) ((==) a b)+ Equals_0123456789876543210 (_ :: U) (_ :: U) = FalseSym0+ instance PEq U where+ type (==) a b = Equals_0123456789876543210 a b+ type family Equals_0123456789876543210 (a :: AChar) (b :: AChar) :: Bool where+ Equals_0123456789876543210 CA CA = TrueSym0+ Equals_0123456789876543210 CB CB = TrueSym0+ Equals_0123456789876543210 CC CC = TrueSym0+ Equals_0123456789876543210 CD CD = TrueSym0+ Equals_0123456789876543210 CE CE = TrueSym0+ Equals_0123456789876543210 CF CF = TrueSym0+ Equals_0123456789876543210 CG CG = TrueSym0+ Equals_0123456789876543210 CH CH = TrueSym0+ Equals_0123456789876543210 CI CI = TrueSym0+ Equals_0123456789876543210 CJ CJ = TrueSym0+ Equals_0123456789876543210 CK CK = TrueSym0+ Equals_0123456789876543210 CL CL = TrueSym0+ Equals_0123456789876543210 CM CM = TrueSym0+ Equals_0123456789876543210 CN CN = TrueSym0+ Equals_0123456789876543210 CO CO = TrueSym0+ Equals_0123456789876543210 CP CP = TrueSym0+ Equals_0123456789876543210 CQ CQ = TrueSym0+ Equals_0123456789876543210 CR CR = TrueSym0+ Equals_0123456789876543210 CS CS = TrueSym0+ Equals_0123456789876543210 CT CT = TrueSym0+ Equals_0123456789876543210 CU CU = TrueSym0+ Equals_0123456789876543210 CV CV = TrueSym0+ Equals_0123456789876543210 CW CW = TrueSym0+ Equals_0123456789876543210 CX CX = TrueSym0+ Equals_0123456789876543210 CY CY = TrueSym0+ Equals_0123456789876543210 CZ CZ = TrueSym0+ Equals_0123456789876543210 (_ :: AChar) (_ :: AChar) = FalseSym0+ instance PEq AChar where+ type (==) a b = Equals_0123456789876543210 a b+ sLookup ::+ forall (t :: [AChar]) (t :: Schema).+ Sing t -> Sing t -> Sing (Apply (Apply LookupSym0 t) t :: U)+ sOccurs ::+ forall (t :: [AChar]) (t :: Schema).+ Sing t -> Sing t -> Sing (Apply (Apply OccursSym0 t) t :: Bool)+ sDisjoint ::+ forall (t :: Schema) (t :: Schema).+ Sing t -> Sing t -> Sing (Apply (Apply DisjointSym0 t) t :: Bool)+ sAttrNotIn ::+ forall (t :: Attribute) (t :: Schema).+ Sing t -> Sing t -> Sing (Apply (Apply AttrNotInSym0 t) t :: Bool)+ sAppend ::+ forall (t :: Schema) (t :: Schema).+ Sing t -> Sing t -> Sing (Apply (Apply AppendSym0 t) t :: Schema)+ sLookup _ (SSch SNil) = sUndefined+ sLookup+ (sName :: Sing name)+ (SSch (SCons (SAttr (sName' :: Sing name') (sU :: Sing u))+ (sAttrs :: Sing attrs)))+ = let+ sScrutinee_0123456789876543210 ::+ Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs)+ sScrutinee_0123456789876543210+ = (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sName))+ sName'+ in+ (GHC.Base.id+ @(Sing (Case_0123456789876543210 name name' u attrs (Let0123456789876543210Scrutinee_0123456789876543210Sym4 name name' u attrs) :: U)))+ (case sScrutinee_0123456789876543210 of+ STrue -> sU+ SFalse+ -> (applySing ((applySing ((singFun2 @LookupSym0) sLookup)) sName))+ ((applySing ((singFun1 @SchSym0) SSch)) sAttrs))+ sOccurs _ (SSch SNil) = SFalse+ sOccurs+ (sName :: Sing name)+ (SSch (SCons (SAttr (sName' :: Sing name') _)+ (sAttrs :: Sing attrs)))+ = (applySing+ ((applySing ((singFun2 @(||@#@$)) (%||)))+ ((applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sName))+ sName')))+ ((applySing ((applySing ((singFun2 @OccursSym0) sOccurs)) sName))+ ((applySing ((singFun1 @SchSym0) SSch)) sAttrs))+ sDisjoint (SSch SNil) _ = STrue+ sDisjoint+ (SSch (SCons (sH :: Sing h) (sT :: Sing t)))+ (sS :: Sing s)+ = (applySing+ ((applySing ((singFun2 @(&&@#@$)) (%&&)))+ ((applySing+ ((applySing ((singFun2 @AttrNotInSym0) sAttrNotIn)) sH))+ sS)))+ ((applySing+ ((applySing ((singFun2 @DisjointSym0) sDisjoint))+ ((applySing ((singFun1 @SchSym0) SSch)) sT)))+ sS)+ sAttrNotIn _ (SSch SNil) = STrue+ sAttrNotIn+ (SAttr (sName :: Sing name) (sU :: Sing u))+ (SSch (SCons (SAttr (sName' :: Sing name') _) (sT :: Sing t)))+ = (applySing+ ((applySing ((singFun2 @(&&@#@$)) (%&&)))+ ((applySing ((applySing ((singFun2 @(/=@#@$)) (%/=))) sName))+ sName')))+ ((applySing+ ((applySing ((singFun2 @AttrNotInSym0) sAttrNotIn))+ ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sName)) sU)))+ ((applySing ((singFun1 @SchSym0) SSch)) sT))+ sAppend (SSch (sS1 :: Sing s1)) (SSch (sS2 :: Sing s2))+ = (applySing ((singFun1 @SchSym0) SSch))+ ((applySing ((applySing ((singFun2 @(++@#@$)) (%++))) sS1)) sS2)+ instance SingI (LookupSym0 :: (~>) [AChar] ((~>) Schema U)) where+ sing = (singFun2 @LookupSym0) sLookup+ instance SingI d =>+ SingI (LookupSym1 (d :: [AChar]) :: (~>) Schema U) where+ sing = (singFun1 @(LookupSym1 (d :: [AChar]))) (sLookup (sing @d))+ instance SingI (OccursSym0 :: (~>) [AChar] ((~>) Schema Bool)) where+ sing = (singFun2 @OccursSym0) sOccurs+ instance SingI d =>+ SingI (OccursSym1 (d :: [AChar]) :: (~>) Schema Bool) where+ sing = (singFun1 @(OccursSym1 (d :: [AChar]))) (sOccurs (sing @d))+ instance SingI (DisjointSym0 :: (~>) Schema ((~>) Schema Bool)) where+ sing = (singFun2 @DisjointSym0) sDisjoint+ instance SingI d =>+ SingI (DisjointSym1 (d :: Schema) :: (~>) Schema Bool) where+ sing+ = (singFun1 @(DisjointSym1 (d :: Schema))) (sDisjoint (sing @d))+ instance SingI (AttrNotInSym0 :: (~>) Attribute ((~>) Schema Bool)) where+ sing = (singFun2 @AttrNotInSym0) sAttrNotIn+ instance SingI d =>+ SingI (AttrNotInSym1 (d :: Attribute) :: (~>) Schema Bool) where+ sing+ = (singFun1 @(AttrNotInSym1 (d :: Attribute)))+ (sAttrNotIn (sing @d))+ instance SingI (AppendSym0 :: (~>) Schema ((~>) Schema Schema)) where+ sing = (singFun2 @AppendSym0) sAppend+ instance SingI d =>+ SingI (AppendSym1 (d :: Schema) :: (~>) Schema Schema) where+ sing = (singFun1 @(AppendSym1 (d :: Schema))) (sAppend (sing @d))+ data SU :: U -> Type+ where+ SBOOL :: SU BOOL+ SSTRING :: SU STRING+ SNAT :: SU NAT+ SVEC :: forall (n :: U) (n :: Nat).+ (Sing (n :: U)) -> (Sing (n :: Nat)) -> SU (VEC n n)+ type instance Sing @U = SU+ instance SingKind U where+ type Demote U = U+ fromSing SBOOL = BOOL+ fromSing SSTRING = STRING+ fromSing SNAT = NAT+ fromSing (SVEC b b) = (VEC (fromSing b)) (fromSing b)+ toSing BOOL = SomeSing SBOOL+ toSing STRING = SomeSing SSTRING+ toSing NAT = SomeSing SNAT+ toSing (VEC (b :: Demote U) (b :: Demote Nat))+ = case+ ((,) (toSing b :: SomeSing U)) (toSing b :: SomeSing Nat)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SVEC c) c) }+ data SAChar :: AChar -> Type+ where+ SCA :: SAChar CA+ SCB :: SAChar CB+ SCC :: SAChar CC+ SCD :: SAChar CD+ SCE :: SAChar CE+ SCF :: SAChar CF+ SCG :: SAChar CG+ SCH :: SAChar CH+ SCI :: SAChar CI+ SCJ :: SAChar CJ+ SCK :: SAChar CK+ SCL :: SAChar CL+ SCM :: SAChar CM+ SCN :: SAChar CN+ SCO :: SAChar CO+ SCP :: SAChar CP+ SCQ :: SAChar CQ+ SCR :: SAChar CR+ SCS :: SAChar CS+ SCT :: SAChar CT+ SCU :: SAChar CU+ SCV :: SAChar CV+ SCW :: SAChar CW+ SCX :: SAChar CX+ SCY :: SAChar CY+ SCZ :: SAChar CZ+ type instance Sing @AChar = SAChar+ instance SingKind AChar where+ type Demote AChar = AChar+ fromSing SCA = CA+ fromSing SCB = CB+ fromSing SCC = CC+ fromSing SCD = CD+ fromSing SCE = CE+ fromSing SCF = CF+ fromSing SCG = CG+ fromSing SCH = CH+ fromSing SCI = CI+ fromSing SCJ = CJ+ fromSing SCK = CK+ fromSing SCL = CL+ fromSing SCM = CM+ fromSing SCN = CN+ fromSing SCO = CO+ fromSing SCP = CP+ fromSing SCQ = CQ+ fromSing SCR = CR+ fromSing SCS = CS+ fromSing SCT = CT+ fromSing SCU = CU+ fromSing SCV = CV+ fromSing SCW = CW+ fromSing SCX = CX+ fromSing SCY = CY+ fromSing SCZ = CZ+ toSing CA = SomeSing SCA+ toSing CB = SomeSing SCB+ toSing CC = SomeSing SCC+ toSing CD = SomeSing SCD+ toSing CE = SomeSing SCE+ toSing CF = SomeSing SCF+ toSing CG = SomeSing SCG+ toSing CH = SomeSing SCH+ toSing CI = SomeSing SCI+ toSing CJ = SomeSing SCJ+ toSing CK = SomeSing SCK+ toSing CL = SomeSing SCL+ toSing CM = SomeSing SCM+ toSing CN = SomeSing SCN+ toSing CO = SomeSing SCO+ toSing CP = SomeSing SCP+ toSing CQ = SomeSing SCQ+ toSing CR = SomeSing SCR+ toSing CS = SomeSing SCS+ toSing CT = SomeSing SCT+ toSing CU = SomeSing SCU+ toSing CV = SomeSing SCV+ toSing CW = SomeSing SCW+ toSing CX = SomeSing SCX+ toSing CY = SomeSing SCY+ toSing CZ = SomeSing SCZ+ data SAttribute :: Attribute -> Type+ where+ SAttr :: forall (n :: [AChar]) (n :: U).+ (Sing (n :: [AChar])) -> (Sing (n :: U)) -> SAttribute (Attr n n)+ type instance Sing @Attribute = SAttribute+ instance SingKind Attribute where+ type Demote Attribute = Attribute+ fromSing (SAttr b b) = (Attr (fromSing b)) (fromSing b)+ toSing (Attr (b :: Demote [AChar]) (b :: Demote U))+ = case+ ((,) (toSing b :: SomeSing [AChar])) (toSing b :: SomeSing U)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SAttr c) c) }+ data SSchema :: Schema -> Type+ where+ SSch :: forall (n :: [Attribute]).+ (Sing (n :: [Attribute])) -> SSchema (Sch n)+ type instance Sing @Schema = SSchema+ instance SingKind Schema where+ type Demote Schema = Schema+ fromSing (SSch b) = Sch (fromSing b)+ toSing (Sch (b :: Demote [Attribute]))+ = case toSing b :: SomeSing [Attribute] of {+ SomeSing c -> SomeSing (SSch c) }+ instance (SShow U, SShow Nat) => SShow U where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: U) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) U ((~>) Symbol Symbol))+ -> Type) t1) t2) t3)+ sShowsPrec+ _+ SBOOL+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "BOOL")))+ sA_0123456789876543210+ sShowsPrec+ _+ SSTRING+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "STRING")))+ sA_0123456789876543210+ sShowsPrec+ _+ SNAT+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "NAT")))+ sA_0123456789876543210+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SVEC (sArg_0123456789876543210 :: Sing arg_0123456789876543210)+ (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "VEC "))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @ShowSpaceSym0) sShowSpace)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))))+ sA_0123456789876543210+ instance SShow AChar where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: AChar) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) AChar ((~>) Symbol Symbol))+ -> Type) t1) t2) t3)+ sShowsPrec+ _+ SCA+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CA")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCB+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CB")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCC+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CC")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCD+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CD")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCE+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CE")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCF+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CF")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCG+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CG")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCH+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CH")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCI+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CI")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCJ+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CJ")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCK+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CK")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCL+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CL")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCM+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CM")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCN+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CN")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCO+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CO")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCP+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CP")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCQ+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CQ")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCR+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CR")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCS+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CS")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCT+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CT")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCU+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CU")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCV+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CV")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCW+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CW")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCX+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CX")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCY+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CY")))+ sA_0123456789876543210+ sShowsPrec+ _+ SCZ+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "CZ")))+ sA_0123456789876543210+ instance (SEq U, SEq Nat) => SEq U where+ (%==) SBOOL SBOOL = STrue+ (%==) SBOOL SSTRING = SFalse+ (%==) SBOOL SNAT = SFalse+ (%==) SBOOL (SVEC _ _) = SFalse+ (%==) SSTRING SBOOL = SFalse+ (%==) SSTRING SSTRING = STrue+ (%==) SSTRING SNAT = SFalse+ (%==) SSTRING (SVEC _ _) = SFalse+ (%==) SNAT SBOOL = SFalse+ (%==) SNAT SSTRING = SFalse+ (%==) SNAT SNAT = STrue+ (%==) SNAT (SVEC _ _) = SFalse+ (%==) (SVEC _ _) SBOOL = SFalse+ (%==) (SVEC _ _) SSTRING = SFalse+ (%==) (SVEC _ _) SNAT = SFalse+ (%==) (SVEC a a) (SVEC b b) = ((%&&) (((%==) a) b)) (((%==) a) b)+ instance (SDecide U, SDecide Nat) => SDecide U where+ (%~) SBOOL SBOOL = Proved Refl+ (%~) SBOOL SSTRING = Disproved (\ x -> case x of)+ (%~) SBOOL SNAT = Disproved (\ x -> case x of)+ (%~) SBOOL (SVEC _ _) = Disproved (\ x -> case x of)+ (%~) SSTRING SBOOL = Disproved (\ x -> case x of)+ (%~) SSTRING SSTRING = Proved Refl+ (%~) SSTRING SNAT = Disproved (\ x -> case x of)+ (%~) SSTRING (SVEC _ _) = Disproved (\ x -> case x of)+ (%~) SNAT SBOOL = Disproved (\ x -> case x of)+ (%~) SNAT SSTRING = Disproved (\ x -> case x of)+ (%~) SNAT SNAT = Proved Refl+ (%~) SNAT (SVEC _ _) = Disproved (\ x -> case x of)+ (%~) (SVEC _ _) SBOOL = Disproved (\ x -> case x of)+ (%~) (SVEC _ _) SSTRING = Disproved (\ x -> case x of)+ (%~) (SVEC _ _) SNAT = Disproved (\ x -> case x of)+ (%~) (SVEC a a) (SVEC b b)+ = case ((,) (((%~) a) b)) (((%~) a) b) of+ (,) (Proved Refl) (Proved Refl) -> Proved Refl+ (,) (Disproved contra) _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,) _ (Disproved contra)+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ instance (SDecide U, SDecide Nat) =>+ Data.Type.Equality.TestEquality (SU :: U -> Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance (SDecide U, SDecide Nat) =>+ Data.Type.Coercion.TestCoercion (SU :: U -> Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance SEq AChar where+ (%==) SCA SCA = STrue+ (%==) SCA SCB = SFalse+ (%==) SCA SCC = SFalse+ (%==) SCA SCD = SFalse+ (%==) SCA SCE = SFalse+ (%==) SCA SCF = SFalse+ (%==) SCA SCG = SFalse+ (%==) SCA SCH = SFalse+ (%==) SCA SCI = SFalse+ (%==) SCA SCJ = SFalse+ (%==) SCA SCK = SFalse+ (%==) SCA SCL = SFalse+ (%==) SCA SCM = SFalse+ (%==) SCA SCN = SFalse+ (%==) SCA SCO = SFalse+ (%==) SCA SCP = SFalse+ (%==) SCA SCQ = SFalse+ (%==) SCA SCR = SFalse+ (%==) SCA SCS = SFalse+ (%==) SCA SCT = SFalse+ (%==) SCA SCU = SFalse+ (%==) SCA SCV = SFalse+ (%==) SCA SCW = SFalse+ (%==) SCA SCX = SFalse+ (%==) SCA SCY = SFalse+ (%==) SCA SCZ = SFalse+ (%==) SCB SCA = SFalse+ (%==) SCB SCB = STrue+ (%==) SCB SCC = SFalse+ (%==) SCB SCD = SFalse+ (%==) SCB SCE = SFalse+ (%==) SCB SCF = SFalse+ (%==) SCB SCG = SFalse+ (%==) SCB SCH = SFalse+ (%==) SCB SCI = SFalse+ (%==) SCB SCJ = SFalse+ (%==) SCB SCK = SFalse+ (%==) SCB SCL = SFalse+ (%==) SCB SCM = SFalse+ (%==) SCB SCN = SFalse+ (%==) SCB SCO = SFalse+ (%==) SCB SCP = SFalse+ (%==) SCB SCQ = SFalse+ (%==) SCB SCR = SFalse+ (%==) SCB SCS = SFalse+ (%==) SCB SCT = SFalse+ (%==) SCB SCU = SFalse+ (%==) SCB SCV = SFalse+ (%==) SCB SCW = SFalse+ (%==) SCB SCX = SFalse+ (%==) SCB SCY = SFalse+ (%==) SCB SCZ = SFalse+ (%==) SCC SCA = SFalse+ (%==) SCC SCB = SFalse+ (%==) SCC SCC = STrue+ (%==) SCC SCD = SFalse+ (%==) SCC SCE = SFalse+ (%==) SCC SCF = SFalse+ (%==) SCC SCG = SFalse+ (%==) SCC SCH = SFalse+ (%==) SCC SCI = SFalse+ (%==) SCC SCJ = SFalse+ (%==) SCC SCK = SFalse+ (%==) SCC SCL = SFalse+ (%==) SCC SCM = SFalse+ (%==) SCC SCN = SFalse+ (%==) SCC SCO = SFalse+ (%==) SCC SCP = SFalse+ (%==) SCC SCQ = SFalse+ (%==) SCC SCR = SFalse+ (%==) SCC SCS = SFalse+ (%==) SCC SCT = SFalse+ (%==) SCC SCU = SFalse+ (%==) SCC SCV = SFalse+ (%==) SCC SCW = SFalse+ (%==) SCC SCX = SFalse+ (%==) SCC SCY = SFalse+ (%==) SCC SCZ = SFalse+ (%==) SCD SCA = SFalse+ (%==) SCD SCB = SFalse+ (%==) SCD SCC = SFalse+ (%==) SCD SCD = STrue+ (%==) SCD SCE = SFalse+ (%==) SCD SCF = SFalse+ (%==) SCD SCG = SFalse+ (%==) SCD SCH = SFalse+ (%==) SCD SCI = SFalse+ (%==) SCD SCJ = SFalse+ (%==) SCD SCK = SFalse+ (%==) SCD SCL = SFalse+ (%==) SCD SCM = SFalse+ (%==) SCD SCN = SFalse+ (%==) SCD SCO = SFalse+ (%==) SCD SCP = SFalse+ (%==) SCD SCQ = SFalse+ (%==) SCD SCR = SFalse+ (%==) SCD SCS = SFalse+ (%==) SCD SCT = SFalse+ (%==) SCD SCU = SFalse+ (%==) SCD SCV = SFalse+ (%==) SCD SCW = SFalse+ (%==) SCD SCX = SFalse+ (%==) SCD SCY = SFalse+ (%==) SCD SCZ = SFalse+ (%==) SCE SCA = SFalse+ (%==) SCE SCB = SFalse+ (%==) SCE SCC = SFalse+ (%==) SCE SCD = SFalse+ (%==) SCE SCE = STrue+ (%==) SCE SCF = SFalse+ (%==) SCE SCG = SFalse+ (%==) SCE SCH = SFalse+ (%==) SCE SCI = SFalse+ (%==) SCE SCJ = SFalse+ (%==) SCE SCK = SFalse+ (%==) SCE SCL = SFalse+ (%==) SCE SCM = SFalse+ (%==) SCE SCN = SFalse+ (%==) SCE SCO = SFalse+ (%==) SCE SCP = SFalse+ (%==) SCE SCQ = SFalse+ (%==) SCE SCR = SFalse+ (%==) SCE SCS = SFalse+ (%==) SCE SCT = SFalse+ (%==) SCE SCU = SFalse+ (%==) SCE SCV = SFalse+ (%==) SCE SCW = SFalse+ (%==) SCE SCX = SFalse+ (%==) SCE SCY = SFalse+ (%==) SCE SCZ = SFalse+ (%==) SCF SCA = SFalse+ (%==) SCF SCB = SFalse+ (%==) SCF SCC = SFalse+ (%==) SCF SCD = SFalse+ (%==) SCF SCE = SFalse+ (%==) SCF SCF = STrue+ (%==) SCF SCG = SFalse+ (%==) SCF SCH = SFalse+ (%==) SCF SCI = SFalse+ (%==) SCF SCJ = SFalse+ (%==) SCF SCK = SFalse+ (%==) SCF SCL = SFalse+ (%==) SCF SCM = SFalse+ (%==) SCF SCN = SFalse+ (%==) SCF SCO = SFalse+ (%==) SCF SCP = SFalse+ (%==) SCF SCQ = SFalse+ (%==) SCF SCR = SFalse+ (%==) SCF SCS = SFalse+ (%==) SCF SCT = SFalse+ (%==) SCF SCU = SFalse+ (%==) SCF SCV = SFalse+ (%==) SCF SCW = SFalse+ (%==) SCF SCX = SFalse+ (%==) SCF SCY = SFalse+ (%==) SCF SCZ = SFalse+ (%==) SCG SCA = SFalse+ (%==) SCG SCB = SFalse+ (%==) SCG SCC = SFalse+ (%==) SCG SCD = SFalse+ (%==) SCG SCE = SFalse+ (%==) SCG SCF = SFalse+ (%==) SCG SCG = STrue+ (%==) SCG SCH = SFalse+ (%==) SCG SCI = SFalse+ (%==) SCG SCJ = SFalse+ (%==) SCG SCK = SFalse+ (%==) SCG SCL = SFalse+ (%==) SCG SCM = SFalse+ (%==) SCG SCN = SFalse+ (%==) SCG SCO = SFalse+ (%==) SCG SCP = SFalse+ (%==) SCG SCQ = SFalse+ (%==) SCG SCR = SFalse+ (%==) SCG SCS = SFalse+ (%==) SCG SCT = SFalse+ (%==) SCG SCU = SFalse+ (%==) SCG SCV = SFalse+ (%==) SCG SCW = SFalse+ (%==) SCG SCX = SFalse+ (%==) SCG SCY = SFalse+ (%==) SCG SCZ = SFalse+ (%==) SCH SCA = SFalse+ (%==) SCH SCB = SFalse+ (%==) SCH SCC = SFalse+ (%==) SCH SCD = SFalse+ (%==) SCH SCE = SFalse+ (%==) SCH SCF = SFalse+ (%==) SCH SCG = SFalse+ (%==) SCH SCH = STrue+ (%==) SCH SCI = SFalse+ (%==) SCH SCJ = SFalse+ (%==) SCH SCK = SFalse+ (%==) SCH SCL = SFalse+ (%==) SCH SCM = SFalse+ (%==) SCH SCN = SFalse+ (%==) SCH SCO = SFalse+ (%==) SCH SCP = SFalse+ (%==) SCH SCQ = SFalse+ (%==) SCH SCR = SFalse+ (%==) SCH SCS = SFalse+ (%==) SCH SCT = SFalse+ (%==) SCH SCU = SFalse+ (%==) SCH SCV = SFalse+ (%==) SCH SCW = SFalse+ (%==) SCH SCX = SFalse+ (%==) SCH SCY = SFalse+ (%==) SCH SCZ = SFalse+ (%==) SCI SCA = SFalse+ (%==) SCI SCB = SFalse+ (%==) SCI SCC = SFalse+ (%==) SCI SCD = SFalse+ (%==) SCI SCE = SFalse+ (%==) SCI SCF = SFalse+ (%==) SCI SCG = SFalse+ (%==) SCI SCH = SFalse+ (%==) SCI SCI = STrue+ (%==) SCI SCJ = SFalse+ (%==) SCI SCK = SFalse+ (%==) SCI SCL = SFalse+ (%==) SCI SCM = SFalse+ (%==) SCI SCN = SFalse+ (%==) SCI SCO = SFalse+ (%==) SCI SCP = SFalse+ (%==) SCI SCQ = SFalse+ (%==) SCI SCR = SFalse+ (%==) SCI SCS = SFalse+ (%==) SCI SCT = SFalse+ (%==) SCI SCU = SFalse+ (%==) SCI SCV = SFalse+ (%==) SCI SCW = SFalse+ (%==) SCI SCX = SFalse+ (%==) SCI SCY = SFalse+ (%==) SCI SCZ = SFalse+ (%==) SCJ SCA = SFalse+ (%==) SCJ SCB = SFalse+ (%==) SCJ SCC = SFalse+ (%==) SCJ SCD = SFalse+ (%==) SCJ SCE = SFalse+ (%==) SCJ SCF = SFalse+ (%==) SCJ SCG = SFalse+ (%==) SCJ SCH = SFalse+ (%==) SCJ SCI = SFalse+ (%==) SCJ SCJ = STrue+ (%==) SCJ SCK = SFalse+ (%==) SCJ SCL = SFalse+ (%==) SCJ SCM = SFalse+ (%==) SCJ SCN = SFalse+ (%==) SCJ SCO = SFalse+ (%==) SCJ SCP = SFalse+ (%==) SCJ SCQ = SFalse+ (%==) SCJ SCR = SFalse+ (%==) SCJ SCS = SFalse+ (%==) SCJ SCT = SFalse+ (%==) SCJ SCU = SFalse+ (%==) SCJ SCV = SFalse+ (%==) SCJ SCW = SFalse+ (%==) SCJ SCX = SFalse+ (%==) SCJ SCY = SFalse+ (%==) SCJ SCZ = SFalse+ (%==) SCK SCA = SFalse+ (%==) SCK SCB = SFalse+ (%==) SCK SCC = SFalse+ (%==) SCK SCD = SFalse+ (%==) SCK SCE = SFalse+ (%==) SCK SCF = SFalse+ (%==) SCK SCG = SFalse+ (%==) SCK SCH = SFalse+ (%==) SCK SCI = SFalse+ (%==) SCK SCJ = SFalse+ (%==) SCK SCK = STrue+ (%==) SCK SCL = SFalse+ (%==) SCK SCM = SFalse+ (%==) SCK SCN = SFalse+ (%==) SCK SCO = SFalse+ (%==) SCK SCP = SFalse+ (%==) SCK SCQ = SFalse+ (%==) SCK SCR = SFalse+ (%==) SCK SCS = SFalse+ (%==) SCK SCT = SFalse+ (%==) SCK SCU = SFalse+ (%==) SCK SCV = SFalse+ (%==) SCK SCW = SFalse+ (%==) SCK SCX = SFalse+ (%==) SCK SCY = SFalse+ (%==) SCK SCZ = SFalse+ (%==) SCL SCA = SFalse+ (%==) SCL SCB = SFalse+ (%==) SCL SCC = SFalse+ (%==) SCL SCD = SFalse+ (%==) SCL SCE = SFalse+ (%==) SCL SCF = SFalse+ (%==) SCL SCG = SFalse+ (%==) SCL SCH = SFalse+ (%==) SCL SCI = SFalse+ (%==) SCL SCJ = SFalse+ (%==) SCL SCK = SFalse+ (%==) SCL SCL = STrue+ (%==) SCL SCM = SFalse+ (%==) SCL SCN = SFalse+ (%==) SCL SCO = SFalse+ (%==) SCL SCP = SFalse+ (%==) SCL SCQ = SFalse+ (%==) SCL SCR = SFalse+ (%==) SCL SCS = SFalse+ (%==) SCL SCT = SFalse+ (%==) SCL SCU = SFalse+ (%==) SCL SCV = SFalse+ (%==) SCL SCW = SFalse+ (%==) SCL SCX = SFalse+ (%==) SCL SCY = SFalse+ (%==) SCL SCZ = SFalse+ (%==) SCM SCA = SFalse+ (%==) SCM SCB = SFalse+ (%==) SCM SCC = SFalse+ (%==) SCM SCD = SFalse+ (%==) SCM SCE = SFalse+ (%==) SCM SCF = SFalse+ (%==) SCM SCG = SFalse+ (%==) SCM SCH = SFalse+ (%==) SCM SCI = SFalse+ (%==) SCM SCJ = SFalse+ (%==) SCM SCK = SFalse+ (%==) SCM SCL = SFalse+ (%==) SCM SCM = STrue+ (%==) SCM SCN = SFalse+ (%==) SCM SCO = SFalse+ (%==) SCM SCP = SFalse+ (%==) SCM SCQ = SFalse+ (%==) SCM SCR = SFalse+ (%==) SCM SCS = SFalse+ (%==) SCM SCT = SFalse+ (%==) SCM SCU = SFalse+ (%==) SCM SCV = SFalse+ (%==) SCM SCW = SFalse+ (%==) SCM SCX = SFalse+ (%==) SCM SCY = SFalse+ (%==) SCM SCZ = SFalse+ (%==) SCN SCA = SFalse+ (%==) SCN SCB = SFalse+ (%==) SCN SCC = SFalse+ (%==) SCN SCD = SFalse+ (%==) SCN SCE = SFalse+ (%==) SCN SCF = SFalse+ (%==) SCN SCG = SFalse+ (%==) SCN SCH = SFalse+ (%==) SCN SCI = SFalse+ (%==) SCN SCJ = SFalse+ (%==) SCN SCK = SFalse+ (%==) SCN SCL = SFalse+ (%==) SCN SCM = SFalse+ (%==) SCN SCN = STrue+ (%==) SCN SCO = SFalse+ (%==) SCN SCP = SFalse+ (%==) SCN SCQ = SFalse+ (%==) SCN SCR = SFalse+ (%==) SCN SCS = SFalse+ (%==) SCN SCT = SFalse+ (%==) SCN SCU = SFalse+ (%==) SCN SCV = SFalse+ (%==) SCN SCW = SFalse+ (%==) SCN SCX = SFalse+ (%==) SCN SCY = SFalse+ (%==) SCN SCZ = SFalse+ (%==) SCO SCA = SFalse+ (%==) SCO SCB = SFalse+ (%==) SCO SCC = SFalse+ (%==) SCO SCD = SFalse+ (%==) SCO SCE = SFalse+ (%==) SCO SCF = SFalse+ (%==) SCO SCG = SFalse+ (%==) SCO SCH = SFalse+ (%==) SCO SCI = SFalse+ (%==) SCO SCJ = SFalse+ (%==) SCO SCK = SFalse+ (%==) SCO SCL = SFalse+ (%==) SCO SCM = SFalse+ (%==) SCO SCN = SFalse+ (%==) SCO SCO = STrue+ (%==) SCO SCP = SFalse+ (%==) SCO SCQ = SFalse+ (%==) SCO SCR = SFalse+ (%==) SCO SCS = SFalse+ (%==) SCO SCT = SFalse+ (%==) SCO SCU = SFalse+ (%==) SCO SCV = SFalse+ (%==) SCO SCW = SFalse+ (%==) SCO SCX = SFalse+ (%==) SCO SCY = SFalse+ (%==) SCO SCZ = SFalse+ (%==) SCP SCA = SFalse+ (%==) SCP SCB = SFalse+ (%==) SCP SCC = SFalse+ (%==) SCP SCD = SFalse+ (%==) SCP SCE = SFalse+ (%==) SCP SCF = SFalse+ (%==) SCP SCG = SFalse+ (%==) SCP SCH = SFalse+ (%==) SCP SCI = SFalse+ (%==) SCP SCJ = SFalse+ (%==) SCP SCK = SFalse+ (%==) SCP SCL = SFalse+ (%==) SCP SCM = SFalse+ (%==) SCP SCN = SFalse+ (%==) SCP SCO = SFalse+ (%==) SCP SCP = STrue+ (%==) SCP SCQ = SFalse+ (%==) SCP SCR = SFalse+ (%==) SCP SCS = SFalse+ (%==) SCP SCT = SFalse+ (%==) SCP SCU = SFalse+ (%==) SCP SCV = SFalse+ (%==) SCP SCW = SFalse+ (%==) SCP SCX = SFalse+ (%==) SCP SCY = SFalse+ (%==) SCP SCZ = SFalse+ (%==) SCQ SCA = SFalse+ (%==) SCQ SCB = SFalse+ (%==) SCQ SCC = SFalse+ (%==) SCQ SCD = SFalse+ (%==) SCQ SCE = SFalse+ (%==) SCQ SCF = SFalse+ (%==) SCQ SCG = SFalse+ (%==) SCQ SCH = SFalse+ (%==) SCQ SCI = SFalse+ (%==) SCQ SCJ = SFalse+ (%==) SCQ SCK = SFalse+ (%==) SCQ SCL = SFalse+ (%==) SCQ SCM = SFalse+ (%==) SCQ SCN = SFalse+ (%==) SCQ SCO = SFalse+ (%==) SCQ SCP = SFalse+ (%==) SCQ SCQ = STrue+ (%==) SCQ SCR = SFalse+ (%==) SCQ SCS = SFalse+ (%==) SCQ SCT = SFalse+ (%==) SCQ SCU = SFalse+ (%==) SCQ SCV = SFalse+ (%==) SCQ SCW = SFalse+ (%==) SCQ SCX = SFalse+ (%==) SCQ SCY = SFalse+ (%==) SCQ SCZ = SFalse+ (%==) SCR SCA = SFalse+ (%==) SCR SCB = SFalse+ (%==) SCR SCC = SFalse+ (%==) SCR SCD = SFalse+ (%==) SCR SCE = SFalse+ (%==) SCR SCF = SFalse+ (%==) SCR SCG = SFalse+ (%==) SCR SCH = SFalse+ (%==) SCR SCI = SFalse+ (%==) SCR SCJ = SFalse+ (%==) SCR SCK = SFalse+ (%==) SCR SCL = SFalse+ (%==) SCR SCM = SFalse+ (%==) SCR SCN = SFalse+ (%==) SCR SCO = SFalse+ (%==) SCR SCP = SFalse+ (%==) SCR SCQ = SFalse+ (%==) SCR SCR = STrue+ (%==) SCR SCS = SFalse+ (%==) SCR SCT = SFalse+ (%==) SCR SCU = SFalse+ (%==) SCR SCV = SFalse+ (%==) SCR SCW = SFalse+ (%==) SCR SCX = SFalse+ (%==) SCR SCY = SFalse+ (%==) SCR SCZ = SFalse+ (%==) SCS SCA = SFalse+ (%==) SCS SCB = SFalse+ (%==) SCS SCC = SFalse+ (%==) SCS SCD = SFalse+ (%==) SCS SCE = SFalse+ (%==) SCS SCF = SFalse+ (%==) SCS SCG = SFalse+ (%==) SCS SCH = SFalse+ (%==) SCS SCI = SFalse+ (%==) SCS SCJ = SFalse+ (%==) SCS SCK = SFalse+ (%==) SCS SCL = SFalse+ (%==) SCS SCM = SFalse+ (%==) SCS SCN = SFalse+ (%==) SCS SCO = SFalse+ (%==) SCS SCP = SFalse+ (%==) SCS SCQ = SFalse+ (%==) SCS SCR = SFalse+ (%==) SCS SCS = STrue+ (%==) SCS SCT = SFalse+ (%==) SCS SCU = SFalse+ (%==) SCS SCV = SFalse+ (%==) SCS SCW = SFalse+ (%==) SCS SCX = SFalse+ (%==) SCS SCY = SFalse+ (%==) SCS SCZ = SFalse+ (%==) SCT SCA = SFalse+ (%==) SCT SCB = SFalse+ (%==) SCT SCC = SFalse+ (%==) SCT SCD = SFalse+ (%==) SCT SCE = SFalse+ (%==) SCT SCF = SFalse+ (%==) SCT SCG = SFalse+ (%==) SCT SCH = SFalse+ (%==) SCT SCI = SFalse+ (%==) SCT SCJ = SFalse+ (%==) SCT SCK = SFalse+ (%==) SCT SCL = SFalse+ (%==) SCT SCM = SFalse+ (%==) SCT SCN = SFalse+ (%==) SCT SCO = SFalse+ (%==) SCT SCP = SFalse+ (%==) SCT SCQ = SFalse+ (%==) SCT SCR = SFalse+ (%==) SCT SCS = SFalse+ (%==) SCT SCT = STrue+ (%==) SCT SCU = SFalse+ (%==) SCT SCV = SFalse+ (%==) SCT SCW = SFalse+ (%==) SCT SCX = SFalse+ (%==) SCT SCY = SFalse+ (%==) SCT SCZ = SFalse+ (%==) SCU SCA = SFalse+ (%==) SCU SCB = SFalse+ (%==) SCU SCC = SFalse+ (%==) SCU SCD = SFalse+ (%==) SCU SCE = SFalse+ (%==) SCU SCF = SFalse+ (%==) SCU SCG = SFalse+ (%==) SCU SCH = SFalse+ (%==) SCU SCI = SFalse+ (%==) SCU SCJ = SFalse+ (%==) SCU SCK = SFalse+ (%==) SCU SCL = SFalse+ (%==) SCU SCM = SFalse+ (%==) SCU SCN = SFalse+ (%==) SCU SCO = SFalse+ (%==) SCU SCP = SFalse+ (%==) SCU SCQ = SFalse+ (%==) SCU SCR = SFalse+ (%==) SCU SCS = SFalse+ (%==) SCU SCT = SFalse+ (%==) SCU SCU = STrue+ (%==) SCU SCV = SFalse+ (%==) SCU SCW = SFalse+ (%==) SCU SCX = SFalse+ (%==) SCU SCY = SFalse+ (%==) SCU SCZ = SFalse+ (%==) SCV SCA = SFalse+ (%==) SCV SCB = SFalse+ (%==) SCV SCC = SFalse+ (%==) SCV SCD = SFalse+ (%==) SCV SCE = SFalse+ (%==) SCV SCF = SFalse+ (%==) SCV SCG = SFalse+ (%==) SCV SCH = SFalse+ (%==) SCV SCI = SFalse+ (%==) SCV SCJ = SFalse+ (%==) SCV SCK = SFalse+ (%==) SCV SCL = SFalse+ (%==) SCV SCM = SFalse+ (%==) SCV SCN = SFalse+ (%==) SCV SCO = SFalse+ (%==) SCV SCP = SFalse+ (%==) SCV SCQ = SFalse+ (%==) SCV SCR = SFalse+ (%==) SCV SCS = SFalse+ (%==) SCV SCT = SFalse+ (%==) SCV SCU = SFalse+ (%==) SCV SCV = STrue+ (%==) SCV SCW = SFalse+ (%==) SCV SCX = SFalse+ (%==) SCV SCY = SFalse+ (%==) SCV SCZ = SFalse+ (%==) SCW SCA = SFalse+ (%==) SCW SCB = SFalse+ (%==) SCW SCC = SFalse+ (%==) SCW SCD = SFalse+ (%==) SCW SCE = SFalse+ (%==) SCW SCF = SFalse+ (%==) SCW SCG = SFalse+ (%==) SCW SCH = SFalse+ (%==) SCW SCI = SFalse+ (%==) SCW SCJ = SFalse+ (%==) SCW SCK = SFalse+ (%==) SCW SCL = SFalse+ (%==) SCW SCM = SFalse+ (%==) SCW SCN = SFalse+ (%==) SCW SCO = SFalse+ (%==) SCW SCP = SFalse+ (%==) SCW SCQ = SFalse+ (%==) SCW SCR = SFalse+ (%==) SCW SCS = SFalse+ (%==) SCW SCT = SFalse+ (%==) SCW SCU = SFalse+ (%==) SCW SCV = SFalse+ (%==) SCW SCW = STrue+ (%==) SCW SCX = SFalse+ (%==) SCW SCY = SFalse+ (%==) SCW SCZ = SFalse+ (%==) SCX SCA = SFalse+ (%==) SCX SCB = SFalse+ (%==) SCX SCC = SFalse+ (%==) SCX SCD = SFalse+ (%==) SCX SCE = SFalse+ (%==) SCX SCF = SFalse+ (%==) SCX SCG = SFalse+ (%==) SCX SCH = SFalse+ (%==) SCX SCI = SFalse+ (%==) SCX SCJ = SFalse+ (%==) SCX SCK = SFalse+ (%==) SCX SCL = SFalse+ (%==) SCX SCM = SFalse+ (%==) SCX SCN = SFalse+ (%==) SCX SCO = SFalse+ (%==) SCX SCP = SFalse+ (%==) SCX SCQ = SFalse+ (%==) SCX SCR = SFalse+ (%==) SCX SCS = SFalse+ (%==) SCX SCT = SFalse+ (%==) SCX SCU = SFalse+ (%==) SCX SCV = SFalse+ (%==) SCX SCW = SFalse+ (%==) SCX SCX = STrue+ (%==) SCX SCY = SFalse+ (%==) SCX SCZ = SFalse+ (%==) SCY SCA = SFalse+ (%==) SCY SCB = SFalse+ (%==) SCY SCC = SFalse+ (%==) SCY SCD = SFalse+ (%==) SCY SCE = SFalse+ (%==) SCY SCF = SFalse+ (%==) SCY SCG = SFalse+ (%==) SCY SCH = SFalse+ (%==) SCY SCI = SFalse+ (%==) SCY SCJ = SFalse+ (%==) SCY SCK = SFalse+ (%==) SCY SCL = SFalse+ (%==) SCY SCM = SFalse+ (%==) SCY SCN = SFalse+ (%==) SCY SCO = SFalse+ (%==) SCY SCP = SFalse+ (%==) SCY SCQ = SFalse+ (%==) SCY SCR = SFalse+ (%==) SCY SCS = SFalse+ (%==) SCY SCT = SFalse+ (%==) SCY SCU = SFalse+ (%==) SCY SCV = SFalse+ (%==) SCY SCW = SFalse+ (%==) SCY SCX = SFalse+ (%==) SCY SCY = STrue+ (%==) SCY SCZ = SFalse+ (%==) SCZ SCA = SFalse+ (%==) SCZ SCB = SFalse+ (%==) SCZ SCC = SFalse+ (%==) SCZ SCD = SFalse+ (%==) SCZ SCE = SFalse+ (%==) SCZ SCF = SFalse+ (%==) SCZ SCG = SFalse+ (%==) SCZ SCH = SFalse+ (%==) SCZ SCI = SFalse+ (%==) SCZ SCJ = SFalse+ (%==) SCZ SCK = SFalse+ (%==) SCZ SCL = SFalse+ (%==) SCZ SCM = SFalse+ (%==) SCZ SCN = SFalse+ (%==) SCZ SCO = SFalse+ (%==) SCZ SCP = SFalse+ (%==) SCZ SCQ = SFalse+ (%==) SCZ SCR = SFalse+ (%==) SCZ SCS = SFalse+ (%==) SCZ SCT = SFalse+ (%==) SCZ SCU = SFalse+ (%==) SCZ SCV = SFalse+ (%==) SCZ SCW = SFalse+ (%==) SCZ SCX = SFalse+ (%==) SCZ SCY = SFalse+ (%==) SCZ SCZ = STrue+ instance SDecide AChar where+ (%~) SCA SCA = Proved Refl+ (%~) SCA SCB = Disproved (\ x -> case x of)+ (%~) SCA SCC = Disproved (\ x -> case x of)+ (%~) SCA SCD = Disproved (\ x -> case x of)+ (%~) SCA SCE = Disproved (\ x -> case x of)+ (%~) SCA SCF = Disproved (\ x -> case x of)+ (%~) SCA SCG = Disproved (\ x -> case x of)+ (%~) SCA SCH = Disproved (\ x -> case x of)+ (%~) SCA SCI = Disproved (\ x -> case x of)+ (%~) SCA SCJ = Disproved (\ x -> case x of)+ (%~) SCA SCK = Disproved (\ x -> case x of)+ (%~) SCA SCL = Disproved (\ x -> case x of)+ (%~) SCA SCM = Disproved (\ x -> case x of)+ (%~) SCA SCN = Disproved (\ x -> case x of)+ (%~) SCA SCO = Disproved (\ x -> case x of)+ (%~) SCA SCP = Disproved (\ x -> case x of)+ (%~) SCA SCQ = Disproved (\ x -> case x of)+ (%~) SCA SCR = Disproved (\ x -> case x of)+ (%~) SCA SCS = Disproved (\ x -> case x of)+ (%~) SCA SCT = Disproved (\ x -> case x of)+ (%~) SCA SCU = Disproved (\ x -> case x of)+ (%~) SCA SCV = Disproved (\ x -> case x of)+ (%~) SCA SCW = Disproved (\ x -> case x of)+ (%~) SCA SCX = Disproved (\ x -> case x of)+ (%~) SCA SCY = Disproved (\ x -> case x of)+ (%~) SCA SCZ = Disproved (\ x -> case x of)+ (%~) SCB SCA = Disproved (\ x -> case x of)+ (%~) SCB SCB = Proved Refl+ (%~) SCB SCC = Disproved (\ x -> case x of)+ (%~) SCB SCD = Disproved (\ x -> case x of)+ (%~) SCB SCE = Disproved (\ x -> case x of)+ (%~) SCB SCF = Disproved (\ x -> case x of)+ (%~) SCB SCG = Disproved (\ x -> case x of)+ (%~) SCB SCH = Disproved (\ x -> case x of)+ (%~) SCB SCI = Disproved (\ x -> case x of)+ (%~) SCB SCJ = Disproved (\ x -> case x of)+ (%~) SCB SCK = Disproved (\ x -> case x of)+ (%~) SCB SCL = Disproved (\ x -> case x of)+ (%~) SCB SCM = Disproved (\ x -> case x of)+ (%~) SCB SCN = Disproved (\ x -> case x of)+ (%~) SCB SCO = Disproved (\ x -> case x of)+ (%~) SCB SCP = Disproved (\ x -> case x of)+ (%~) SCB SCQ = Disproved (\ x -> case x of)+ (%~) SCB SCR = Disproved (\ x -> case x of)+ (%~) SCB SCS = Disproved (\ x -> case x of)+ (%~) SCB SCT = Disproved (\ x -> case x of)+ (%~) SCB SCU = Disproved (\ x -> case x of)+ (%~) SCB SCV = Disproved (\ x -> case x of)+ (%~) SCB SCW = Disproved (\ x -> case x of)+ (%~) SCB SCX = Disproved (\ x -> case x of)+ (%~) SCB SCY = Disproved (\ x -> case x of)+ (%~) SCB SCZ = Disproved (\ x -> case x of)+ (%~) SCC SCA = Disproved (\ x -> case x of)+ (%~) SCC SCB = Disproved (\ x -> case x of)+ (%~) SCC SCC = Proved Refl+ (%~) SCC SCD = Disproved (\ x -> case x of)+ (%~) SCC SCE = Disproved (\ x -> case x of)+ (%~) SCC SCF = Disproved (\ x -> case x of)+ (%~) SCC SCG = Disproved (\ x -> case x of)+ (%~) SCC SCH = Disproved (\ x -> case x of)+ (%~) SCC SCI = Disproved (\ x -> case x of)+ (%~) SCC SCJ = Disproved (\ x -> case x of)+ (%~) SCC SCK = Disproved (\ x -> case x of)+ (%~) SCC SCL = Disproved (\ x -> case x of)+ (%~) SCC SCM = Disproved (\ x -> case x of)+ (%~) SCC SCN = Disproved (\ x -> case x of)+ (%~) SCC SCO = Disproved (\ x -> case x of)+ (%~) SCC SCP = Disproved (\ x -> case x of)+ (%~) SCC SCQ = Disproved (\ x -> case x of)+ (%~) SCC SCR = Disproved (\ x -> case x of)+ (%~) SCC SCS = Disproved (\ x -> case x of)+ (%~) SCC SCT = Disproved (\ x -> case x of)+ (%~) SCC SCU = Disproved (\ x -> case x of)+ (%~) SCC SCV = Disproved (\ x -> case x of)+ (%~) SCC SCW = Disproved (\ x -> case x of)+ (%~) SCC SCX = Disproved (\ x -> case x of)+ (%~) SCC SCY = Disproved (\ x -> case x of)+ (%~) SCC SCZ = Disproved (\ x -> case x of)+ (%~) SCD SCA = Disproved (\ x -> case x of)+ (%~) SCD SCB = Disproved (\ x -> case x of)+ (%~) SCD SCC = Disproved (\ x -> case x of)+ (%~) SCD SCD = Proved Refl+ (%~) SCD SCE = Disproved (\ x -> case x of)+ (%~) SCD SCF = Disproved (\ x -> case x of)+ (%~) SCD SCG = Disproved (\ x -> case x of)+ (%~) SCD SCH = Disproved (\ x -> case x of)+ (%~) SCD SCI = Disproved (\ x -> case x of)+ (%~) SCD SCJ = Disproved (\ x -> case x of)+ (%~) SCD SCK = Disproved (\ x -> case x of)+ (%~) SCD SCL = Disproved (\ x -> case x of)+ (%~) SCD SCM = Disproved (\ x -> case x of)+ (%~) SCD SCN = Disproved (\ x -> case x of)+ (%~) SCD SCO = Disproved (\ x -> case x of)+ (%~) SCD SCP = Disproved (\ x -> case x of)+ (%~) SCD SCQ = Disproved (\ x -> case x of)+ (%~) SCD SCR = Disproved (\ x -> case x of)+ (%~) SCD SCS = Disproved (\ x -> case x of)+ (%~) SCD SCT = Disproved (\ x -> case x of)+ (%~) SCD SCU = Disproved (\ x -> case x of)+ (%~) SCD SCV = Disproved (\ x -> case x of)+ (%~) SCD SCW = Disproved (\ x -> case x of)+ (%~) SCD SCX = Disproved (\ x -> case x of)+ (%~) SCD SCY = Disproved (\ x -> case x of)+ (%~) SCD SCZ = Disproved (\ x -> case x of)+ (%~) SCE SCA = Disproved (\ x -> case x of)+ (%~) SCE SCB = Disproved (\ x -> case x of)+ (%~) SCE SCC = Disproved (\ x -> case x of)+ (%~) SCE SCD = Disproved (\ x -> case x of)+ (%~) SCE SCE = Proved Refl+ (%~) SCE SCF = Disproved (\ x -> case x of)+ (%~) SCE SCG = Disproved (\ x -> case x of)+ (%~) SCE SCH = Disproved (\ x -> case x of)+ (%~) SCE SCI = Disproved (\ x -> case x of)+ (%~) SCE SCJ = Disproved (\ x -> case x of)+ (%~) SCE SCK = Disproved (\ x -> case x of)+ (%~) SCE SCL = Disproved (\ x -> case x of)+ (%~) SCE SCM = Disproved (\ x -> case x of)+ (%~) SCE SCN = Disproved (\ x -> case x of)+ (%~) SCE SCO = Disproved (\ x -> case x of)+ (%~) SCE SCP = Disproved (\ x -> case x of)+ (%~) SCE SCQ = Disproved (\ x -> case x of)+ (%~) SCE SCR = Disproved (\ x -> case x of)+ (%~) SCE SCS = Disproved (\ x -> case x of)+ (%~) SCE SCT = Disproved (\ x -> case x of)+ (%~) SCE SCU = Disproved (\ x -> case x of)+ (%~) SCE SCV = Disproved (\ x -> case x of)+ (%~) SCE SCW = Disproved (\ x -> case x of)+ (%~) SCE SCX = Disproved (\ x -> case x of)+ (%~) SCE SCY = Disproved (\ x -> case x of)+ (%~) SCE SCZ = Disproved (\ x -> case x of)+ (%~) SCF SCA = Disproved (\ x -> case x of)+ (%~) SCF SCB = Disproved (\ x -> case x of)+ (%~) SCF SCC = Disproved (\ x -> case x of)+ (%~) SCF SCD = Disproved (\ x -> case x of)+ (%~) SCF SCE = Disproved (\ x -> case x of)+ (%~) SCF SCF = Proved Refl+ (%~) SCF SCG = Disproved (\ x -> case x of)+ (%~) SCF SCH = Disproved (\ x -> case x of)+ (%~) SCF SCI = Disproved (\ x -> case x of)+ (%~) SCF SCJ = Disproved (\ x -> case x of)+ (%~) SCF SCK = Disproved (\ x -> case x of)+ (%~) SCF SCL = Disproved (\ x -> case x of)+ (%~) SCF SCM = Disproved (\ x -> case x of)+ (%~) SCF SCN = Disproved (\ x -> case x of)+ (%~) SCF SCO = Disproved (\ x -> case x of)+ (%~) SCF SCP = Disproved (\ x -> case x of)+ (%~) SCF SCQ = Disproved (\ x -> case x of)+ (%~) SCF SCR = Disproved (\ x -> case x of)+ (%~) SCF SCS = Disproved (\ x -> case x of)+ (%~) SCF SCT = Disproved (\ x -> case x of)+ (%~) SCF SCU = Disproved (\ x -> case x of)+ (%~) SCF SCV = Disproved (\ x -> case x of)+ (%~) SCF SCW = Disproved (\ x -> case x of)+ (%~) SCF SCX = Disproved (\ x -> case x of)+ (%~) SCF SCY = Disproved (\ x -> case x of)+ (%~) SCF SCZ = Disproved (\ x -> case x of)+ (%~) SCG SCA = Disproved (\ x -> case x of)+ (%~) SCG SCB = Disproved (\ x -> case x of)+ (%~) SCG SCC = Disproved (\ x -> case x of)+ (%~) SCG SCD = Disproved (\ x -> case x of)+ (%~) SCG SCE = Disproved (\ x -> case x of)+ (%~) SCG SCF = Disproved (\ x -> case x of)+ (%~) SCG SCG = Proved Refl+ (%~) SCG SCH = Disproved (\ x -> case x of)+ (%~) SCG SCI = Disproved (\ x -> case x of)+ (%~) SCG SCJ = Disproved (\ x -> case x of)+ (%~) SCG SCK = Disproved (\ x -> case x of)+ (%~) SCG SCL = Disproved (\ x -> case x of)+ (%~) SCG SCM = Disproved (\ x -> case x of)+ (%~) SCG SCN = Disproved (\ x -> case x of)+ (%~) SCG SCO = Disproved (\ x -> case x of)+ (%~) SCG SCP = Disproved (\ x -> case x of)+ (%~) SCG SCQ = Disproved (\ x -> case x of)+ (%~) SCG SCR = Disproved (\ x -> case x of)+ (%~) SCG SCS = Disproved (\ x -> case x of)+ (%~) SCG SCT = Disproved (\ x -> case x of)+ (%~) SCG SCU = Disproved (\ x -> case x of)+ (%~) SCG SCV = Disproved (\ x -> case x of)+ (%~) SCG SCW = Disproved (\ x -> case x of)+ (%~) SCG SCX = Disproved (\ x -> case x of)+ (%~) SCG SCY = Disproved (\ x -> case x of)+ (%~) SCG SCZ = Disproved (\ x -> case x of)+ (%~) SCH SCA = Disproved (\ x -> case x of)+ (%~) SCH SCB = Disproved (\ x -> case x of)+ (%~) SCH SCC = Disproved (\ x -> case x of)+ (%~) SCH SCD = Disproved (\ x -> case x of)+ (%~) SCH SCE = Disproved (\ x -> case x of)+ (%~) SCH SCF = Disproved (\ x -> case x of)+ (%~) SCH SCG = Disproved (\ x -> case x of)+ (%~) SCH SCH = Proved Refl+ (%~) SCH SCI = Disproved (\ x -> case x of)+ (%~) SCH SCJ = Disproved (\ x -> case x of)+ (%~) SCH SCK = Disproved (\ x -> case x of)+ (%~) SCH SCL = Disproved (\ x -> case x of)+ (%~) SCH SCM = Disproved (\ x -> case x of)+ (%~) SCH SCN = Disproved (\ x -> case x of)+ (%~) SCH SCO = Disproved (\ x -> case x of)+ (%~) SCH SCP = Disproved (\ x -> case x of)+ (%~) SCH SCQ = Disproved (\ x -> case x of)+ (%~) SCH SCR = Disproved (\ x -> case x of)+ (%~) SCH SCS = Disproved (\ x -> case x of)+ (%~) SCH SCT = Disproved (\ x -> case x of)+ (%~) SCH SCU = Disproved (\ x -> case x of)+ (%~) SCH SCV = Disproved (\ x -> case x of)+ (%~) SCH SCW = Disproved (\ x -> case x of)+ (%~) SCH SCX = Disproved (\ x -> case x of)+ (%~) SCH SCY = Disproved (\ x -> case x of)+ (%~) SCH SCZ = Disproved (\ x -> case x of)+ (%~) SCI SCA = Disproved (\ x -> case x of)+ (%~) SCI SCB = Disproved (\ x -> case x of)+ (%~) SCI SCC = Disproved (\ x -> case x of)+ (%~) SCI SCD = Disproved (\ x -> case x of)+ (%~) SCI SCE = Disproved (\ x -> case x of)+ (%~) SCI SCF = Disproved (\ x -> case x of)+ (%~) SCI SCG = Disproved (\ x -> case x of)+ (%~) SCI SCH = Disproved (\ x -> case x of)+ (%~) SCI SCI = Proved Refl+ (%~) SCI SCJ = Disproved (\ x -> case x of)+ (%~) SCI SCK = Disproved (\ x -> case x of)+ (%~) SCI SCL = Disproved (\ x -> case x of)+ (%~) SCI SCM = Disproved (\ x -> case x of)+ (%~) SCI SCN = Disproved (\ x -> case x of)+ (%~) SCI SCO = Disproved (\ x -> case x of)+ (%~) SCI SCP = Disproved (\ x -> case x of)+ (%~) SCI SCQ = Disproved (\ x -> case x of)+ (%~) SCI SCR = Disproved (\ x -> case x of)+ (%~) SCI SCS = Disproved (\ x -> case x of)+ (%~) SCI SCT = Disproved (\ x -> case x of)+ (%~) SCI SCU = Disproved (\ x -> case x of)+ (%~) SCI SCV = Disproved (\ x -> case x of)+ (%~) SCI SCW = Disproved (\ x -> case x of)+ (%~) SCI SCX = Disproved (\ x -> case x of)+ (%~) SCI SCY = Disproved (\ x -> case x of)+ (%~) SCI SCZ = Disproved (\ x -> case x of)+ (%~) SCJ SCA = Disproved (\ x -> case x of)+ (%~) SCJ SCB = Disproved (\ x -> case x of)+ (%~) SCJ SCC = Disproved (\ x -> case x of)+ (%~) SCJ SCD = Disproved (\ x -> case x of)+ (%~) SCJ SCE = Disproved (\ x -> case x of)+ (%~) SCJ SCF = Disproved (\ x -> case x of)+ (%~) SCJ SCG = Disproved (\ x -> case x of)+ (%~) SCJ SCH = Disproved (\ x -> case x of)+ (%~) SCJ SCI = Disproved (\ x -> case x of)+ (%~) SCJ SCJ = Proved Refl+ (%~) SCJ SCK = Disproved (\ x -> case x of)+ (%~) SCJ SCL = Disproved (\ x -> case x of)+ (%~) SCJ SCM = Disproved (\ x -> case x of)+ (%~) SCJ SCN = Disproved (\ x -> case x of)+ (%~) SCJ SCO = Disproved (\ x -> case x of)+ (%~) SCJ SCP = Disproved (\ x -> case x of)+ (%~) SCJ SCQ = Disproved (\ x -> case x of)+ (%~) SCJ SCR = Disproved (\ x -> case x of)+ (%~) SCJ SCS = Disproved (\ x -> case x of)+ (%~) SCJ SCT = Disproved (\ x -> case x of)+ (%~) SCJ SCU = Disproved (\ x -> case x of)+ (%~) SCJ SCV = Disproved (\ x -> case x of)+ (%~) SCJ SCW = Disproved (\ x -> case x of)+ (%~) SCJ SCX = Disproved (\ x -> case x of)+ (%~) SCJ SCY = Disproved (\ x -> case x of)+ (%~) SCJ SCZ = Disproved (\ x -> case x of)+ (%~) SCK SCA = Disproved (\ x -> case x of)+ (%~) SCK SCB = Disproved (\ x -> case x of)+ (%~) SCK SCC = Disproved (\ x -> case x of)+ (%~) SCK SCD = Disproved (\ x -> case x of)+ (%~) SCK SCE = Disproved (\ x -> case x of)+ (%~) SCK SCF = Disproved (\ x -> case x of)+ (%~) SCK SCG = Disproved (\ x -> case x of)+ (%~) SCK SCH = Disproved (\ x -> case x of)+ (%~) SCK SCI = Disproved (\ x -> case x of)+ (%~) SCK SCJ = Disproved (\ x -> case x of)+ (%~) SCK SCK = Proved Refl+ (%~) SCK SCL = Disproved (\ x -> case x of)+ (%~) SCK SCM = Disproved (\ x -> case x of)+ (%~) SCK SCN = Disproved (\ x -> case x of)+ (%~) SCK SCO = Disproved (\ x -> case x of)+ (%~) SCK SCP = Disproved (\ x -> case x of)+ (%~) SCK SCQ = Disproved (\ x -> case x of)+ (%~) SCK SCR = Disproved (\ x -> case x of)+ (%~) SCK SCS = Disproved (\ x -> case x of)+ (%~) SCK SCT = Disproved (\ x -> case x of)+ (%~) SCK SCU = Disproved (\ x -> case x of)+ (%~) SCK SCV = Disproved (\ x -> case x of)+ (%~) SCK SCW = Disproved (\ x -> case x of)+ (%~) SCK SCX = Disproved (\ x -> case x of)+ (%~) SCK SCY = Disproved (\ x -> case x of)+ (%~) SCK SCZ = Disproved (\ x -> case x of)+ (%~) SCL SCA = Disproved (\ x -> case x of)+ (%~) SCL SCB = Disproved (\ x -> case x of)+ (%~) SCL SCC = Disproved (\ x -> case x of)+ (%~) SCL SCD = Disproved (\ x -> case x of)+ (%~) SCL SCE = Disproved (\ x -> case x of)+ (%~) SCL SCF = Disproved (\ x -> case x of)+ (%~) SCL SCG = Disproved (\ x -> case x of)+ (%~) SCL SCH = Disproved (\ x -> case x of)+ (%~) SCL SCI = Disproved (\ x -> case x of)+ (%~) SCL SCJ = Disproved (\ x -> case x of)+ (%~) SCL SCK = Disproved (\ x -> case x of)+ (%~) SCL SCL = Proved Refl+ (%~) SCL SCM = Disproved (\ x -> case x of)+ (%~) SCL SCN = Disproved (\ x -> case x of)+ (%~) SCL SCO = Disproved (\ x -> case x of)+ (%~) SCL SCP = Disproved (\ x -> case x of)+ (%~) SCL SCQ = Disproved (\ x -> case x of)+ (%~) SCL SCR = Disproved (\ x -> case x of)+ (%~) SCL SCS = Disproved (\ x -> case x of)+ (%~) SCL SCT = Disproved (\ x -> case x of)+ (%~) SCL SCU = Disproved (\ x -> case x of)+ (%~) SCL SCV = Disproved (\ x -> case x of)+ (%~) SCL SCW = Disproved (\ x -> case x of)+ (%~) SCL SCX = Disproved (\ x -> case x of)+ (%~) SCL SCY = Disproved (\ x -> case x of)+ (%~) SCL SCZ = Disproved (\ x -> case x of)+ (%~) SCM SCA = Disproved (\ x -> case x of)+ (%~) SCM SCB = Disproved (\ x -> case x of)+ (%~) SCM SCC = Disproved (\ x -> case x of)+ (%~) SCM SCD = Disproved (\ x -> case x of)+ (%~) SCM SCE = Disproved (\ x -> case x of)+ (%~) SCM SCF = Disproved (\ x -> case x of)+ (%~) SCM SCG = Disproved (\ x -> case x of)+ (%~) SCM SCH = Disproved (\ x -> case x of)+ (%~) SCM SCI = Disproved (\ x -> case x of)+ (%~) SCM SCJ = Disproved (\ x -> case x of)+ (%~) SCM SCK = Disproved (\ x -> case x of)+ (%~) SCM SCL = Disproved (\ x -> case x of)+ (%~) SCM SCM = Proved Refl+ (%~) SCM SCN = Disproved (\ x -> case x of)+ (%~) SCM SCO = Disproved (\ x -> case x of)+ (%~) SCM SCP = Disproved (\ x -> case x of)+ (%~) SCM SCQ = Disproved (\ x -> case x of)+ (%~) SCM SCR = Disproved (\ x -> case x of)+ (%~) SCM SCS = Disproved (\ x -> case x of)+ (%~) SCM SCT = Disproved (\ x -> case x of)+ (%~) SCM SCU = Disproved (\ x -> case x of)+ (%~) SCM SCV = Disproved (\ x -> case x of)+ (%~) SCM SCW = Disproved (\ x -> case x of)+ (%~) SCM SCX = Disproved (\ x -> case x of)+ (%~) SCM SCY = Disproved (\ x -> case x of)+ (%~) SCM SCZ = Disproved (\ x -> case x of)+ (%~) SCN SCA = Disproved (\ x -> case x of)+ (%~) SCN SCB = Disproved (\ x -> case x of)+ (%~) SCN SCC = Disproved (\ x -> case x of)+ (%~) SCN SCD = Disproved (\ x -> case x of)+ (%~) SCN SCE = Disproved (\ x -> case x of)+ (%~) SCN SCF = Disproved (\ x -> case x of)+ (%~) SCN SCG = Disproved (\ x -> case x of)+ (%~) SCN SCH = Disproved (\ x -> case x of)+ (%~) SCN SCI = Disproved (\ x -> case x of)+ (%~) SCN SCJ = Disproved (\ x -> case x of)+ (%~) SCN SCK = Disproved (\ x -> case x of)+ (%~) SCN SCL = Disproved (\ x -> case x of)+ (%~) SCN SCM = Disproved (\ x -> case x of)+ (%~) SCN SCN = Proved Refl+ (%~) SCN SCO = Disproved (\ x -> case x of)+ (%~) SCN SCP = Disproved (\ x -> case x of)+ (%~) SCN SCQ = Disproved (\ x -> case x of)+ (%~) SCN SCR = Disproved (\ x -> case x of)+ (%~) SCN SCS = Disproved (\ x -> case x of)+ (%~) SCN SCT = Disproved (\ x -> case x of)+ (%~) SCN SCU = Disproved (\ x -> case x of)+ (%~) SCN SCV = Disproved (\ x -> case x of)+ (%~) SCN SCW = Disproved (\ x -> case x of)+ (%~) SCN SCX = Disproved (\ x -> case x of)+ (%~) SCN SCY = Disproved (\ x -> case x of)+ (%~) SCN SCZ = Disproved (\ x -> case x of)+ (%~) SCO SCA = Disproved (\ x -> case x of)+ (%~) SCO SCB = Disproved (\ x -> case x of)+ (%~) SCO SCC = Disproved (\ x -> case x of)+ (%~) SCO SCD = Disproved (\ x -> case x of)+ (%~) SCO SCE = Disproved (\ x -> case x of)+ (%~) SCO SCF = Disproved (\ x -> case x of)+ (%~) SCO SCG = Disproved (\ x -> case x of)+ (%~) SCO SCH = Disproved (\ x -> case x of)+ (%~) SCO SCI = Disproved (\ x -> case x of)+ (%~) SCO SCJ = Disproved (\ x -> case x of)+ (%~) SCO SCK = Disproved (\ x -> case x of)+ (%~) SCO SCL = Disproved (\ x -> case x of)+ (%~) SCO SCM = Disproved (\ x -> case x of)+ (%~) SCO SCN = Disproved (\ x -> case x of)+ (%~) SCO SCO = Proved Refl+ (%~) SCO SCP = Disproved (\ x -> case x of)+ (%~) SCO SCQ = Disproved (\ x -> case x of)+ (%~) SCO SCR = Disproved (\ x -> case x of)+ (%~) SCO SCS = Disproved (\ x -> case x of)+ (%~) SCO SCT = Disproved (\ x -> case x of)+ (%~) SCO SCU = Disproved (\ x -> case x of)+ (%~) SCO SCV = Disproved (\ x -> case x of)+ (%~) SCO SCW = Disproved (\ x -> case x of)+ (%~) SCO SCX = Disproved (\ x -> case x of)+ (%~) SCO SCY = Disproved (\ x -> case x of)+ (%~) SCO SCZ = Disproved (\ x -> case x of)+ (%~) SCP SCA = Disproved (\ x -> case x of)+ (%~) SCP SCB = Disproved (\ x -> case x of)+ (%~) SCP SCC = Disproved (\ x -> case x of)+ (%~) SCP SCD = Disproved (\ x -> case x of)+ (%~) SCP SCE = Disproved (\ x -> case x of)+ (%~) SCP SCF = Disproved (\ x -> case x of)+ (%~) SCP SCG = Disproved (\ x -> case x of)+ (%~) SCP SCH = Disproved (\ x -> case x of)+ (%~) SCP SCI = Disproved (\ x -> case x of)+ (%~) SCP SCJ = Disproved (\ x -> case x of)+ (%~) SCP SCK = Disproved (\ x -> case x of)+ (%~) SCP SCL = Disproved (\ x -> case x of)+ (%~) SCP SCM = Disproved (\ x -> case x of)+ (%~) SCP SCN = Disproved (\ x -> case x of)+ (%~) SCP SCO = Disproved (\ x -> case x of)+ (%~) SCP SCP = Proved Refl+ (%~) SCP SCQ = Disproved (\ x -> case x of)+ (%~) SCP SCR = Disproved (\ x -> case x of)+ (%~) SCP SCS = Disproved (\ x -> case x of)+ (%~) SCP SCT = Disproved (\ x -> case x of)+ (%~) SCP SCU = Disproved (\ x -> case x of)+ (%~) SCP SCV = Disproved (\ x -> case x of)+ (%~) SCP SCW = Disproved (\ x -> case x of)+ (%~) SCP SCX = Disproved (\ x -> case x of)+ (%~) SCP SCY = Disproved (\ x -> case x of)+ (%~) SCP SCZ = Disproved (\ x -> case x of)+ (%~) SCQ SCA = Disproved (\ x -> case x of)+ (%~) SCQ SCB = Disproved (\ x -> case x of)+ (%~) SCQ SCC = Disproved (\ x -> case x of)+ (%~) SCQ SCD = Disproved (\ x -> case x of)+ (%~) SCQ SCE = Disproved (\ x -> case x of)+ (%~) SCQ SCF = Disproved (\ x -> case x of)+ (%~) SCQ SCG = Disproved (\ x -> case x of)+ (%~) SCQ SCH = Disproved (\ x -> case x of)+ (%~) SCQ SCI = Disproved (\ x -> case x of)+ (%~) SCQ SCJ = Disproved (\ x -> case x of)+ (%~) SCQ SCK = Disproved (\ x -> case x of)+ (%~) SCQ SCL = Disproved (\ x -> case x of)+ (%~) SCQ SCM = Disproved (\ x -> case x of)+ (%~) SCQ SCN = Disproved (\ x -> case x of)+ (%~) SCQ SCO = Disproved (\ x -> case x of)+ (%~) SCQ SCP = Disproved (\ x -> case x of)+ (%~) SCQ SCQ = Proved Refl+ (%~) SCQ SCR = Disproved (\ x -> case x of)+ (%~) SCQ SCS = Disproved (\ x -> case x of)+ (%~) SCQ SCT = Disproved (\ x -> case x of)+ (%~) SCQ SCU = Disproved (\ x -> case x of)+ (%~) SCQ SCV = Disproved (\ x -> case x of)+ (%~) SCQ SCW = Disproved (\ x -> case x of)+ (%~) SCQ SCX = Disproved (\ x -> case x of)+ (%~) SCQ SCY = Disproved (\ x -> case x of)+ (%~) SCQ SCZ = Disproved (\ x -> case x of)+ (%~) SCR SCA = Disproved (\ x -> case x of)+ (%~) SCR SCB = Disproved (\ x -> case x of)+ (%~) SCR SCC = Disproved (\ x -> case x of)+ (%~) SCR SCD = Disproved (\ x -> case x of)+ (%~) SCR SCE = Disproved (\ x -> case x of)+ (%~) SCR SCF = Disproved (\ x -> case x of)+ (%~) SCR SCG = Disproved (\ x -> case x of)+ (%~) SCR SCH = Disproved (\ x -> case x of)+ (%~) SCR SCI = Disproved (\ x -> case x of)+ (%~) SCR SCJ = Disproved (\ x -> case x of)+ (%~) SCR SCK = Disproved (\ x -> case x of)+ (%~) SCR SCL = Disproved (\ x -> case x of)+ (%~) SCR SCM = Disproved (\ x -> case x of)+ (%~) SCR SCN = Disproved (\ x -> case x of)+ (%~) SCR SCO = Disproved (\ x -> case x of)+ (%~) SCR SCP = Disproved (\ x -> case x of)+ (%~) SCR SCQ = Disproved (\ x -> case x of)+ (%~) SCR SCR = Proved Refl+ (%~) SCR SCS = Disproved (\ x -> case x of)+ (%~) SCR SCT = Disproved (\ x -> case x of)+ (%~) SCR SCU = Disproved (\ x -> case x of)+ (%~) SCR SCV = Disproved (\ x -> case x of)+ (%~) SCR SCW = Disproved (\ x -> case x of)+ (%~) SCR SCX = Disproved (\ x -> case x of)+ (%~) SCR SCY = Disproved (\ x -> case x of)+ (%~) SCR SCZ = Disproved (\ x -> case x of)+ (%~) SCS SCA = Disproved (\ x -> case x of)+ (%~) SCS SCB = Disproved (\ x -> case x of)+ (%~) SCS SCC = Disproved (\ x -> case x of)+ (%~) SCS SCD = Disproved (\ x -> case x of)+ (%~) SCS SCE = Disproved (\ x -> case x of)+ (%~) SCS SCF = Disproved (\ x -> case x of)+ (%~) SCS SCG = Disproved (\ x -> case x of)+ (%~) SCS SCH = Disproved (\ x -> case x of)+ (%~) SCS SCI = Disproved (\ x -> case x of)+ (%~) SCS SCJ = Disproved (\ x -> case x of)+ (%~) SCS SCK = Disproved (\ x -> case x of)+ (%~) SCS SCL = Disproved (\ x -> case x of)+ (%~) SCS SCM = Disproved (\ x -> case x of)+ (%~) SCS SCN = Disproved (\ x -> case x of)+ (%~) SCS SCO = Disproved (\ x -> case x of)+ (%~) SCS SCP = Disproved (\ x -> case x of)+ (%~) SCS SCQ = Disproved (\ x -> case x of)+ (%~) SCS SCR = Disproved (\ x -> case x of)+ (%~) SCS SCS = Proved Refl+ (%~) SCS SCT = Disproved (\ x -> case x of)+ (%~) SCS SCU = Disproved (\ x -> case x of)+ (%~) SCS SCV = Disproved (\ x -> case x of)+ (%~) SCS SCW = Disproved (\ x -> case x of)+ (%~) SCS SCX = Disproved (\ x -> case x of)+ (%~) SCS SCY = Disproved (\ x -> case x of)+ (%~) SCS SCZ = Disproved (\ x -> case x of)+ (%~) SCT SCA = Disproved (\ x -> case x of)+ (%~) SCT SCB = Disproved (\ x -> case x of)+ (%~) SCT SCC = Disproved (\ x -> case x of)+ (%~) SCT SCD = Disproved (\ x -> case x of)+ (%~) SCT SCE = Disproved (\ x -> case x of)+ (%~) SCT SCF = Disproved (\ x -> case x of)+ (%~) SCT SCG = Disproved (\ x -> case x of)+ (%~) SCT SCH = Disproved (\ x -> case x of)+ (%~) SCT SCI = Disproved (\ x -> case x of)+ (%~) SCT SCJ = Disproved (\ x -> case x of)+ (%~) SCT SCK = Disproved (\ x -> case x of)+ (%~) SCT SCL = Disproved (\ x -> case x of)+ (%~) SCT SCM = Disproved (\ x -> case x of)+ (%~) SCT SCN = Disproved (\ x -> case x of)+ (%~) SCT SCO = Disproved (\ x -> case x of)+ (%~) SCT SCP = Disproved (\ x -> case x of)+ (%~) SCT SCQ = Disproved (\ x -> case x of)+ (%~) SCT SCR = Disproved (\ x -> case x of)+ (%~) SCT SCS = Disproved (\ x -> case x of)+ (%~) SCT SCT = Proved Refl+ (%~) SCT SCU = Disproved (\ x -> case x of)+ (%~) SCT SCV = Disproved (\ x -> case x of)+ (%~) SCT SCW = Disproved (\ x -> case x of)+ (%~) SCT SCX = Disproved (\ x -> case x of)+ (%~) SCT SCY = Disproved (\ x -> case x of)+ (%~) SCT SCZ = Disproved (\ x -> case x of)+ (%~) SCU SCA = Disproved (\ x -> case x of)+ (%~) SCU SCB = Disproved (\ x -> case x of)+ (%~) SCU SCC = Disproved (\ x -> case x of)+ (%~) SCU SCD = Disproved (\ x -> case x of)+ (%~) SCU SCE = Disproved (\ x -> case x of)+ (%~) SCU SCF = Disproved (\ x -> case x of)+ (%~) SCU SCG = Disproved (\ x -> case x of)+ (%~) SCU SCH = Disproved (\ x -> case x of)+ (%~) SCU SCI = Disproved (\ x -> case x of)+ (%~) SCU SCJ = Disproved (\ x -> case x of)+ (%~) SCU SCK = Disproved (\ x -> case x of)+ (%~) SCU SCL = Disproved (\ x -> case x of)+ (%~) SCU SCM = Disproved (\ x -> case x of)+ (%~) SCU SCN = Disproved (\ x -> case x of)+ (%~) SCU SCO = Disproved (\ x -> case x of)+ (%~) SCU SCP = Disproved (\ x -> case x of)+ (%~) SCU SCQ = Disproved (\ x -> case x of)+ (%~) SCU SCR = Disproved (\ x -> case x of)+ (%~) SCU SCS = Disproved (\ x -> case x of)+ (%~) SCU SCT = Disproved (\ x -> case x of)+ (%~) SCU SCU = Proved Refl+ (%~) SCU SCV = Disproved (\ x -> case x of)+ (%~) SCU SCW = Disproved (\ x -> case x of)+ (%~) SCU SCX = Disproved (\ x -> case x of)+ (%~) SCU SCY = Disproved (\ x -> case x of)+ (%~) SCU SCZ = Disproved (\ x -> case x of)+ (%~) SCV SCA = Disproved (\ x -> case x of)+ (%~) SCV SCB = Disproved (\ x -> case x of)+ (%~) SCV SCC = Disproved (\ x -> case x of)+ (%~) SCV SCD = Disproved (\ x -> case x of)+ (%~) SCV SCE = Disproved (\ x -> case x of)+ (%~) SCV SCF = Disproved (\ x -> case x of)+ (%~) SCV SCG = Disproved (\ x -> case x of)+ (%~) SCV SCH = Disproved (\ x -> case x of)+ (%~) SCV SCI = Disproved (\ x -> case x of)+ (%~) SCV SCJ = Disproved (\ x -> case x of)+ (%~) SCV SCK = Disproved (\ x -> case x of)+ (%~) SCV SCL = Disproved (\ x -> case x of)+ (%~) SCV SCM = Disproved (\ x -> case x of)+ (%~) SCV SCN = Disproved (\ x -> case x of)+ (%~) SCV SCO = Disproved (\ x -> case x of)+ (%~) SCV SCP = Disproved (\ x -> case x of)+ (%~) SCV SCQ = Disproved (\ x -> case x of)+ (%~) SCV SCR = Disproved (\ x -> case x of)+ (%~) SCV SCS = Disproved (\ x -> case x of)+ (%~) SCV SCT = Disproved (\ x -> case x of)+ (%~) SCV SCU = Disproved (\ x -> case x of)+ (%~) SCV SCV = Proved Refl+ (%~) SCV SCW = Disproved (\ x -> case x of)+ (%~) SCV SCX = Disproved (\ x -> case x of)+ (%~) SCV SCY = Disproved (\ x -> case x of)+ (%~) SCV SCZ = Disproved (\ x -> case x of)+ (%~) SCW SCA = Disproved (\ x -> case x of)+ (%~) SCW SCB = Disproved (\ x -> case x of)+ (%~) SCW SCC = Disproved (\ x -> case x of)+ (%~) SCW SCD = Disproved (\ x -> case x of)+ (%~) SCW SCE = Disproved (\ x -> case x of)+ (%~) SCW SCF = Disproved (\ x -> case x of)+ (%~) SCW SCG = Disproved (\ x -> case x of)+ (%~) SCW SCH = Disproved (\ x -> case x of)+ (%~) SCW SCI = Disproved (\ x -> case x of)+ (%~) SCW SCJ = Disproved (\ x -> case x of)+ (%~) SCW SCK = Disproved (\ x -> case x of)+ (%~) SCW SCL = Disproved (\ x -> case x of)+ (%~) SCW SCM = Disproved (\ x -> case x of)+ (%~) SCW SCN = Disproved (\ x -> case x of)+ (%~) SCW SCO = Disproved (\ x -> case x of)+ (%~) SCW SCP = Disproved (\ x -> case x of)+ (%~) SCW SCQ = Disproved (\ x -> case x of)+ (%~) SCW SCR = Disproved (\ x -> case x of)+ (%~) SCW SCS = Disproved (\ x -> case x of)+ (%~) SCW SCT = Disproved (\ x -> case x of)+ (%~) SCW SCU = Disproved (\ x -> case x of)+ (%~) SCW SCV = Disproved (\ x -> case x of)+ (%~) SCW SCW = Proved Refl+ (%~) SCW SCX = Disproved (\ x -> case x of)+ (%~) SCW SCY = Disproved (\ x -> case x of)+ (%~) SCW SCZ = Disproved (\ x -> case x of)+ (%~) SCX SCA = Disproved (\ x -> case x of)+ (%~) SCX SCB = Disproved (\ x -> case x of)+ (%~) SCX SCC = Disproved (\ x -> case x of)+ (%~) SCX SCD = Disproved (\ x -> case x of)+ (%~) SCX SCE = Disproved (\ x -> case x of)+ (%~) SCX SCF = Disproved (\ x -> case x of)+ (%~) SCX SCG = Disproved (\ x -> case x of)+ (%~) SCX SCH = Disproved (\ x -> case x of)+ (%~) SCX SCI = Disproved (\ x -> case x of)+ (%~) SCX SCJ = Disproved (\ x -> case x of)+ (%~) SCX SCK = Disproved (\ x -> case x of)+ (%~) SCX SCL = Disproved (\ x -> case x of)+ (%~) SCX SCM = Disproved (\ x -> case x of)+ (%~) SCX SCN = Disproved (\ x -> case x of)+ (%~) SCX SCO = Disproved (\ x -> case x of)+ (%~) SCX SCP = Disproved (\ x -> case x of)+ (%~) SCX SCQ = Disproved (\ x -> case x of)+ (%~) SCX SCR = Disproved (\ x -> case x of)+ (%~) SCX SCS = Disproved (\ x -> case x of)+ (%~) SCX SCT = Disproved (\ x -> case x of)+ (%~) SCX SCU = Disproved (\ x -> case x of)+ (%~) SCX SCV = Disproved (\ x -> case x of)+ (%~) SCX SCW = Disproved (\ x -> case x of)+ (%~) SCX SCX = Proved Refl+ (%~) SCX SCY = Disproved (\ x -> case x of)+ (%~) SCX SCZ = Disproved (\ x -> case x of)+ (%~) SCY SCA = Disproved (\ x -> case x of)+ (%~) SCY SCB = Disproved (\ x -> case x of)+ (%~) SCY SCC = Disproved (\ x -> case x of)+ (%~) SCY SCD = Disproved (\ x -> case x of)+ (%~) SCY SCE = Disproved (\ x -> case x of)+ (%~) SCY SCF = Disproved (\ x -> case x of)+ (%~) SCY SCG = Disproved (\ x -> case x of)+ (%~) SCY SCH = Disproved (\ x -> case x of)+ (%~) SCY SCI = Disproved (\ x -> case x of)+ (%~) SCY SCJ = Disproved (\ x -> case x of)+ (%~) SCY SCK = Disproved (\ x -> case x of)+ (%~) SCY SCL = Disproved (\ x -> case x of)+ (%~) SCY SCM = Disproved (\ x -> case x of)+ (%~) SCY SCN = Disproved (\ x -> case x of)+ (%~) SCY SCO = Disproved (\ x -> case x of)+ (%~) SCY SCP = Disproved (\ x -> case x of)+ (%~) SCY SCQ = Disproved (\ x -> case x of)+ (%~) SCY SCR = Disproved (\ x -> case x of)+ (%~) SCY SCS = Disproved (\ x -> case x of)+ (%~) SCY SCT = Disproved (\ x -> case x of)+ (%~) SCY SCU = Disproved (\ x -> case x of)+ (%~) SCY SCV = Disproved (\ x -> case x of)+ (%~) SCY SCW = Disproved (\ x -> case x of)+ (%~) SCY SCX = Disproved (\ x -> case x of)+ (%~) SCY SCY = Proved Refl+ (%~) SCY SCZ = Disproved (\ x -> case x of)+ (%~) SCZ SCA = Disproved (\ x -> case x of)+ (%~) SCZ SCB = Disproved (\ x -> case x of)+ (%~) SCZ SCC = Disproved (\ x -> case x of)+ (%~) SCZ SCD = Disproved (\ x -> case x of)+ (%~) SCZ SCE = Disproved (\ x -> case x of)+ (%~) SCZ SCF = Disproved (\ x -> case x of)+ (%~) SCZ SCG = Disproved (\ x -> case x of)+ (%~) SCZ SCH = Disproved (\ x -> case x of)+ (%~) SCZ SCI = Disproved (\ x -> case x of)+ (%~) SCZ SCJ = Disproved (\ x -> case x of)+ (%~) SCZ SCK = Disproved (\ x -> case x of)+ (%~) SCZ SCL = Disproved (\ x -> case x of)+ (%~) SCZ SCM = Disproved (\ x -> case x of)+ (%~) SCZ SCN = Disproved (\ x -> case x of)+ (%~) SCZ SCO = Disproved (\ x -> case x of)+ (%~) SCZ SCP = Disproved (\ x -> case x of)+ (%~) SCZ SCQ = Disproved (\ x -> case x of)+ (%~) SCZ SCR = Disproved (\ x -> case x of)+ (%~) SCZ SCS = Disproved (\ x -> case x of)+ (%~) SCZ SCT = Disproved (\ x -> case x of)+ (%~) SCZ SCU = Disproved (\ x -> case x of)+ (%~) SCZ SCV = Disproved (\ x -> case x of)+ (%~) SCZ SCW = Disproved (\ x -> case x of)+ (%~) SCZ SCX = Disproved (\ x -> case x of)+ (%~) SCZ SCY = Disproved (\ x -> case x of)+ (%~) SCZ SCZ = Proved Refl+ instance Data.Type.Equality.TestEquality (SAChar :: AChar+ -> Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance Data.Type.Coercion.TestCoercion (SAChar :: AChar+ -> Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance (Data.Singletons.ShowSing.ShowSing U,+ Data.Singletons.ShowSing.ShowSing Nat) =>+ Show (SU (z :: U)) where+ showsPrec _ SBOOL = showString "SBOOL"+ showsPrec _ SSTRING = showString "SSTRING"+ showsPrec _ SNAT = showString "SNAT"+ showsPrec+ p_0123456789876543210+ (SVEC (arg_0123456789876543210 :: Sing argTy_0123456789876543210)+ (arg_0123456789876543210 :: Sing argTy_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 10))+ (((.) (showString "SVEC "))+ (((.) ((showsPrec 11) arg_0123456789876543210))+ (((.) GHC.Show.showSpace)+ ((showsPrec 11) arg_0123456789876543210)))) ::+ (Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210,+ Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210) =>+ ShowS+ instance Show (SAChar (z :: AChar)) where+ showsPrec _ SCA = showString "SCA"+ showsPrec _ SCB = showString "SCB"+ showsPrec _ SCC = showString "SCC"+ showsPrec _ SCD = showString "SCD"+ showsPrec _ SCE = showString "SCE"+ showsPrec _ SCF = showString "SCF"+ showsPrec _ SCG = showString "SCG"+ showsPrec _ SCH = showString "SCH"+ showsPrec _ SCI = showString "SCI"+ showsPrec _ SCJ = showString "SCJ"+ showsPrec _ SCK = showString "SCK"+ showsPrec _ SCL = showString "SCL"+ showsPrec _ SCM = showString "SCM"+ showsPrec _ SCN = showString "SCN"+ showsPrec _ SCO = showString "SCO"+ showsPrec _ SCP = showString "SCP"+ showsPrec _ SCQ = showString "SCQ"+ showsPrec _ SCR = showString "SCR"+ showsPrec _ SCS = showString "SCS"+ showsPrec _ SCT = showString "SCT"+ showsPrec _ SCU = showString "SCU"+ showsPrec _ SCV = showString "SCV"+ showsPrec _ SCW = showString "SCW"+ showsPrec _ SCX = showString "SCX"+ showsPrec _ SCY = showString "SCY"+ showsPrec _ SCZ = showString "SCZ"+ instance SingI BOOL where+ sing = SBOOL+ instance SingI STRING where+ sing = SSTRING+ instance SingI NAT where+ sing = SNAT+ instance (SingI n, SingI n) =>+ SingI (VEC (n :: U) (n :: Nat)) where+ sing = (SVEC sing) sing+ instance SingI (VECSym0 :: (~>) U ((~>) Nat U)) where+ sing = (singFun2 @VECSym0) SVEC+ instance SingI d => SingI (VECSym1 (d :: U) :: (~>) Nat U) where+ sing = (singFun1 @(VECSym1 (d :: U))) (SVEC (sing @d))+ instance SingI CA where+ sing = SCA+ instance SingI CB where+ sing = SCB+ instance SingI CC where+ sing = SCC+ instance SingI CD where+ sing = SCD+ instance SingI CE where+ sing = SCE+ instance SingI CF where+ sing = SCF+ instance SingI CG where+ sing = SCG+ instance SingI CH where+ sing = SCH+ instance SingI CI where+ sing = SCI+ instance SingI CJ where+ sing = SCJ+ instance SingI CK where+ sing = SCK+ instance SingI CL where+ sing = SCL+ instance SingI CM where+ sing = SCM+ instance SingI CN where+ sing = SCN+ instance SingI CO where+ sing = SCO+ instance SingI CP where+ sing = SCP+ instance SingI CQ where+ sing = SCQ+ instance SingI CR where+ sing = SCR+ instance SingI CS where+ sing = SCS+ instance SingI CT where+ sing = SCT+ instance SingI CU where+ sing = SCU+ instance SingI CV where+ sing = SCV+ instance SingI CW where+ sing = SCW+ instance SingI CX where+ sing = SCX+ instance SingI CY where+ sing = SCY+ instance SingI CZ where+ sing = SCZ+ instance (SingI n, SingI n) =>+ SingI (Attr (n :: [AChar]) (n :: U)) where+ sing = (SAttr sing) sing+ instance SingI (AttrSym0 :: (~>) [AChar] ((~>) U Attribute)) where+ sing = (singFun2 @AttrSym0) SAttr+ instance SingI d =>+ SingI (AttrSym1 (d :: [AChar]) :: (~>) U Attribute) where+ sing = (singFun1 @(AttrSym1 (d :: [AChar]))) (SAttr (sing @d))+ instance SingI n => SingI (Sch (n :: [Attribute])) where+ sing = SSch sing+ instance SingI (SchSym0 :: (~>) [Attribute] Schema) where+ sing = (singFun1 @SchSym0) SSch+GradingClient/Database.hs:0:0:: Splicing declarations+ return [] ======>+GradingClient/Database.hs:(0,0)-(0,0): Splicing expression+ cases ''Row [| r |] [| changeId (n ++ (getId r)) r |]+ ======>+ case r of+ EmptyRow _ -> (changeId (((++) n) (getId r))) r+ ConsRow _ _ -> (changeId (((++) n) (getId r))) r
− tests/compile-and-dump/GradingClient/Main.ghc86.template
@@ -1,123 +0,0 @@-GradingClient/Main.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| lastName, firstName, yearName, gradeName, majorName :: [AChar]- lastName = [CL, CA, CS, CT]- firstName = [CF, CI, CR, CS, CT]- yearName = [CY, CE, CA, CR]- gradeName = [CG, CR, CA, CD, CE]- majorName = [CM, CA, CJ, CO, CR]- gradingSchema :: Schema- gradingSchema- = Sch- [Attr lastName STRING, Attr firstName STRING, Attr yearName NAT,- Attr gradeName NAT, Attr majorName BOOL]- names :: Schema- names = Sch [Attr firstName STRING, Attr lastName STRING] |]- ======>- lastName :: [AChar]- firstName :: [AChar]- yearName :: [AChar]- gradeName :: [AChar]- majorName :: [AChar]- lastName = [CL, CA, CS, CT]- firstName = [CF, CI, CR, CS, CT]- yearName = [CY, CE, CA, CR]- gradeName = [CG, CR, CA, CD, CE]- majorName = [CM, CA, CJ, CO, CR]- gradingSchema :: Schema- gradingSchema- = Sch- [(Attr lastName) STRING, (Attr firstName) STRING,- (Attr yearName) NAT, (Attr gradeName) NAT, (Attr majorName) BOOL]- names :: Schema- names = Sch [(Attr firstName) STRING, (Attr lastName) STRING]- type MajorNameSym0 = MajorName- type GradeNameSym0 = GradeName- type YearNameSym0 = YearName- type FirstNameSym0 = FirstName- type LastNameSym0 = LastName- type GradingSchemaSym0 = GradingSchema- type NamesSym0 = Names- type family MajorName :: [AChar] where- MajorName = Apply (Apply (:@#@$) CMSym0) (Apply (Apply (:@#@$) CASym0) (Apply (Apply (:@#@$) CJSym0) (Apply (Apply (:@#@$) COSym0) (Apply (Apply (:@#@$) CRSym0) '[]))))- type family GradeName :: [AChar] where- GradeName = Apply (Apply (:@#@$) CGSym0) (Apply (Apply (:@#@$) CRSym0) (Apply (Apply (:@#@$) CASym0) (Apply (Apply (:@#@$) CDSym0) (Apply (Apply (:@#@$) CESym0) '[]))))- type family YearName :: [AChar] where- YearName = Apply (Apply (:@#@$) CYSym0) (Apply (Apply (:@#@$) CESym0) (Apply (Apply (:@#@$) CASym0) (Apply (Apply (:@#@$) CRSym0) '[])))- type family FirstName :: [AChar] where- FirstName = Apply (Apply (:@#@$) CFSym0) (Apply (Apply (:@#@$) CISym0) (Apply (Apply (:@#@$) CRSym0) (Apply (Apply (:@#@$) CSSym0) (Apply (Apply (:@#@$) CTSym0) '[]))))- type family LastName :: [AChar] where- LastName = Apply (Apply (:@#@$) CLSym0) (Apply (Apply (:@#@$) CASym0) (Apply (Apply (:@#@$) CSSym0) (Apply (Apply (:@#@$) CTSym0) '[])))- type family GradingSchema :: Schema where- GradingSchema = Apply SchSym0 (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 LastNameSym0) STRINGSym0)) (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 FirstNameSym0) STRINGSym0)) (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 YearNameSym0) NATSym0)) (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 GradeNameSym0) NATSym0)) (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 MajorNameSym0) BOOLSym0)) '[])))))- type family Names :: Schema where- Names = Apply SchSym0 (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 FirstNameSym0) STRINGSym0)) (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 LastNameSym0) STRINGSym0)) '[]))- sMajorName :: Sing (MajorNameSym0 :: [AChar])- sGradeName :: Sing (GradeNameSym0 :: [AChar])- sYearName :: Sing (YearNameSym0 :: [AChar])- sFirstName :: Sing (FirstNameSym0 :: [AChar])- sLastName :: Sing (LastNameSym0 :: [AChar])- sGradingSchema :: Sing (GradingSchemaSym0 :: Schema)- sNames :: Sing (NamesSym0 :: Schema)- sMajorName- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCM))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCA))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCJ))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCO))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCR)) SNil))))- sGradeName- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCG))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCR))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCA))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCD))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCE)) SNil))))- sYearName- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCY))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCE))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCA))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCR)) SNil)))- sFirstName- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCF))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCI))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCR))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCS))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCT)) SNil))))- sLastName- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCL))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCA))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCS))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCT)) SNil)))- sGradingSchema- = (applySing ((singFun1 @SchSym0) SSch))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sLastName))- SSTRING)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sFirstName))- SSTRING)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sYearName))- SNAT)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sGradeName))- SNAT)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sMajorName))- SBOOL)))- SNil)))))- sNames- = (applySing ((singFun1 @SchSym0) SSch))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sFirstName))- SSTRING)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sLastName))- SSTRING)))- SNil))
+ tests/compile-and-dump/GradingClient/Main.ghc88.template view
@@ -0,0 +1,123 @@+GradingClient/Main.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| lastName, firstName, yearName, gradeName, majorName :: [AChar]+ lastName = [CL, CA, CS, CT]+ firstName = [CF, CI, CR, CS, CT]+ yearName = [CY, CE, CA, CR]+ gradeName = [CG, CR, CA, CD, CE]+ majorName = [CM, CA, CJ, CO, CR]+ gradingSchema :: Schema+ gradingSchema+ = Sch+ [Attr lastName STRING, Attr firstName STRING, Attr yearName NAT,+ Attr gradeName NAT, Attr majorName BOOL]+ names :: Schema+ names = Sch [Attr firstName STRING, Attr lastName STRING] |]+ ======>+ lastName :: [AChar]+ firstName :: [AChar]+ yearName :: [AChar]+ gradeName :: [AChar]+ majorName :: [AChar]+ lastName = [CL, CA, CS, CT]+ firstName = [CF, CI, CR, CS, CT]+ yearName = [CY, CE, CA, CR]+ gradeName = [CG, CR, CA, CD, CE]+ majorName = [CM, CA, CJ, CO, CR]+ gradingSchema :: Schema+ gradingSchema+ = Sch+ [(Attr lastName) STRING, (Attr firstName) STRING,+ (Attr yearName) NAT, (Attr gradeName) NAT, (Attr majorName) BOOL]+ names :: Schema+ names = Sch [(Attr firstName) STRING, (Attr lastName) STRING]+ type NamesSym0 = Names+ type GradingSchemaSym0 = GradingSchema+ type MajorNameSym0 = MajorName+ type GradeNameSym0 = GradeName+ type YearNameSym0 = YearName+ type FirstNameSym0 = FirstName+ type LastNameSym0 = LastName+ type family Names :: Schema where+ Names = Apply SchSym0 (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 FirstNameSym0) STRINGSym0)) (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 LastNameSym0) STRINGSym0)) '[]))+ type family GradingSchema :: Schema where+ GradingSchema = Apply SchSym0 (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 LastNameSym0) STRINGSym0)) (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 FirstNameSym0) STRINGSym0)) (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 YearNameSym0) NATSym0)) (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 GradeNameSym0) NATSym0)) (Apply (Apply (:@#@$) (Apply (Apply AttrSym0 MajorNameSym0) BOOLSym0)) '[])))))+ type family MajorName :: [AChar] where+ MajorName = Apply (Apply (:@#@$) CMSym0) (Apply (Apply (:@#@$) CASym0) (Apply (Apply (:@#@$) CJSym0) (Apply (Apply (:@#@$) COSym0) (Apply (Apply (:@#@$) CRSym0) '[]))))+ type family GradeName :: [AChar] where+ GradeName = Apply (Apply (:@#@$) CGSym0) (Apply (Apply (:@#@$) CRSym0) (Apply (Apply (:@#@$) CASym0) (Apply (Apply (:@#@$) CDSym0) (Apply (Apply (:@#@$) CESym0) '[]))))+ type family YearName :: [AChar] where+ YearName = Apply (Apply (:@#@$) CYSym0) (Apply (Apply (:@#@$) CESym0) (Apply (Apply (:@#@$) CASym0) (Apply (Apply (:@#@$) CRSym0) '[])))+ type family FirstName :: [AChar] where+ FirstName = Apply (Apply (:@#@$) CFSym0) (Apply (Apply (:@#@$) CISym0) (Apply (Apply (:@#@$) CRSym0) (Apply (Apply (:@#@$) CSSym0) (Apply (Apply (:@#@$) CTSym0) '[]))))+ type family LastName :: [AChar] where+ LastName = Apply (Apply (:@#@$) CLSym0) (Apply (Apply (:@#@$) CASym0) (Apply (Apply (:@#@$) CSSym0) (Apply (Apply (:@#@$) CTSym0) '[])))+ sNames :: Sing (NamesSym0 :: Schema)+ sGradingSchema :: Sing (GradingSchemaSym0 :: Schema)+ sMajorName :: Sing (MajorNameSym0 :: [AChar])+ sGradeName :: Sing (GradeNameSym0 :: [AChar])+ sYearName :: Sing (YearNameSym0 :: [AChar])+ sFirstName :: Sing (FirstNameSym0 :: [AChar])+ sLastName :: Sing (LastNameSym0 :: [AChar])+ sNames+ = (applySing ((singFun1 @SchSym0) SSch))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sFirstName))+ SSTRING)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sLastName))+ SSTRING)))+ SNil))+ sGradingSchema+ = (applySing ((singFun1 @SchSym0) SSch))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sLastName))+ SSTRING)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sFirstName))+ SSTRING)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sYearName))+ SNAT)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sGradeName))+ SNAT)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((applySing ((singFun2 @AttrSym0) SAttr)) sMajorName))+ SBOOL)))+ SNil)))))+ sMajorName+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCM))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCA))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCJ))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCO))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCR)) SNil))))+ sGradeName+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCG))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCR))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCA))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCD))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCE)) SNil))))+ sYearName+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCY))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCE))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCA))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCR)) SNil)))+ sFirstName+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCF))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCI))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCR))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCS))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCT)) SNil))))+ sLastName+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCL))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCA))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCS))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SCT)) SNil)))
− tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc86.template
@@ -1,212 +0,0 @@-InsertionSort/InsertionSortImp.hs:(0,0)-(0,0): Splicing declarations- singletons [d| data Nat = Zero | Succ Nat |]- ======>- data Nat = Zero | Succ Nat- type ZeroSym0 = Zero- type SuccSym1 (t0123456789876543210 :: Nat) =- Succ t0123456789876543210- instance SuppressUnusedWarnings SuccSym0 where- suppressUnusedWarnings = snd (((,) SuccSym0KindInference) ())- data SuccSym0 :: (~>) Nat Nat- where- SuccSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>- SuccSym0 t0123456789876543210- type instance Apply SuccSym0 t0123456789876543210 = Succ t0123456789876543210- data instance Sing :: Nat -> Type- where- SZero :: Sing Zero- SSucc :: forall (n :: Nat). (Sing (n :: Nat)) -> Sing (Succ n)- type SNat = (Sing :: Nat -> Type)- instance SingKind Nat where- type Demote Nat = Nat- fromSing SZero = Zero- fromSing (SSucc b) = Succ (fromSing b)- toSing Zero = SomeSing SZero- toSing (Succ (b :: Demote Nat))- = case toSing b :: SomeSing Nat of {- SomeSing c -> SomeSing (SSucc c) }- instance SingI Zero where- sing = SZero- instance SingI n => SingI (Succ (n :: Nat)) where- sing = SSucc sing- instance SingI (SuccSym0 :: (~>) Nat Nat) where- sing = (singFun1 @SuccSym0) SSucc- instance SingI (TyCon1 Succ :: (~>) Nat Nat) where- sing = (singFun1 @(TyCon1 Succ)) SSucc-InsertionSort/InsertionSortImp.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| leq :: Nat -> Nat -> Bool- leq Zero _ = True- leq (Succ _) Zero = False- leq (Succ a) (Succ b) = leq a b- insert :: Nat -> [Nat] -> [Nat]- insert n [] = [n]- insert n (h : t)- = if leq n h then (n : h : t) else h : (insert n t)- insertionSort :: [Nat] -> [Nat]- insertionSort [] = []- insertionSort (h : t) = insert h (insertionSort t) |]- ======>- leq :: Nat -> Nat -> Bool- leq Zero _ = True- leq (Succ _) Zero = False- leq (Succ a) (Succ b) = (leq a) b- insert :: Nat -> [Nat] -> [Nat]- insert n [] = [n]- insert n (h : t)- = if (leq n) h then (n : (h : t)) else (h : (insert n) t)- insertionSort :: [Nat] -> [Nat]- insertionSort [] = []- insertionSort (h : t) = (insert h) (insertionSort t)- type Let0123456789876543210Scrutinee_0123456789876543210Sym3 n0123456789876543210 h0123456789876543210 t0123456789876543210 =- Let0123456789876543210Scrutinee_0123456789876543210 n0123456789876543210 h0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym2 h0123456789876543210 n0123456789876543210) where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym2 n0123456789876543210 h0123456789876543210 t0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference :: forall n0123456789876543210- h0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 n0123456789876543210 h0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym3 n0123456789876543210 h0123456789876543210 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym2 n0123456789876543210 h0123456789876543210 t0123456789876543210- type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 h0123456789876543210 n0123456789876543210) t0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 h0123456789876543210 n0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210) where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210 h0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference :: forall n0123456789876543210- h0123456789876543210- arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym2 n0123456789876543210 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210 h0123456789876543210- type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210) h0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym2 n0123456789876543210 h0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym0 n0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall n0123456789876543210- arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym0 n0123456789876543210- type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 n0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210- type family Let0123456789876543210Scrutinee_0123456789876543210 n h t where- Let0123456789876543210Scrutinee_0123456789876543210 n h t = Apply (Apply LeqSym0 n) h- type family Case_0123456789876543210 n h t t where- Case_0123456789876543210 n h t 'True = Apply (Apply (:@#@$) n) (Apply (Apply (:@#@$) h) t)- Case_0123456789876543210 n h t 'False = Apply (Apply (:@#@$) h) (Apply (Apply InsertSym0 n) t)- type LeqSym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- Leq a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (LeqSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) LeqSym1KindInference) ())- data LeqSym1 (a0123456789876543210 :: Nat) :: (~>) Nat Bool- where- LeqSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (LeqSym1 a0123456789876543210) arg) (LeqSym2 a0123456789876543210 arg) =>- LeqSym1 a0123456789876543210 a0123456789876543210- type instance Apply (LeqSym1 a0123456789876543210) a0123456789876543210 = Leq a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings LeqSym0 where- suppressUnusedWarnings = snd (((,) LeqSym0KindInference) ())- data LeqSym0 :: (~>) Nat ((~>) Nat Bool)- where- LeqSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply LeqSym0 arg) (LeqSym1 arg) =>- LeqSym0 a0123456789876543210- type instance Apply LeqSym0 a0123456789876543210 = LeqSym1 a0123456789876543210- type InsertSym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: [Nat]) =- Insert a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (InsertSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) InsertSym1KindInference) ())- data InsertSym1 (a0123456789876543210 :: Nat) :: (~>) [Nat] [Nat]- where- InsertSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (InsertSym1 a0123456789876543210) arg) (InsertSym2 a0123456789876543210 arg) =>- InsertSym1 a0123456789876543210 a0123456789876543210- type instance Apply (InsertSym1 a0123456789876543210) a0123456789876543210 = Insert a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings InsertSym0 where- suppressUnusedWarnings = snd (((,) InsertSym0KindInference) ())- data InsertSym0 :: (~>) Nat ((~>) [Nat] [Nat])- where- InsertSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply InsertSym0 arg) (InsertSym1 arg) =>- InsertSym0 a0123456789876543210- type instance Apply InsertSym0 a0123456789876543210 = InsertSym1 a0123456789876543210- type InsertionSortSym1 (a0123456789876543210 :: [Nat]) =- InsertionSort a0123456789876543210- instance SuppressUnusedWarnings InsertionSortSym0 where- suppressUnusedWarnings- = snd (((,) InsertionSortSym0KindInference) ())- data InsertionSortSym0 :: (~>) [Nat] [Nat]- where- InsertionSortSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply InsertionSortSym0 arg) (InsertionSortSym1 arg) =>- InsertionSortSym0 a0123456789876543210- type instance Apply InsertionSortSym0 a0123456789876543210 = InsertionSort a0123456789876543210- type family Leq (a :: Nat) (a :: Nat) :: Bool where- Leq 'Zero _ = TrueSym0- Leq ( 'Succ _) 'Zero = FalseSym0- Leq ( 'Succ a) ( 'Succ b) = Apply (Apply LeqSym0 a) b- type family Insert (a :: Nat) (a :: [Nat]) :: [Nat] where- Insert n '[] = Apply (Apply (:@#@$) n) '[]- Insert n ( '(:) h t) = Case_0123456789876543210 n h t (Let0123456789876543210Scrutinee_0123456789876543210Sym3 n h t)- type family InsertionSort (a :: [Nat]) :: [Nat] where- InsertionSort '[] = '[]- InsertionSort ( '(:) h t) = Apply (Apply InsertSym0 h) (Apply InsertionSortSym0 t)- sLeq ::- forall (t :: Nat) (t :: Nat).- Sing t -> Sing t -> Sing (Apply (Apply LeqSym0 t) t :: Bool)- sInsert ::- forall (t :: Nat) (t :: [Nat]).- Sing t -> Sing t -> Sing (Apply (Apply InsertSym0 t) t :: [Nat])- sInsertionSort ::- forall (t :: [Nat]).- Sing t -> Sing (Apply InsertionSortSym0 t :: [Nat])- sLeq SZero _ = STrue- sLeq (SSucc _) SZero = SFalse- sLeq (SSucc (sA :: Sing a)) (SSucc (sB :: Sing b))- = (applySing ((applySing ((singFun2 @LeqSym0) sLeq)) sA)) sB- sInsert (sN :: Sing n) SNil- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) sN)) SNil- sInsert (sN :: Sing n) (SCons (sH :: Sing h) (sT :: Sing t))- = let- sScrutinee_0123456789876543210 ::- Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym3 n h t)- sScrutinee_0123456789876543210- = (applySing ((applySing ((singFun2 @LeqSym0) sLeq)) sN)) sH- in (case sScrutinee_0123456789876543210 of- STrue- -> (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) sN))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) sH)) sT)- SFalse- -> (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) sH))- ((applySing ((applySing ((singFun2 @InsertSym0) sInsert)) sN))- sT)) ::- Sing (Case_0123456789876543210 n h t (Let0123456789876543210Scrutinee_0123456789876543210Sym3 n h t) :: [Nat])- sInsertionSort SNil = SNil- sInsertionSort (SCons (sH :: Sing h) (sT :: Sing t))- = (applySing ((applySing ((singFun2 @InsertSym0) sInsert)) sH))- ((applySing ((singFun1 @InsertionSortSym0) sInsertionSort)) sT)- instance SingI (LeqSym0 :: (~>) Nat ((~>) Nat Bool)) where- sing = (singFun2 @LeqSym0) sLeq- instance SingI d =>- SingI (LeqSym1 (d :: Nat) :: (~>) Nat Bool) where- sing = (singFun1 @(LeqSym1 (d :: Nat))) (sLeq (sing @d))- instance SingI (InsertSym0 :: (~>) Nat ((~>) [Nat] [Nat])) where- sing = (singFun2 @InsertSym0) sInsert- instance SingI d =>- SingI (InsertSym1 (d :: Nat) :: (~>) [Nat] [Nat]) where- sing = (singFun1 @(InsertSym1 (d :: Nat))) (sInsert (sing @d))- instance SingI (InsertionSortSym0 :: (~>) [Nat] [Nat]) where- sing = (singFun1 @InsertionSortSym0) sInsertionSort
+ tests/compile-and-dump/InsertionSort/InsertionSortImp.ghc88.template view
@@ -0,0 +1,211 @@+InsertionSort/InsertionSortImp.hs:(0,0)-(0,0): Splicing declarations+ singletons [d| data Nat = Zero | Succ Nat |]+ ======>+ data Nat = Zero | Succ Nat+ type ZeroSym0 = Zero+ type SuccSym1 (t0123456789876543210 :: Nat) =+ Succ t0123456789876543210+ instance SuppressUnusedWarnings SuccSym0 where+ suppressUnusedWarnings = snd (((,) SuccSym0KindInference) ())+ data SuccSym0 :: (~>) Nat Nat+ where+ SuccSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>+ SuccSym0 t0123456789876543210+ type instance Apply SuccSym0 t0123456789876543210 = Succ t0123456789876543210+ data SNat :: Nat -> Type+ where+ SZero :: SNat Zero+ SSucc :: forall (n :: Nat). (Sing (n :: Nat)) -> SNat (Succ n)+ type instance Sing @Nat = SNat+ instance SingKind Nat where+ type Demote Nat = Nat+ fromSing SZero = Zero+ fromSing (SSucc b) = Succ (fromSing b)+ toSing Zero = SomeSing SZero+ toSing (Succ (b :: Demote Nat))+ = case toSing b :: SomeSing Nat of {+ SomeSing c -> SomeSing (SSucc c) }+ instance SingI Zero where+ sing = SZero+ instance SingI n => SingI (Succ (n :: Nat)) where+ sing = SSucc sing+ instance SingI (SuccSym0 :: (~>) Nat Nat) where+ sing = (singFun1 @SuccSym0) SSucc+InsertionSort/InsertionSortImp.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| leq :: Nat -> Nat -> Bool+ leq Zero _ = True+ leq (Succ _) Zero = False+ leq (Succ a) (Succ b) = leq a b+ insert :: Nat -> [Nat] -> [Nat]+ insert n [] = [n]+ insert n (h : t)+ = if leq n h then (n : h : t) else h : (insert n t)+ insertionSort :: [Nat] -> [Nat]+ insertionSort [] = []+ insertionSort (h : t) = insert h (insertionSort t) |]+ ======>+ leq :: Nat -> Nat -> Bool+ leq Zero _ = True+ leq (Succ _) Zero = False+ leq (Succ a) (Succ b) = (leq a) b+ insert :: Nat -> [Nat] -> [Nat]+ insert n [] = [n]+ insert n (h : t)+ = if (leq n) h then (n : (h : t)) else (h : (insert n) t)+ insertionSort :: [Nat] -> [Nat]+ insertionSort [] = []+ insertionSort (h : t) = (insert h) (insertionSort t)+ type Let0123456789876543210Scrutinee_0123456789876543210Sym3 n0123456789876543210 h0123456789876543210 t0123456789876543210 =+ Let0123456789876543210Scrutinee_0123456789876543210 n0123456789876543210 h0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym2 h0123456789876543210 n0123456789876543210) where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym2 n0123456789876543210 h0123456789876543210 t0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym2KindInference :: forall n0123456789876543210+ h0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 n0123456789876543210 h0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym3 n0123456789876543210 h0123456789876543210 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym2 n0123456789876543210 h0123456789876543210 t0123456789876543210+ type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym2 h0123456789876543210 n0123456789876543210) t0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 h0123456789876543210 n0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210) where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210 h0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference :: forall n0123456789876543210+ h0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym2 n0123456789876543210 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210 h0123456789876543210+ type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210) h0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym2 n0123456789876543210 h0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym0 n0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall n0123456789876543210+ arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym0 n0123456789876543210+ type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 n0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym1 n0123456789876543210+ type family Let0123456789876543210Scrutinee_0123456789876543210 n h t where+ Let0123456789876543210Scrutinee_0123456789876543210 n h t = Apply (Apply LeqSym0 n) h+ type family Case_0123456789876543210 n h t t where+ Case_0123456789876543210 n h t 'True = Apply (Apply (:@#@$) n) (Apply (Apply (:@#@$) h) t)+ Case_0123456789876543210 n h t 'False = Apply (Apply (:@#@$) h) (Apply (Apply InsertSym0 n) t)+ type InsertionSortSym1 (a0123456789876543210 :: [Nat]) =+ InsertionSort a0123456789876543210+ instance SuppressUnusedWarnings InsertionSortSym0 where+ suppressUnusedWarnings+ = snd (((,) InsertionSortSym0KindInference) ())+ data InsertionSortSym0 :: (~>) [Nat] [Nat]+ where+ InsertionSortSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply InsertionSortSym0 arg) (InsertionSortSym1 arg) =>+ InsertionSortSym0 a0123456789876543210+ type instance Apply InsertionSortSym0 a0123456789876543210 = InsertionSort a0123456789876543210+ type InsertSym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: [Nat]) =+ Insert a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (InsertSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) InsertSym1KindInference) ())+ data InsertSym1 (a0123456789876543210 :: Nat) :: (~>) [Nat] [Nat]+ where+ InsertSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (InsertSym1 a0123456789876543210) arg) (InsertSym2 a0123456789876543210 arg) =>+ InsertSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (InsertSym1 a0123456789876543210) a0123456789876543210 = Insert a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings InsertSym0 where+ suppressUnusedWarnings = snd (((,) InsertSym0KindInference) ())+ data InsertSym0 :: (~>) Nat ((~>) [Nat] [Nat])+ where+ InsertSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply InsertSym0 arg) (InsertSym1 arg) =>+ InsertSym0 a0123456789876543210+ type instance Apply InsertSym0 a0123456789876543210 = InsertSym1 a0123456789876543210+ type LeqSym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ Leq a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (LeqSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) LeqSym1KindInference) ())+ data LeqSym1 (a0123456789876543210 :: Nat) :: (~>) Nat Bool+ where+ LeqSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (LeqSym1 a0123456789876543210) arg) (LeqSym2 a0123456789876543210 arg) =>+ LeqSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (LeqSym1 a0123456789876543210) a0123456789876543210 = Leq a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings LeqSym0 where+ suppressUnusedWarnings = snd (((,) LeqSym0KindInference) ())+ data LeqSym0 :: (~>) Nat ((~>) Nat Bool)+ where+ LeqSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply LeqSym0 arg) (LeqSym1 arg) =>+ LeqSym0 a0123456789876543210+ type instance Apply LeqSym0 a0123456789876543210 = LeqSym1 a0123456789876543210+ type family InsertionSort (a :: [Nat]) :: [Nat] where+ InsertionSort '[] = '[]+ InsertionSort ('(:) h t) = Apply (Apply InsertSym0 h) (Apply InsertionSortSym0 t)+ type family Insert (a :: Nat) (a :: [Nat]) :: [Nat] where+ Insert n '[] = Apply (Apply (:@#@$) n) '[]+ Insert n ('(:) h t) = Case_0123456789876543210 n h t (Let0123456789876543210Scrutinee_0123456789876543210Sym3 n h t)+ type family Leq (a :: Nat) (a :: Nat) :: Bool where+ Leq 'Zero _ = TrueSym0+ Leq ('Succ _) 'Zero = FalseSym0+ Leq ('Succ a) ('Succ b) = Apply (Apply LeqSym0 a) b+ sInsertionSort ::+ forall (t :: [Nat]).+ Sing t -> Sing (Apply InsertionSortSym0 t :: [Nat])+ sInsert ::+ forall (t :: Nat) (t :: [Nat]).+ Sing t -> Sing t -> Sing (Apply (Apply InsertSym0 t) t :: [Nat])+ sLeq ::+ forall (t :: Nat) (t :: Nat).+ Sing t -> Sing t -> Sing (Apply (Apply LeqSym0 t) t :: Bool)+ sInsertionSort SNil = SNil+ sInsertionSort (SCons (sH :: Sing h) (sT :: Sing t))+ = (applySing ((applySing ((singFun2 @InsertSym0) sInsert)) sH))+ ((applySing ((singFun1 @InsertionSortSym0) sInsertionSort)) sT)+ sInsert (sN :: Sing n) SNil+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) sN)) SNil+ sInsert (sN :: Sing n) (SCons (sH :: Sing h) (sT :: Sing t))+ = let+ sScrutinee_0123456789876543210 ::+ Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym3 n h t)+ sScrutinee_0123456789876543210+ = (applySing ((applySing ((singFun2 @LeqSym0) sLeq)) sN)) sH+ in+ (id+ @(Sing (Case_0123456789876543210 n h t (Let0123456789876543210Scrutinee_0123456789876543210Sym3 n h t) :: [Nat])))+ (case sScrutinee_0123456789876543210 of+ STrue+ -> (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) sN))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) sH)) sT)+ SFalse+ -> (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) sH))+ ((applySing ((applySing ((singFun2 @InsertSym0) sInsert)) sN)) sT))+ sLeq SZero _ = STrue+ sLeq (SSucc _) SZero = SFalse+ sLeq (SSucc (sA :: Sing a)) (SSucc (sB :: Sing b))+ = (applySing ((applySing ((singFun2 @LeqSym0) sLeq)) sA)) sB+ instance SingI (InsertionSortSym0 :: (~>) [Nat] [Nat]) where+ sing = (singFun1 @InsertionSortSym0) sInsertionSort+ instance SingI (InsertSym0 :: (~>) Nat ((~>) [Nat] [Nat])) where+ sing = (singFun2 @InsertSym0) sInsert+ instance SingI d =>+ SingI (InsertSym1 (d :: Nat) :: (~>) [Nat] [Nat]) where+ sing = (singFun1 @(InsertSym1 (d :: Nat))) (sInsert (sing @d))+ instance SingI (LeqSym0 :: (~>) Nat ((~>) Nat Bool)) where+ sing = (singFun2 @LeqSym0) sLeq+ instance SingI d =>+ SingI (LeqSym1 (d :: Nat) :: (~>) Nat Bool) where+ sing = (singFun1 @(LeqSym1 (d :: Nat))) (sLeq (sing @d))
− tests/compile-and-dump/Promote/Constructors.ghc86.template
@@ -1,79 +0,0 @@-Promote/Constructors.hs:(0,0)-(0,0): Splicing declarations- promote- [d| data Foo = Foo | Foo :+ Foo- data Bar = Bar Bar Bar Bar Bar Foo |]- ======>- data Foo = Foo | Foo :+ Foo- data Bar = Bar Bar Bar Bar Bar Foo- type FooSym0 = Foo- type (:+@#@$$$) (t0123456789876543210 :: Foo) (t0123456789876543210 :: Foo) =- (:+) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ((:+@#@$$) t0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::+@#@$$###)) ())- data (:+@#@$$) (t0123456789876543210 :: Foo) :: (~>) Foo Foo- where- (::+@#@$$###) :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply ((:+@#@$$) t0123456789876543210) arg) ((:+@#@$$$) t0123456789876543210 arg) =>- (:+@#@$$) t0123456789876543210 t0123456789876543210- type instance Apply ((:+@#@$$) t0123456789876543210) t0123456789876543210 = (:+) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (:+@#@$) where- suppressUnusedWarnings = snd (((,) (::+@#@$###)) ())- data (:+@#@$) :: (~>) Foo ((~>) Foo Foo)- where- (::+@#@$###) :: forall t0123456789876543210- arg. SameKind (Apply (:+@#@$) arg) ((:+@#@$$) arg) =>- (:+@#@$) t0123456789876543210- type instance Apply (:+@#@$) t0123456789876543210 = (:+@#@$$) t0123456789876543210- type BarSym5 (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Foo) =- Bar t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) BarSym4KindInference) ())- data BarSym4 (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) :: (~>) Foo Bar- where- BarSym4KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (BarSym5 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>- BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = Bar t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (BarSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) BarSym3KindInference) ())- data BarSym3 (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) :: (~>) Bar ((~>) Foo Bar)- where- BarSym3KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (BarSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>- BarSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (BarSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (BarSym2 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) BarSym2KindInference) ())- data BarSym2 (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) :: (~>) Bar ((~>) Bar ((~>) Foo Bar))- where- BarSym2KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (BarSym2 t0123456789876543210 t0123456789876543210) arg) (BarSym3 t0123456789876543210 t0123456789876543210 arg) =>- BarSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (BarSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = BarSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (BarSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) BarSym1KindInference) ())- data BarSym1 (t0123456789876543210 :: Bar) :: (~>) Bar ((~>) Bar ((~>) Bar ((~>) Foo Bar)))- where- BarSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (BarSym1 t0123456789876543210) arg) (BarSym2 t0123456789876543210 arg) =>- BarSym1 t0123456789876543210 t0123456789876543210- type instance Apply (BarSym1 t0123456789876543210) t0123456789876543210 = BarSym2 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings BarSym0 where- suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())- data BarSym0 :: (~>) Bar ((~>) Bar ((~>) Bar ((~>) Bar ((~>) Foo Bar))))- where- BarSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>- BarSym0 t0123456789876543210- type instance Apply BarSym0 t0123456789876543210 = BarSym1 t0123456789876543210
+ tests/compile-and-dump/Promote/Constructors.ghc88.template view
@@ -0,0 +1,79 @@+Promote/Constructors.hs:(0,0)-(0,0): Splicing declarations+ promote+ [d| data Foo = Foo | Foo :+ Foo+ data Bar = Bar Bar Bar Bar Bar Foo |]+ ======>+ data Foo = Foo | Foo :+ Foo+ data Bar = Bar Bar Bar Bar Bar Foo+ type FooSym0 = Foo+ type (:+@#@$$$) (t0123456789876543210 :: Foo) (t0123456789876543210 :: Foo) =+ (:+) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ((:+@#@$$) t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::+@#@$$###)) ())+ data (:+@#@$$) (t0123456789876543210 :: Foo) :: (~>) Foo Foo+ where+ (::+@#@$$###) :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply ((:+@#@$$) t0123456789876543210) arg) ((:+@#@$$$) t0123456789876543210 arg) =>+ (:+@#@$$) t0123456789876543210 t0123456789876543210+ type instance Apply ((:+@#@$$) t0123456789876543210) t0123456789876543210 = (:+) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (:+@#@$) where+ suppressUnusedWarnings = snd (((,) (::+@#@$###)) ())+ data (:+@#@$) :: (~>) Foo ((~>) Foo Foo)+ where+ (::+@#@$###) :: forall t0123456789876543210+ arg. SameKind (Apply (:+@#@$) arg) ((:+@#@$$) arg) =>+ (:+@#@$) t0123456789876543210+ type instance Apply (:+@#@$) t0123456789876543210 = (:+@#@$$) t0123456789876543210+ type BarSym5 (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Foo) =+ Bar t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BarSym4KindInference) ())+ data BarSym4 (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) :: (~>) Foo Bar+ where+ BarSym4KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (BarSym5 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>+ BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = Bar t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (BarSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BarSym3KindInference) ())+ data BarSym3 (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) :: (~>) Bar ((~>) Foo Bar)+ where+ BarSym3KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (BarSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>+ BarSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (BarSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = BarSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (BarSym2 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BarSym2KindInference) ())+ data BarSym2 (t0123456789876543210 :: Bar) (t0123456789876543210 :: Bar) :: (~>) Bar ((~>) Bar ((~>) Foo Bar))+ where+ BarSym2KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (BarSym2 t0123456789876543210 t0123456789876543210) arg) (BarSym3 t0123456789876543210 t0123456789876543210 arg) =>+ BarSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (BarSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = BarSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (BarSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BarSym1KindInference) ())+ data BarSym1 (t0123456789876543210 :: Bar) :: (~>) Bar ((~>) Bar ((~>) Bar ((~>) Foo Bar)))+ where+ BarSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (BarSym1 t0123456789876543210) arg) (BarSym2 t0123456789876543210 arg) =>+ BarSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (BarSym1 t0123456789876543210) t0123456789876543210 = BarSym2 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings BarSym0 where+ suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())+ data BarSym0 :: (~>) Bar ((~>) Bar ((~>) Bar ((~>) Bar ((~>) Foo Bar))))+ where+ BarSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>+ BarSym0 t0123456789876543210+ type instance Apply BarSym0 t0123456789876543210 = BarSym1 t0123456789876543210
− tests/compile-and-dump/Promote/GenDefunSymbols.ghc86.template
@@ -1,54 +0,0 @@-Promote/GenDefunSymbols.hs:0:0:: Splicing declarations- genDefunSymbols [''LiftMaybe, ''NatT, ''(:+)]- ======>- type LiftMaybeSym2 (f0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (x0123456789876543210 :: Maybe a0123456789876543210) =- LiftMaybe f0123456789876543210 x0123456789876543210- instance SuppressUnusedWarnings (LiftMaybeSym1 f0123456789876543210) where- suppressUnusedWarnings = snd (((,) LiftMaybeSym1KindInference) ())- data LiftMaybeSym1 (f0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) (Maybe a0123456789876543210) (Maybe b0123456789876543210)- where- LiftMaybeSym1KindInference :: forall f0123456789876543210- x0123456789876543210- arg. Data.Singletons.Internal.SameKind (Apply (LiftMaybeSym1 f0123456789876543210) arg) (LiftMaybeSym2 f0123456789876543210 arg) =>- LiftMaybeSym1 f0123456789876543210 x0123456789876543210- type instance Apply (LiftMaybeSym1 f0123456789876543210) x0123456789876543210 = LiftMaybe f0123456789876543210 x0123456789876543210- instance SuppressUnusedWarnings LiftMaybeSym0 where- suppressUnusedWarnings = snd (((,) LiftMaybeSym0KindInference) ())- data LiftMaybeSym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) (Maybe a0123456789876543210) (Maybe b0123456789876543210))- where- LiftMaybeSym0KindInference :: forall f0123456789876543210- arg. Data.Singletons.Internal.SameKind (Apply LiftMaybeSym0 arg) (LiftMaybeSym1 arg) =>- LiftMaybeSym0 f0123456789876543210- type instance Apply LiftMaybeSym0 f0123456789876543210 = LiftMaybeSym1 f0123456789876543210- type ZeroSym0 = 'Zero- type SuccSym1 (t0123456789876543210 :: NatT) =- 'Succ t0123456789876543210- instance SuppressUnusedWarnings SuccSym0 where- suppressUnusedWarnings = snd (((,) SuccSym0KindInference) ())- data SuccSym0 :: (~>) NatT NatT- where- SuccSym0KindInference :: forall t0123456789876543210- arg. Data.Singletons.Internal.SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>- SuccSym0 t0123456789876543210- type instance Apply SuccSym0 t0123456789876543210 = 'Succ t0123456789876543210- type (:+@#@$$$) (a0123456789876543210 :: Nat) (b0123456789876543210 :: Nat) =- (:+) a0123456789876543210 b0123456789876543210- instance SuppressUnusedWarnings ((:+@#@$$) a0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::+@#@$$###)) ())- data (:+@#@$$) (a0123456789876543210 :: Nat) b0123456789876543210- where- (::+@#@$$###) :: forall a0123456789876543210- b0123456789876543210- arg. Data.Singletons.Internal.SameKind (Apply ((:+@#@$$) a0123456789876543210) arg) ((:+@#@$$$) a0123456789876543210 arg) =>- (:+@#@$$) a0123456789876543210 b0123456789876543210- type instance Apply ((:+@#@$$) a0123456789876543210) b0123456789876543210 = (:+) a0123456789876543210 b0123456789876543210- instance SuppressUnusedWarnings (:+@#@$) where- suppressUnusedWarnings = snd (((,) (::+@#@$###)) ())- data (:+@#@$) a0123456789876543210- where- (::+@#@$###) :: forall a0123456789876543210- arg. Data.Singletons.Internal.SameKind (Apply (:+@#@$) arg) ((:+@#@$$) arg) =>- (:+@#@$) a0123456789876543210- type instance Apply (:+@#@$) a0123456789876543210 = (:+@#@$$) a0123456789876543210
+ tests/compile-and-dump/Promote/GenDefunSymbols.ghc88.template view
@@ -0,0 +1,54 @@+Promote/GenDefunSymbols.hs:0:0:: Splicing declarations+ genDefunSymbols [''LiftMaybe, ''NatT, ''(:+)]+ ======>+ type LiftMaybeSym2 (f0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (x0123456789876543210 :: Maybe a0123456789876543210) =+ LiftMaybe f0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings (LiftMaybeSym1 f0123456789876543210) where+ suppressUnusedWarnings = snd (((,) LiftMaybeSym1KindInference) ())+ data LiftMaybeSym1 (f0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) (Maybe a0123456789876543210) (Maybe b0123456789876543210)+ where+ LiftMaybeSym1KindInference :: forall f0123456789876543210+ x0123456789876543210+ arg. Data.Singletons.Internal.SameKind (Apply (LiftMaybeSym1 f0123456789876543210) arg) (LiftMaybeSym2 f0123456789876543210 arg) =>+ LiftMaybeSym1 f0123456789876543210 x0123456789876543210+ type instance Apply (LiftMaybeSym1 f0123456789876543210) x0123456789876543210 = LiftMaybe f0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings LiftMaybeSym0 where+ suppressUnusedWarnings = snd (((,) LiftMaybeSym0KindInference) ())+ data LiftMaybeSym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) (Maybe a0123456789876543210) (Maybe b0123456789876543210))+ where+ LiftMaybeSym0KindInference :: forall f0123456789876543210+ arg. Data.Singletons.Internal.SameKind (Apply LiftMaybeSym0 arg) (LiftMaybeSym1 arg) =>+ LiftMaybeSym0 f0123456789876543210+ type instance Apply LiftMaybeSym0 f0123456789876543210 = LiftMaybeSym1 f0123456789876543210+ type ZeroSym0 = 'Zero+ type SuccSym1 (t0123456789876543210 :: NatT) =+ 'Succ t0123456789876543210+ instance SuppressUnusedWarnings SuccSym0 where+ suppressUnusedWarnings = snd (((,) SuccSym0KindInference) ())+ data SuccSym0 :: (~>) NatT NatT+ where+ SuccSym0KindInference :: forall t0123456789876543210+ arg. Data.Singletons.Internal.SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>+ SuccSym0 t0123456789876543210+ type instance Apply SuccSym0 t0123456789876543210 = 'Succ t0123456789876543210+ type (:+@#@$$$) (a0123456789876543210 :: Nat) (b0123456789876543210 :: Nat) =+ (:+) a0123456789876543210 b0123456789876543210+ instance SuppressUnusedWarnings ((:+@#@$$) a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::+@#@$$###)) ())+ data (:+@#@$$) (a0123456789876543210 :: Nat) b0123456789876543210+ where+ (::+@#@$$###) :: forall a0123456789876543210+ b0123456789876543210+ arg. Data.Singletons.Internal.SameKind (Apply ((:+@#@$$) a0123456789876543210) arg) ((:+@#@$$$) a0123456789876543210 arg) =>+ (:+@#@$$) a0123456789876543210 b0123456789876543210+ type instance Apply ((:+@#@$$) a0123456789876543210) b0123456789876543210 = (:+) a0123456789876543210 b0123456789876543210+ instance SuppressUnusedWarnings (:+@#@$) where+ suppressUnusedWarnings = snd (((,) (::+@#@$###)) ())+ data (:+@#@$) a0123456789876543210+ where+ (::+@#@$###) :: forall a0123456789876543210+ arg. Data.Singletons.Internal.SameKind (Apply (:+@#@$) arg) ((:+@#@$$) arg) =>+ (:+@#@$) a0123456789876543210+ type instance Apply (:+@#@$) a0123456789876543210 = (:+@#@$$) a0123456789876543210
− tests/compile-and-dump/Promote/Newtypes.ghc86.template
@@ -1,48 +0,0 @@-Promote/Newtypes.hs:(0,0)-(0,0): Splicing declarations- promote- [d| newtype Foo- = Foo Nat- deriving Eq- newtype Bar = Bar {unBar :: Nat} |]- ======>- newtype Foo- = Foo Nat- deriving Eq- newtype Bar = Bar {unBar :: Nat}- type family Equals_0123456789876543210 (a :: Foo) (b :: Foo) :: Bool where- Equals_0123456789876543210 (Foo a) (Foo b) = (==) a b- Equals_0123456789876543210 (_ :: Foo) (_ :: Foo) = FalseSym0- instance PEq Foo where- type (==) a b = Equals_0123456789876543210 a b- type UnBarSym1 (a0123456789876543210 :: Bar) =- UnBar a0123456789876543210- instance SuppressUnusedWarnings UnBarSym0 where- suppressUnusedWarnings = snd (((,) UnBarSym0KindInference) ())- data UnBarSym0 :: (~>) Bar Nat- where- UnBarSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply UnBarSym0 arg) (UnBarSym1 arg) =>- UnBarSym0 a0123456789876543210- type instance Apply UnBarSym0 a0123456789876543210 = UnBar a0123456789876543210- type family UnBar (a :: Bar) :: Nat where- UnBar (Bar field) = field- type FooSym1 (t0123456789876543210 :: Nat) =- Foo t0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: (~>) Nat Foo- where- FooSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 t0123456789876543210- type instance Apply FooSym0 t0123456789876543210 = Foo t0123456789876543210- type BarSym1 (t0123456789876543210 :: Nat) =- Bar t0123456789876543210- instance SuppressUnusedWarnings BarSym0 where- suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())- data BarSym0 :: (~>) Nat Bar- where- BarSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>- BarSym0 t0123456789876543210- type instance Apply BarSym0 t0123456789876543210 = Bar t0123456789876543210
+ tests/compile-and-dump/Promote/Newtypes.ghc88.template view
@@ -0,0 +1,48 @@+Promote/Newtypes.hs:(0,0)-(0,0): Splicing declarations+ promote+ [d| newtype Foo+ = Foo Nat+ deriving Eq+ newtype Bar = Bar {unBar :: Nat} |]+ ======>+ newtype Foo+ = Foo Nat+ deriving Eq+ newtype Bar = Bar {unBar :: Nat}+ type family Equals_0123456789876543210 (a :: Foo) (b :: Foo) :: Bool where+ Equals_0123456789876543210 (Foo a) (Foo b) = (==) a b+ Equals_0123456789876543210 (_ :: Foo) (_ :: Foo) = FalseSym0+ instance PEq Foo where+ type (==) a b = Equals_0123456789876543210 a b+ type UnBarSym1 (a0123456789876543210 :: Bar) =+ UnBar a0123456789876543210+ instance SuppressUnusedWarnings UnBarSym0 where+ suppressUnusedWarnings = snd (((,) UnBarSym0KindInference) ())+ data UnBarSym0 :: (~>) Bar Nat+ where+ UnBarSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply UnBarSym0 arg) (UnBarSym1 arg) =>+ UnBarSym0 a0123456789876543210+ type instance Apply UnBarSym0 a0123456789876543210 = UnBar a0123456789876543210+ type family UnBar (a :: Bar) :: Nat where+ UnBar (Bar field) = field+ type FooSym1 (t0123456789876543210 :: Nat) =+ Foo t0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: (~>) Nat Foo+ where+ FooSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 t0123456789876543210+ type instance Apply FooSym0 t0123456789876543210 = Foo t0123456789876543210+ type BarSym1 (t0123456789876543210 :: Nat) =+ Bar t0123456789876543210+ instance SuppressUnusedWarnings BarSym0 where+ suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())+ data BarSym0 :: (~>) Nat Bar+ where+ BarSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>+ BarSym0 t0123456789876543210+ type instance Apply BarSym0 t0123456789876543210 = Bar t0123456789876543210
− tests/compile-and-dump/Promote/Pragmas.ghc86.template
@@ -1,12 +0,0 @@-Promote/Pragmas.hs:(0,0)-(0,0): Splicing declarations- promote- [d| {-# INLINE foo #-}- foo :: Bool- foo = True |]- ======>- {-# INLINE foo #-}- foo :: Bool- foo = True- type FooSym0 = Foo- type family Foo :: Bool where- Foo = TrueSym0
+ tests/compile-and-dump/Promote/Pragmas.ghc88.template view
@@ -0,0 +1,12 @@+Promote/Pragmas.hs:(0,0)-(0,0): Splicing declarations+ promote+ [d| {-# INLINE foo #-}+ foo :: Bool+ foo = True |]+ ======>+ {-# INLINE foo #-}+ foo :: Bool+ foo = True+ type FooSym0 = Foo+ type family Foo :: Bool where+ Foo = TrueSym0
− tests/compile-and-dump/Promote/Prelude.ghc86.template
@@ -1,19 +0,0 @@-Promote/Prelude.hs:(0,0)-(0,0): Splicing declarations- promoteOnly- [d| odd :: Nat -> Bool- odd 0 = False- odd n = not . odd $ n - 1 |]- ======>- type OddSym1 (a0123456789876543210 :: Nat) =- Odd a0123456789876543210- instance SuppressUnusedWarnings OddSym0 where- suppressUnusedWarnings = snd (((,) OddSym0KindInference) ())- data OddSym0 :: (~>) Nat Bool- where- OddSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply OddSym0 arg) (OddSym1 arg) =>- OddSym0 a0123456789876543210- type instance Apply OddSym0 a0123456789876543210 = Odd a0123456789876543210- type family Odd (a :: Nat) :: Bool where- Odd 0 = FalseSym0- Odd n = Apply (Apply ($@#@$) (Apply (Apply (.@#@$) NotSym0) OddSym0)) (Apply (Apply (-@#@$) n) (FromInteger 1))
+ tests/compile-and-dump/Promote/Prelude.ghc88.template view
@@ -0,0 +1,19 @@+Promote/Prelude.hs:(0,0)-(0,0): Splicing declarations+ promoteOnly+ [d| odd :: Nat -> Bool+ odd 0 = False+ odd n = not . odd $ n - 1 |]+ ======>+ type OddSym1 (a0123456789876543210 :: Nat) =+ Odd a0123456789876543210+ instance SuppressUnusedWarnings OddSym0 where+ suppressUnusedWarnings = snd (((,) OddSym0KindInference) ())+ data OddSym0 :: (~>) Nat Bool+ where+ OddSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply OddSym0 arg) (OddSym1 arg) =>+ OddSym0 a0123456789876543210+ type instance Apply OddSym0 a0123456789876543210 = Odd a0123456789876543210+ type family Odd (a :: Nat) :: Bool where+ Odd 0 = FalseSym0+ Odd n = Apply (Apply ($@#@$) (Apply (Apply (.@#@$) NotSym0) OddSym0)) (Apply (Apply (-@#@$) n) (FromInteger 1))
− tests/compile-and-dump/Promote/T180.ghc86.template
@@ -1,54 +0,0 @@-Promote/T180.hs:(0,0)-(0,0): Splicing declarations- promote- [d| z (X1 x) = x- z (X2 x) = x- - data X = X1 {y :: Symbol} | X2 {y :: Symbol} |]- ======>- data X = X1 {y :: Symbol} | X2 {y :: Symbol}- z (X1 x) = x- z (X2 x) = x- type ZSym1 a0123456789876543210 = Z a0123456789876543210- instance SuppressUnusedWarnings ZSym0 where- suppressUnusedWarnings = snd (((,) ZSym0KindInference) ())- data ZSym0 a0123456789876543210- where- ZSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ZSym0 arg) (ZSym1 arg) =>- ZSym0 a0123456789876543210- type instance Apply ZSym0 a0123456789876543210 = Z a0123456789876543210- type family Z a where- Z (X1 x) = x- Z (X2 x) = x- type YSym1 (a0123456789876543210 :: X) = Y a0123456789876543210- instance SuppressUnusedWarnings YSym0 where- suppressUnusedWarnings = snd (((,) YSym0KindInference) ())- data YSym0 :: (~>) X Symbol- where- YSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply YSym0 arg) (YSym1 arg) =>- YSym0 a0123456789876543210- type instance Apply YSym0 a0123456789876543210 = Y a0123456789876543210- type family Y (a :: X) :: Symbol where- Y (X1 field) = field- Y (X2 field) = field- type X1Sym1 (t0123456789876543210 :: Symbol) =- X1 t0123456789876543210- instance SuppressUnusedWarnings X1Sym0 where- suppressUnusedWarnings = snd (((,) X1Sym0KindInference) ())- data X1Sym0 :: (~>) Symbol X- where- X1Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply X1Sym0 arg) (X1Sym1 arg) =>- X1Sym0 t0123456789876543210- type instance Apply X1Sym0 t0123456789876543210 = X1 t0123456789876543210- type X2Sym1 (t0123456789876543210 :: Symbol) =- X2 t0123456789876543210- instance SuppressUnusedWarnings X2Sym0 where- suppressUnusedWarnings = snd (((,) X2Sym0KindInference) ())- data X2Sym0 :: (~>) Symbol X- where- X2Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply X2Sym0 arg) (X2Sym1 arg) =>- X2Sym0 t0123456789876543210- type instance Apply X2Sym0 t0123456789876543210 = X2 t0123456789876543210
+ tests/compile-and-dump/Promote/T180.ghc88.template view
@@ -0,0 +1,54 @@+Promote/T180.hs:(0,0)-(0,0): Splicing declarations+ promote+ [d| z (X1 x) = x+ z (X2 x) = x+ + data X = X1 {y :: Symbol} | X2 {y :: Symbol} |]+ ======>+ data X = X1 {y :: Symbol} | X2 {y :: Symbol}+ z (X1 x) = x+ z (X2 x) = x+ type ZSym1 a0123456789876543210 = Z a0123456789876543210+ instance SuppressUnusedWarnings ZSym0 where+ suppressUnusedWarnings = snd (((,) ZSym0KindInference) ())+ data ZSym0 a0123456789876543210+ where+ ZSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ZSym0 arg) (ZSym1 arg) =>+ ZSym0 a0123456789876543210+ type instance Apply ZSym0 a0123456789876543210 = Z a0123456789876543210+ type family Z a where+ Z (X1 x) = x+ Z (X2 x) = x+ type YSym1 (a0123456789876543210 :: X) = Y a0123456789876543210+ instance SuppressUnusedWarnings YSym0 where+ suppressUnusedWarnings = snd (((,) YSym0KindInference) ())+ data YSym0 :: (~>) X Symbol+ where+ YSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply YSym0 arg) (YSym1 arg) =>+ YSym0 a0123456789876543210+ type instance Apply YSym0 a0123456789876543210 = Y a0123456789876543210+ type family Y (a :: X) :: Symbol where+ Y (X1 field) = field+ Y (X2 field) = field+ type X1Sym1 (t0123456789876543210 :: Symbol) =+ X1 t0123456789876543210+ instance SuppressUnusedWarnings X1Sym0 where+ suppressUnusedWarnings = snd (((,) X1Sym0KindInference) ())+ data X1Sym0 :: (~>) Symbol X+ where+ X1Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply X1Sym0 arg) (X1Sym1 arg) =>+ X1Sym0 t0123456789876543210+ type instance Apply X1Sym0 t0123456789876543210 = X1 t0123456789876543210+ type X2Sym1 (t0123456789876543210 :: Symbol) =+ X2 t0123456789876543210+ instance SuppressUnusedWarnings X2Sym0 where+ suppressUnusedWarnings = snd (((,) X2Sym0KindInference) ())+ data X2Sym0 :: (~>) Symbol X+ where+ X2Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply X2Sym0 arg) (X2Sym1 arg) =>+ X2Sym0 t0123456789876543210+ type instance Apply X2Sym0 t0123456789876543210 = X2 t0123456789876543210
− tests/compile-and-dump/Promote/T361.ghc86.template
@@ -1,21 +0,0 @@-Promote/T361.hs:0:0:: Splicing declarations- genDefunSymbols [''Proxy] ======> type ProxySym0 = 'Proxy-Promote/T361.hs:(0,0)-(0,0): Splicing declarations- promote- [d| f :: Proxy 1 -> Proxy 2- f Proxy = Proxy |]- ======>- f :: Proxy 1 -> Proxy 2- f Proxy = Proxy- type FSym1 (a0123456789876543210 :: Proxy 1) =- F a0123456789876543210- instance SuppressUnusedWarnings FSym0 where- suppressUnusedWarnings = snd (((,) FSym0KindInference) ())- data FSym0 :: (~>) (Proxy 1) (Proxy 2)- where- FSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>- FSym0 a0123456789876543210- type instance Apply FSym0 a0123456789876543210 = F a0123456789876543210- type family F (a :: Proxy 1) :: Proxy 2 where- F 'Proxy = ProxySym0
+ tests/compile-and-dump/Promote/T361.ghc88.template view
@@ -0,0 +1,21 @@+Promote/T361.hs:0:0:: Splicing declarations+ genDefunSymbols [''Proxy] ======> type ProxySym0 = 'Proxy+Promote/T361.hs:(0,0)-(0,0): Splicing declarations+ promote+ [d| f :: Proxy 1 -> Proxy 2+ f Proxy = Proxy |]+ ======>+ f :: Proxy 1 -> Proxy 2+ f Proxy = Proxy+ type FSym1 (a0123456789876543210 :: Proxy 1) =+ F a0123456789876543210+ instance SuppressUnusedWarnings FSym0 where+ suppressUnusedWarnings = snd (((,) FSym0KindInference) ())+ data FSym0 :: (~>) (Proxy 1) (Proxy 2)+ where+ FSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>+ FSym0 a0123456789876543210+ type instance Apply FSym0 a0123456789876543210 = F a0123456789876543210+ type family F (a :: Proxy 1) :: Proxy 2 where+ F 'Proxy = ProxySym0
− tests/compile-and-dump/Singletons/AsPattern.ghc86.template
@@ -1,405 +0,0 @@-Singletons/AsPattern.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| maybePlus :: Maybe Nat -> Maybe Nat- maybePlus (Just n) = Just (plus (Succ Zero) n)- maybePlus p@Nothing = p- bar :: Maybe Nat -> Maybe Nat- bar x@(Just _) = x- bar Nothing = Nothing- baz_ :: Maybe Baz -> Maybe Baz- baz_ p@Nothing = p- baz_ p@(Just (Baz _ _ _)) = p- tup :: (Nat, Nat) -> (Nat, Nat)- tup p@(_, _) = p- foo :: [Nat] -> [Nat]- foo p@[] = p- foo p@[_] = p- foo p@(_ : _ : _) = p- - data Baz = Baz Nat Nat Nat |]- ======>- maybePlus :: Maybe Nat -> Maybe Nat- maybePlus (Just n) = Just ((plus (Succ Zero)) n)- maybePlus p@Nothing = p- bar :: Maybe Nat -> Maybe Nat- bar x@(Just _) = x- bar Nothing = Nothing- data Baz = Baz Nat Nat Nat- baz_ :: Maybe Baz -> Maybe Baz- baz_ p@Nothing = p- baz_ p@(Just (Baz _ _ _)) = p- tup :: (Nat, Nat) -> (Nat, Nat)- tup p@(_, _) = p- foo :: [Nat] -> [Nat]- foo p@[] = p- foo p@[_] = p- foo p@(_ : (_ : _)) = p- type BazSym3 (t0123456789876543210 :: Nat) (t0123456789876543210 :: Nat) (t0123456789876543210 :: Nat) =- Baz t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (BazSym2 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) BazSym2KindInference) ())- data BazSym2 (t0123456789876543210 :: Nat) (t0123456789876543210 :: Nat) :: (~>) Nat Baz- where- BazSym2KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (BazSym2 t0123456789876543210 t0123456789876543210) arg) (BazSym3 t0123456789876543210 t0123456789876543210 arg) =>- BazSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (BazSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = Baz t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (BazSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) BazSym1KindInference) ())- data BazSym1 (t0123456789876543210 :: Nat) :: (~>) Nat ((~>) Nat Baz)- where- BazSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (BazSym1 t0123456789876543210) arg) (BazSym2 t0123456789876543210 arg) =>- BazSym1 t0123456789876543210 t0123456789876543210- type instance Apply (BazSym1 t0123456789876543210) t0123456789876543210 = BazSym2 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings BazSym0 where- suppressUnusedWarnings = snd (((,) BazSym0KindInference) ())- data BazSym0 :: (~>) Nat ((~>) Nat ((~>) Nat Baz))- where- BazSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply BazSym0 arg) (BazSym1 arg) =>- BazSym0 t0123456789876543210- type instance Apply BazSym0 t0123456789876543210 = BazSym1 t0123456789876543210- type Let0123456789876543210PSym0 = Let0123456789876543210P- type family Let0123456789876543210P where- Let0123456789876543210P = '[]- type Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 =- Let0123456789876543210P wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210PSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210PSym0KindInference) ())- data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210- where- Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210- arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>- Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210- type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210- type family Let0123456789876543210P wild_0123456789876543210 where- Let0123456789876543210P wild_0123456789876543210 = Apply (Apply (:@#@$) wild_0123456789876543210) '[]- type Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 =- Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210PSym2KindInference) ())- data Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- where- Let0123456789876543210PSym2KindInference :: forall wild_01234567898765432100123456789876543210- wild_01234567898765432100123456789876543210- wild_01234567898765432100123456789876543210- arg. SameKind (Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 arg) =>- Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- type instance Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210PSym1KindInference) ())- data Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- where- Let0123456789876543210PSym1KindInference :: forall wild_01234567898765432100123456789876543210- wild_01234567898765432100123456789876543210- arg. SameKind (Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 arg) =>- Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- type instance Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210PSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210PSym0KindInference) ())- data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210- where- Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210- arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>- Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210- type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210- type family Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 where- Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 = Apply (Apply (:@#@$) wild_0123456789876543210) (Apply (Apply (:@#@$) wild_0123456789876543210) wild_0123456789876543210)- type Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 =- Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210PSym1KindInference) ())- data Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- where- Let0123456789876543210PSym1KindInference :: forall wild_01234567898765432100123456789876543210- wild_01234567898765432100123456789876543210- arg. SameKind (Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 arg) =>- Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- type instance Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210PSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210PSym0KindInference) ())- data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210- where- Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210- arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>- Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210- type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210- type family Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 where- Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 = Apply (Apply Tuple2Sym0 wild_0123456789876543210) wild_0123456789876543210- type Let0123456789876543210PSym0 = Let0123456789876543210P- type family Let0123456789876543210P where- Let0123456789876543210P = NothingSym0- type Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 =- Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210PSym2KindInference) ())- data Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- where- Let0123456789876543210PSym2KindInference :: forall wild_01234567898765432100123456789876543210- wild_01234567898765432100123456789876543210- wild_01234567898765432100123456789876543210- arg. SameKind (Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 arg) =>- Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- type instance Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210PSym1KindInference) ())- data Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- where- Let0123456789876543210PSym1KindInference :: forall wild_01234567898765432100123456789876543210- wild_01234567898765432100123456789876543210- arg. SameKind (Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 arg) =>- Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- type instance Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210PSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210PSym0KindInference) ())- data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210- where- Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210- arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>- Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210- type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210- type family Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 where- Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 = Apply JustSym0 (Apply (Apply (Apply BazSym0 wild_0123456789876543210) wild_0123456789876543210) wild_0123456789876543210)- type Let0123456789876543210XSym1 wild_01234567898765432100123456789876543210 =- Let0123456789876543210X wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210XSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210XSym0KindInference) ())- data Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210- where- Let0123456789876543210XSym0KindInference :: forall wild_01234567898765432100123456789876543210- arg. SameKind (Apply Let0123456789876543210XSym0 arg) (Let0123456789876543210XSym1 arg) =>- Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210- type instance Apply Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210X wild_01234567898765432100123456789876543210- type family Let0123456789876543210X wild_0123456789876543210 where- Let0123456789876543210X wild_0123456789876543210 = Apply JustSym0 wild_0123456789876543210- type Let0123456789876543210PSym0 = Let0123456789876543210P- type family Let0123456789876543210P where- Let0123456789876543210P = NothingSym0- type FooSym1 (a0123456789876543210 :: [Nat]) =- Foo a0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: (~>) [Nat] [Nat]- where- FooSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 a0123456789876543210- type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210- type TupSym1 (a0123456789876543210 :: (Nat, Nat)) =- Tup a0123456789876543210- instance SuppressUnusedWarnings TupSym0 where- suppressUnusedWarnings = snd (((,) TupSym0KindInference) ())- data TupSym0 :: (~>) (Nat, Nat) (Nat, Nat)- where- TupSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply TupSym0 arg) (TupSym1 arg) =>- TupSym0 a0123456789876543210- type instance Apply TupSym0 a0123456789876543210 = Tup a0123456789876543210- type Baz_Sym1 (a0123456789876543210 :: Maybe Baz) =- Baz_ a0123456789876543210- instance SuppressUnusedWarnings Baz_Sym0 where- suppressUnusedWarnings = snd (((,) Baz_Sym0KindInference) ())- data Baz_Sym0 :: (~>) (Maybe Baz) (Maybe Baz)- where- Baz_Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Baz_Sym0 arg) (Baz_Sym1 arg) =>- Baz_Sym0 a0123456789876543210- type instance Apply Baz_Sym0 a0123456789876543210 = Baz_ a0123456789876543210- type BarSym1 (a0123456789876543210 :: Maybe Nat) =- Bar a0123456789876543210- instance SuppressUnusedWarnings BarSym0 where- suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())- data BarSym0 :: (~>) (Maybe Nat) (Maybe Nat)- where- BarSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>- BarSym0 a0123456789876543210- type instance Apply BarSym0 a0123456789876543210 = Bar a0123456789876543210- type MaybePlusSym1 (a0123456789876543210 :: Maybe Nat) =- MaybePlus a0123456789876543210- instance SuppressUnusedWarnings MaybePlusSym0 where- suppressUnusedWarnings = snd (((,) MaybePlusSym0KindInference) ())- data MaybePlusSym0 :: (~>) (Maybe Nat) (Maybe Nat)- where- MaybePlusSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply MaybePlusSym0 arg) (MaybePlusSym1 arg) =>- MaybePlusSym0 a0123456789876543210- type instance Apply MaybePlusSym0 a0123456789876543210 = MaybePlus a0123456789876543210- type family Foo (a :: [Nat]) :: [Nat] where- Foo '[] = Let0123456789876543210PSym0- Foo '[wild_0123456789876543210] = Let0123456789876543210PSym1 wild_0123456789876543210- Foo ( '(:) wild_0123456789876543210 ( '(:) wild_0123456789876543210 wild_0123456789876543210)) = Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210- type family Tup (a :: (Nat, Nat)) :: (Nat, Nat) where- Tup '(wild_0123456789876543210,- wild_0123456789876543210) = Let0123456789876543210PSym2 wild_0123456789876543210 wild_0123456789876543210- type family Baz_ (a :: Maybe Baz) :: Maybe Baz where- Baz_ 'Nothing = Let0123456789876543210PSym0- Baz_ ( 'Just (Baz wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210)) = Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210- type family Bar (a :: Maybe Nat) :: Maybe Nat where- Bar ( 'Just wild_0123456789876543210) = Let0123456789876543210XSym1 wild_0123456789876543210- Bar 'Nothing = NothingSym0- type family MaybePlus (a :: Maybe Nat) :: Maybe Nat where- MaybePlus ( 'Just n) = Apply JustSym0 (Apply (Apply PlusSym0 (Apply SuccSym0 ZeroSym0)) n)- MaybePlus 'Nothing = Let0123456789876543210PSym0- sFoo ::- forall (t :: [Nat]). Sing t -> Sing (Apply FooSym0 t :: [Nat])- sTup ::- forall (t :: (Nat, Nat)).- Sing t -> Sing (Apply TupSym0 t :: (Nat, Nat))- sBaz_ ::- forall (t :: Maybe Baz).- Sing t -> Sing (Apply Baz_Sym0 t :: Maybe Baz)- sBar ::- forall (t :: Maybe Nat).- Sing t -> Sing (Apply BarSym0 t :: Maybe Nat)- sMaybePlus ::- forall (t :: Maybe Nat).- Sing t -> Sing (Apply MaybePlusSym0 t :: Maybe Nat)- sFoo SNil- = let- sP :: Sing Let0123456789876543210PSym0- sP = SNil- in sP- sFoo- (SCons (sWild_0123456789876543210 :: Sing wild_0123456789876543210)- SNil)- = let- sP :: Sing (Let0123456789876543210PSym1 wild_0123456789876543210)- sP- = (applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- sWild_0123456789876543210))- SNil- in sP- sFoo- (SCons (sWild_0123456789876543210 :: Sing wild_0123456789876543210)- (SCons (sWild_0123456789876543210 :: Sing wild_0123456789876543210)- (sWild_0123456789876543210 :: Sing wild_0123456789876543210)))- = let- sP ::- Sing (Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210)- sP- = (applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- sWild_0123456789876543210))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- sWild_0123456789876543210))- sWild_0123456789876543210)- in sP- sTup- (STuple2 (sWild_0123456789876543210 :: Sing wild_0123456789876543210)- (sWild_0123456789876543210 :: Sing wild_0123456789876543210))- = let- sP ::- Sing (Let0123456789876543210PSym2 wild_0123456789876543210 wild_0123456789876543210)- sP- = (applySing- ((applySing ((singFun2 @Tuple2Sym0) STuple2))- sWild_0123456789876543210))- sWild_0123456789876543210- in sP- sBaz_ SNothing- = let- sP :: Sing Let0123456789876543210PSym0- sP = SNothing- in sP- sBaz_- (SJust (SBaz (sWild_0123456789876543210 :: Sing wild_0123456789876543210)- (sWild_0123456789876543210 :: Sing wild_0123456789876543210)- (sWild_0123456789876543210 :: Sing wild_0123456789876543210)))- = let- sP ::- Sing (Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210)- sP- = (applySing ((singFun1 @JustSym0) SJust))- ((applySing- ((applySing- ((applySing ((singFun3 @BazSym0) SBaz)) sWild_0123456789876543210))- sWild_0123456789876543210))- sWild_0123456789876543210)- in sP- sBar- (SJust (sWild_0123456789876543210 :: Sing wild_0123456789876543210))- = let- sX :: Sing (Let0123456789876543210XSym1 wild_0123456789876543210)- sX- = (applySing ((singFun1 @JustSym0) SJust))- sWild_0123456789876543210- in sX- sBar SNothing = SNothing- sMaybePlus (SJust (sN :: Sing n))- = (applySing ((singFun1 @JustSym0) SJust))- ((applySing- ((applySing ((singFun2 @PlusSym0) sPlus))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- sN)- sMaybePlus SNothing- = let- sP :: Sing Let0123456789876543210PSym0- sP = SNothing- in sP- instance SingI (FooSym0 :: (~>) [Nat] [Nat]) where- sing = (singFun1 @FooSym0) sFoo- instance SingI (TupSym0 :: (~>) (Nat, Nat) (Nat, Nat)) where- sing = (singFun1 @TupSym0) sTup- instance SingI (Baz_Sym0 :: (~>) (Maybe Baz) (Maybe Baz)) where- sing = (singFun1 @Baz_Sym0) sBaz_- instance SingI (BarSym0 :: (~>) (Maybe Nat) (Maybe Nat)) where- sing = (singFun1 @BarSym0) sBar- instance SingI (MaybePlusSym0 :: (~>) (Maybe Nat) (Maybe Nat)) where- sing = (singFun1 @MaybePlusSym0) sMaybePlus- data instance Sing :: Baz -> GHC.Types.Type- where- SBaz :: forall (n :: Nat) (n :: Nat) (n :: Nat).- (Sing (n :: Nat))- -> (Sing (n :: Nat)) -> (Sing (n :: Nat)) -> Sing (Baz n n n)- type SBaz = (Sing :: Baz -> GHC.Types.Type)- instance SingKind Baz where- type Demote Baz = Baz- fromSing (SBaz b b b)- = ((Baz (fromSing b)) (fromSing b)) (fromSing b)- toSing (Baz (b :: Demote Nat) (b :: Demote Nat) (b :: Demote Nat))- = case- (((,,) (toSing b :: SomeSing Nat)) (toSing b :: SomeSing Nat))- (toSing b :: SomeSing Nat)- of {- (,,) (SomeSing c) (SomeSing c) (SomeSing c)- -> SomeSing (((SBaz c) c) c) }- instance (SingI n, SingI n, SingI n) =>- SingI (Baz (n :: Nat) (n :: Nat) (n :: Nat)) where- sing = ((SBaz sing) sing) sing- instance SingI (BazSym0 :: (~>) Nat ((~>) Nat ((~>) Nat Baz))) where- sing = (singFun3 @BazSym0) SBaz- instance SingI (TyCon3 Baz :: (~>) Nat ((~>) Nat ((~>) Nat Baz))) where- sing = (singFun3 @(TyCon3 Baz)) SBaz- instance SingI d =>- SingI (BazSym1 (d :: Nat) :: (~>) Nat ((~>) Nat Baz)) where- sing = (singFun2 @(BazSym1 (d :: Nat))) (SBaz (sing @d))- instance SingI d =>- SingI (TyCon2 (Baz (d :: Nat)) :: (~>) Nat ((~>) Nat Baz)) where- sing = (singFun2 @(TyCon2 (Baz (d :: Nat)))) (SBaz (sing @d))- instance (SingI d, SingI d) =>- SingI (BazSym2 (d :: Nat) (d :: Nat) :: (~>) Nat Baz) where- sing- = (singFun1 @(BazSym2 (d :: Nat) (d :: Nat)))- ((SBaz (sing @d)) (sing @d))- instance (SingI d, SingI d) =>- SingI (TyCon1 (Baz (d :: Nat) (d :: Nat)) :: (~>) Nat Baz) where- sing- = (singFun1 @(TyCon1 (Baz (d :: Nat) (d :: Nat))))- ((SBaz (sing @d)) (sing @d))
+ tests/compile-and-dump/Singletons/AsPattern.ghc88.template view
@@ -0,0 +1,395 @@+Singletons/AsPattern.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| maybePlus :: Maybe Nat -> Maybe Nat+ maybePlus (Just n) = Just (plus (Succ Zero) n)+ maybePlus p@Nothing = p+ bar :: Maybe Nat -> Maybe Nat+ bar x@(Just _) = x+ bar Nothing = Nothing+ baz_ :: Maybe Baz -> Maybe Baz+ baz_ p@Nothing = p+ baz_ p@(Just (Baz _ _ _)) = p+ tup :: (Nat, Nat) -> (Nat, Nat)+ tup p@(_, _) = p+ foo :: [Nat] -> [Nat]+ foo p@[] = p+ foo p@[_] = p+ foo p@(_ : _ : _) = p+ + data Baz = Baz Nat Nat Nat |]+ ======>+ maybePlus :: Maybe Nat -> Maybe Nat+ maybePlus (Just n) = Just ((plus (Succ Zero)) n)+ maybePlus p@Nothing = p+ bar :: Maybe Nat -> Maybe Nat+ bar x@(Just _) = x+ bar Nothing = Nothing+ data Baz = Baz Nat Nat Nat+ baz_ :: Maybe Baz -> Maybe Baz+ baz_ p@Nothing = p+ baz_ p@(Just (Baz _ _ _)) = p+ tup :: (Nat, Nat) -> (Nat, Nat)+ tup p@(_, _) = p+ foo :: [Nat] -> [Nat]+ foo p@[] = p+ foo p@[_] = p+ foo p@(_ : (_ : _)) = p+ type BazSym3 (t0123456789876543210 :: Nat) (t0123456789876543210 :: Nat) (t0123456789876543210 :: Nat) =+ Baz t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (BazSym2 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BazSym2KindInference) ())+ data BazSym2 (t0123456789876543210 :: Nat) (t0123456789876543210 :: Nat) :: (~>) Nat Baz+ where+ BazSym2KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (BazSym2 t0123456789876543210 t0123456789876543210) arg) (BazSym3 t0123456789876543210 t0123456789876543210 arg) =>+ BazSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (BazSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = Baz t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (BazSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BazSym1KindInference) ())+ data BazSym1 (t0123456789876543210 :: Nat) :: (~>) Nat ((~>) Nat Baz)+ where+ BazSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (BazSym1 t0123456789876543210) arg) (BazSym2 t0123456789876543210 arg) =>+ BazSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (BazSym1 t0123456789876543210) t0123456789876543210 = BazSym2 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings BazSym0 where+ suppressUnusedWarnings = snd (((,) BazSym0KindInference) ())+ data BazSym0 :: (~>) Nat ((~>) Nat ((~>) Nat Baz))+ where+ BazSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply BazSym0 arg) (BazSym1 arg) =>+ BazSym0 t0123456789876543210+ type instance Apply BazSym0 t0123456789876543210 = BazSym1 t0123456789876543210+ type Let0123456789876543210PSym0 = Let0123456789876543210P+ type family Let0123456789876543210P where+ Let0123456789876543210P = '[]+ type Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 =+ Let0123456789876543210P wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210PSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210PSym0KindInference) ())+ data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210+ arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>+ Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210+ type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210+ type family Let0123456789876543210P wild_0123456789876543210 where+ Let0123456789876543210P wild_0123456789876543210 = Apply (Apply (:@#@$) wild_0123456789876543210) '[]+ type Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 =+ Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210PSym2KindInference) ())+ data Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210PSym2KindInference :: forall wild_01234567898765432100123456789876543210+ wild_01234567898765432100123456789876543210+ wild_01234567898765432100123456789876543210+ arg. SameKind (Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 arg) =>+ Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ type instance Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210PSym1KindInference) ())+ data Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210PSym1KindInference :: forall wild_01234567898765432100123456789876543210+ wild_01234567898765432100123456789876543210+ arg. SameKind (Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 arg) =>+ Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ type instance Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210PSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210PSym0KindInference) ())+ data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210+ arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>+ Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210+ type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210+ type family Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 where+ Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 = Apply (Apply (:@#@$) wild_0123456789876543210) (Apply (Apply (:@#@$) wild_0123456789876543210) wild_0123456789876543210)+ type Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 =+ Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210PSym1KindInference) ())+ data Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210PSym1KindInference :: forall wild_01234567898765432100123456789876543210+ wild_01234567898765432100123456789876543210+ arg. SameKind (Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 arg) =>+ Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ type instance Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210PSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210PSym0KindInference) ())+ data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210+ arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>+ Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210+ type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210+ type family Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 where+ Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 = Apply (Apply Tuple2Sym0 wild_0123456789876543210) wild_0123456789876543210+ type Let0123456789876543210PSym0 = Let0123456789876543210P+ type family Let0123456789876543210P where+ Let0123456789876543210P = NothingSym0+ type Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 =+ Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210PSym2KindInference) ())+ data Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210PSym2KindInference :: forall wild_01234567898765432100123456789876543210+ wild_01234567898765432100123456789876543210+ wild_01234567898765432100123456789876543210+ arg. SameKind (Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym3 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 arg) =>+ Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ type instance Apply (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210P wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210PSym1KindInference) ())+ data Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210PSym1KindInference :: forall wild_01234567898765432100123456789876543210+ wild_01234567898765432100123456789876543210+ arg. SameKind (Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) arg) (Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 arg) =>+ Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ type instance Apply (Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210) wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym2 wild_01234567898765432100123456789876543210 wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210PSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210PSym0KindInference) ())+ data Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210PSym0KindInference :: forall wild_01234567898765432100123456789876543210+ arg. SameKind (Apply Let0123456789876543210PSym0 arg) (Let0123456789876543210PSym1 arg) =>+ Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210+ type instance Apply Let0123456789876543210PSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210PSym1 wild_01234567898765432100123456789876543210+ type family Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 where+ Let0123456789876543210P wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210 = Apply JustSym0 (Apply (Apply (Apply BazSym0 wild_0123456789876543210) wild_0123456789876543210) wild_0123456789876543210)+ type Let0123456789876543210XSym1 wild_01234567898765432100123456789876543210 =+ Let0123456789876543210X wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210XSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210XSym0KindInference) ())+ data Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210XSym0KindInference :: forall wild_01234567898765432100123456789876543210+ arg. SameKind (Apply Let0123456789876543210XSym0 arg) (Let0123456789876543210XSym1 arg) =>+ Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210+ type instance Apply Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210X wild_01234567898765432100123456789876543210+ type family Let0123456789876543210X wild_0123456789876543210 where+ Let0123456789876543210X wild_0123456789876543210 = Apply JustSym0 wild_0123456789876543210+ type Let0123456789876543210PSym0 = Let0123456789876543210P+ type family Let0123456789876543210P where+ Let0123456789876543210P = NothingSym0+ type FooSym1 (a0123456789876543210 :: [Nat]) =+ Foo a0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: (~>) [Nat] [Nat]+ where+ FooSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 a0123456789876543210+ type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210+ type TupSym1 (a0123456789876543210 :: (Nat, Nat)) =+ Tup a0123456789876543210+ instance SuppressUnusedWarnings TupSym0 where+ suppressUnusedWarnings = snd (((,) TupSym0KindInference) ())+ data TupSym0 :: (~>) (Nat, Nat) (Nat, Nat)+ where+ TupSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply TupSym0 arg) (TupSym1 arg) =>+ TupSym0 a0123456789876543210+ type instance Apply TupSym0 a0123456789876543210 = Tup a0123456789876543210+ type Baz_Sym1 (a0123456789876543210 :: Maybe Baz) =+ Baz_ a0123456789876543210+ instance SuppressUnusedWarnings Baz_Sym0 where+ suppressUnusedWarnings = snd (((,) Baz_Sym0KindInference) ())+ data Baz_Sym0 :: (~>) (Maybe Baz) (Maybe Baz)+ where+ Baz_Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Baz_Sym0 arg) (Baz_Sym1 arg) =>+ Baz_Sym0 a0123456789876543210+ type instance Apply Baz_Sym0 a0123456789876543210 = Baz_ a0123456789876543210+ type BarSym1 (a0123456789876543210 :: Maybe Nat) =+ Bar a0123456789876543210+ instance SuppressUnusedWarnings BarSym0 where+ suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())+ data BarSym0 :: (~>) (Maybe Nat) (Maybe Nat)+ where+ BarSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>+ BarSym0 a0123456789876543210+ type instance Apply BarSym0 a0123456789876543210 = Bar a0123456789876543210+ type MaybePlusSym1 (a0123456789876543210 :: Maybe Nat) =+ MaybePlus a0123456789876543210+ instance SuppressUnusedWarnings MaybePlusSym0 where+ suppressUnusedWarnings = snd (((,) MaybePlusSym0KindInference) ())+ data MaybePlusSym0 :: (~>) (Maybe Nat) (Maybe Nat)+ where+ MaybePlusSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply MaybePlusSym0 arg) (MaybePlusSym1 arg) =>+ MaybePlusSym0 a0123456789876543210+ type instance Apply MaybePlusSym0 a0123456789876543210 = MaybePlus a0123456789876543210+ type family Foo (a :: [Nat]) :: [Nat] where+ Foo '[] = Let0123456789876543210PSym0+ Foo '[wild_0123456789876543210] = Let0123456789876543210PSym1 wild_0123456789876543210+ Foo ('(:) wild_0123456789876543210 ('(:) wild_0123456789876543210 wild_0123456789876543210)) = Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210+ type family Tup (a :: (Nat, Nat)) :: (Nat, Nat) where+ Tup '(wild_0123456789876543210,+ wild_0123456789876543210) = Let0123456789876543210PSym2 wild_0123456789876543210 wild_0123456789876543210+ type family Baz_ (a :: Maybe Baz) :: Maybe Baz where+ Baz_ 'Nothing = Let0123456789876543210PSym0+ Baz_ ('Just (Baz wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210)) = Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210+ type family Bar (a :: Maybe Nat) :: Maybe Nat where+ Bar ('Just wild_0123456789876543210) = Let0123456789876543210XSym1 wild_0123456789876543210+ Bar 'Nothing = NothingSym0+ type family MaybePlus (a :: Maybe Nat) :: Maybe Nat where+ MaybePlus ('Just n) = Apply JustSym0 (Apply (Apply PlusSym0 (Apply SuccSym0 ZeroSym0)) n)+ MaybePlus 'Nothing = Let0123456789876543210PSym0+ sFoo ::+ forall (t :: [Nat]). Sing t -> Sing (Apply FooSym0 t :: [Nat])+ sTup ::+ forall (t :: (Nat, Nat)).+ Sing t -> Sing (Apply TupSym0 t :: (Nat, Nat))+ sBaz_ ::+ forall (t :: Maybe Baz).+ Sing t -> Sing (Apply Baz_Sym0 t :: Maybe Baz)+ sBar ::+ forall (t :: Maybe Nat).+ Sing t -> Sing (Apply BarSym0 t :: Maybe Nat)+ sMaybePlus ::+ forall (t :: Maybe Nat).+ Sing t -> Sing (Apply MaybePlusSym0 t :: Maybe Nat)+ sFoo SNil+ = let+ sP :: Sing Let0123456789876543210PSym0+ sP = SNil+ in sP+ sFoo+ (SCons (sWild_0123456789876543210 :: Sing wild_0123456789876543210)+ SNil)+ = let+ sP :: Sing (Let0123456789876543210PSym1 wild_0123456789876543210)+ sP+ = (applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ sWild_0123456789876543210))+ SNil+ in sP+ sFoo+ (SCons (sWild_0123456789876543210 :: Sing wild_0123456789876543210)+ (SCons (sWild_0123456789876543210 :: Sing wild_0123456789876543210)+ (sWild_0123456789876543210 :: Sing wild_0123456789876543210)))+ = let+ sP ::+ Sing (Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210)+ sP+ = (applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ sWild_0123456789876543210))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ sWild_0123456789876543210))+ sWild_0123456789876543210)+ in sP+ sTup+ (STuple2 (sWild_0123456789876543210 :: Sing wild_0123456789876543210)+ (sWild_0123456789876543210 :: Sing wild_0123456789876543210))+ = let+ sP ::+ Sing (Let0123456789876543210PSym2 wild_0123456789876543210 wild_0123456789876543210)+ sP+ = (applySing+ ((applySing ((singFun2 @Tuple2Sym0) STuple2))+ sWild_0123456789876543210))+ sWild_0123456789876543210+ in sP+ sBaz_ SNothing+ = let+ sP :: Sing Let0123456789876543210PSym0+ sP = SNothing+ in sP+ sBaz_+ (SJust (SBaz (sWild_0123456789876543210 :: Sing wild_0123456789876543210)+ (sWild_0123456789876543210 :: Sing wild_0123456789876543210)+ (sWild_0123456789876543210 :: Sing wild_0123456789876543210)))+ = let+ sP ::+ Sing (Let0123456789876543210PSym3 wild_0123456789876543210 wild_0123456789876543210 wild_0123456789876543210)+ sP+ = (applySing ((singFun1 @JustSym0) SJust))+ ((applySing+ ((applySing+ ((applySing ((singFun3 @BazSym0) SBaz)) sWild_0123456789876543210))+ sWild_0123456789876543210))+ sWild_0123456789876543210)+ in sP+ sBar+ (SJust (sWild_0123456789876543210 :: Sing wild_0123456789876543210))+ = let+ sX :: Sing (Let0123456789876543210XSym1 wild_0123456789876543210)+ sX+ = (applySing ((singFun1 @JustSym0) SJust))+ sWild_0123456789876543210+ in sX+ sBar SNothing = SNothing+ sMaybePlus (SJust (sN :: Sing n))+ = (applySing ((singFun1 @JustSym0) SJust))+ ((applySing+ ((applySing ((singFun2 @PlusSym0) sPlus))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ sN)+ sMaybePlus SNothing+ = let+ sP :: Sing Let0123456789876543210PSym0+ sP = SNothing+ in sP+ instance SingI (FooSym0 :: (~>) [Nat] [Nat]) where+ sing = (singFun1 @FooSym0) sFoo+ instance SingI (TupSym0 :: (~>) (Nat, Nat) (Nat, Nat)) where+ sing = (singFun1 @TupSym0) sTup+ instance SingI (Baz_Sym0 :: (~>) (Maybe Baz) (Maybe Baz)) where+ sing = (singFun1 @Baz_Sym0) sBaz_+ instance SingI (BarSym0 :: (~>) (Maybe Nat) (Maybe Nat)) where+ sing = (singFun1 @BarSym0) sBar+ instance SingI (MaybePlusSym0 :: (~>) (Maybe Nat) (Maybe Nat)) where+ sing = (singFun1 @MaybePlusSym0) sMaybePlus+ data SBaz :: Baz -> GHC.Types.Type+ where+ SBaz :: forall (n :: Nat) (n :: Nat) (n :: Nat).+ (Sing (n :: Nat))+ -> (Sing (n :: Nat)) -> (Sing (n :: Nat)) -> SBaz (Baz n n n)+ type instance Sing @Baz = SBaz+ instance SingKind Baz where+ type Demote Baz = Baz+ fromSing (SBaz b b b)+ = ((Baz (fromSing b)) (fromSing b)) (fromSing b)+ toSing (Baz (b :: Demote Nat) (b :: Demote Nat) (b :: Demote Nat))+ = case+ (((,,) (toSing b :: SomeSing Nat)) (toSing b :: SomeSing Nat))+ (toSing b :: SomeSing Nat)+ of {+ (,,) (SomeSing c) (SomeSing c) (SomeSing c)+ -> SomeSing (((SBaz c) c) c) }+ instance (SingI n, SingI n, SingI n) =>+ SingI (Baz (n :: Nat) (n :: Nat) (n :: Nat)) where+ sing = ((SBaz sing) sing) sing+ instance SingI (BazSym0 :: (~>) Nat ((~>) Nat ((~>) Nat Baz))) where+ sing = (singFun3 @BazSym0) SBaz+ instance SingI d =>+ SingI (BazSym1 (d :: Nat) :: (~>) Nat ((~>) Nat Baz)) where+ sing = (singFun2 @(BazSym1 (d :: Nat))) (SBaz (sing @d))+ instance (SingI d, SingI d) =>+ SingI (BazSym2 (d :: Nat) (d :: Nat) :: (~>) Nat Baz) where+ sing+ = (singFun1 @(BazSym2 (d :: Nat) (d :: Nat)))+ ((SBaz (sing @d)) (sing @d))
− tests/compile-and-dump/Singletons/BadBoundedDeriving.ghc86.template
@@ -1,6 +0,0 @@--Singletons/BadBoundedDeriving.hs:0:0: error:- Can't derive Bounded instance for Foo_0 a_1.- |-5 | $(singletons [d|- | ^^^^^^^^^^^^^^...
+ tests/compile-and-dump/Singletons/BadBoundedDeriving.ghc88.template view
@@ -0,0 +1,6 @@++Singletons/BadBoundedDeriving.hs:0:0: error:+ Can't derive Bounded instance for Foo_0 a_1.+ |+5 | $(singletons [d|+ | ^^^^^^^^^^^^^^...
− tests/compile-and-dump/Singletons/BadEnumDeriving.ghc86.template
@@ -1,6 +0,0 @@--Singletons/BadEnumDeriving.hs:0:0: error:- Can't derive Enum instance for Foo_0 a_1.- |-5 | $(singletons [d|- | ^^^^^^^^^^^^^^...
+ tests/compile-and-dump/Singletons/BadEnumDeriving.ghc88.template view
@@ -0,0 +1,6 @@++Singletons/BadEnumDeriving.hs:0:0: error:+ Can't derive Enum instance for Foo_0 a_1.+ |+5 | $(singletons [d|+ | ^^^^^^^^^^^^^^...
− tests/compile-and-dump/Singletons/BoundedDeriving.ghc86.template
@@ -1,249 +0,0 @@-Singletons/BoundedDeriving.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Foo1- = Foo1- deriving Bounded- data Foo2- = A | B | C | D | E- deriving Bounded- data Foo3 a- = Foo3 a- deriving Bounded- data Foo4 (a :: Type) (b :: Type)- = Foo41 | Foo42- deriving Bounded- data Pair- = Pair Bool Bool- deriving Bounded |]- ======>- data Foo1- = Foo1- deriving Bounded- data Foo2- = A | B | C | D | E- deriving Bounded- data Foo3 a- = Foo3 a- deriving Bounded- data Foo4 (a :: Type) (b :: Type)- = Foo41 | Foo42- deriving Bounded- data Pair- = Pair Bool Bool- deriving Bounded- type Foo1Sym0 = Foo1- type ASym0 = A- type BSym0 = B- type CSym0 = C- type DSym0 = D- type ESym0 = E- type Foo3Sym1 (t0123456789876543210 :: a0123456789876543210) =- Foo3 t0123456789876543210- instance SuppressUnusedWarnings Foo3Sym0 where- suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())- data Foo3Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 (Foo3 a0123456789876543210)- where- Foo3Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>- Foo3Sym0 t0123456789876543210- type instance Apply Foo3Sym0 t0123456789876543210 = Foo3 t0123456789876543210- type Foo41Sym0 = Foo41- type Foo42Sym0 = Foo42- type PairSym2 (t0123456789876543210 :: Bool) (t0123456789876543210 :: Bool) =- Pair t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (PairSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) PairSym1KindInference) ())- data PairSym1 (t0123456789876543210 :: Bool) :: (~>) Bool Pair- where- PairSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (PairSym1 t0123456789876543210) arg) (PairSym2 t0123456789876543210 arg) =>- PairSym1 t0123456789876543210 t0123456789876543210- type instance Apply (PairSym1 t0123456789876543210) t0123456789876543210 = Pair t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings PairSym0 where- suppressUnusedWarnings = snd (((,) PairSym0KindInference) ())- data PairSym0 :: (~>) Bool ((~>) Bool Pair)- where- PairSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply PairSym0 arg) (PairSym1 arg) =>- PairSym0 t0123456789876543210- type instance Apply PairSym0 t0123456789876543210 = PairSym1 t0123456789876543210- type family MinBound_0123456789876543210 :: Foo1 where- MinBound_0123456789876543210 = Foo1Sym0- type MinBound_0123456789876543210Sym0 =- MinBound_0123456789876543210- type family MaxBound_0123456789876543210 :: Foo1 where- MaxBound_0123456789876543210 = Foo1Sym0- type MaxBound_0123456789876543210Sym0 =- MaxBound_0123456789876543210- instance PBounded Foo1 where- type MinBound = MinBound_0123456789876543210Sym0- type MaxBound = MaxBound_0123456789876543210Sym0- type family MinBound_0123456789876543210 :: Foo2 where- MinBound_0123456789876543210 = ASym0- type MinBound_0123456789876543210Sym0 =- MinBound_0123456789876543210- type family MaxBound_0123456789876543210 :: Foo2 where- MaxBound_0123456789876543210 = ESym0- type MaxBound_0123456789876543210Sym0 =- MaxBound_0123456789876543210- instance PBounded Foo2 where- type MinBound = MinBound_0123456789876543210Sym0- type MaxBound = MaxBound_0123456789876543210Sym0- type family MinBound_0123456789876543210 :: Foo3 a where- MinBound_0123456789876543210 = Apply Foo3Sym0 MinBoundSym0- type MinBound_0123456789876543210Sym0 =- MinBound_0123456789876543210- type family MaxBound_0123456789876543210 :: Foo3 a where- MaxBound_0123456789876543210 = Apply Foo3Sym0 MaxBoundSym0- type MaxBound_0123456789876543210Sym0 =- MaxBound_0123456789876543210- instance PBounded (Foo3 a) where- type MinBound = MinBound_0123456789876543210Sym0- type MaxBound = MaxBound_0123456789876543210Sym0- type family MinBound_0123456789876543210 :: Foo4 a b where- MinBound_0123456789876543210 = Foo41Sym0- type MinBound_0123456789876543210Sym0 =- MinBound_0123456789876543210- type family MaxBound_0123456789876543210 :: Foo4 a b where- MaxBound_0123456789876543210 = Foo42Sym0- type MaxBound_0123456789876543210Sym0 =- MaxBound_0123456789876543210- instance PBounded (Foo4 a b) where- type MinBound = MinBound_0123456789876543210Sym0- type MaxBound = MaxBound_0123456789876543210Sym0- type family MinBound_0123456789876543210 :: Pair where- MinBound_0123456789876543210 = Apply (Apply PairSym0 MinBoundSym0) MinBoundSym0- type MinBound_0123456789876543210Sym0 =- MinBound_0123456789876543210- type family MaxBound_0123456789876543210 :: Pair where- MaxBound_0123456789876543210 = Apply (Apply PairSym0 MaxBoundSym0) MaxBoundSym0- type MaxBound_0123456789876543210Sym0 =- MaxBound_0123456789876543210- instance PBounded Pair where- type MinBound = MinBound_0123456789876543210Sym0- type MaxBound = MaxBound_0123456789876543210Sym0- data instance Sing :: Foo1 -> Type where SFoo1 :: Sing Foo1- type SFoo1 = (Sing :: Foo1 -> Type)- instance SingKind Foo1 where- type Demote Foo1 = Foo1- fromSing SFoo1 = Foo1- toSing Foo1 = SomeSing SFoo1- data instance Sing :: Foo2 -> Type- where- SA :: Sing A- SB :: Sing B- SC :: Sing C- SD :: Sing D- SE :: Sing E- type SFoo2 = (Sing :: Foo2 -> Type)- instance SingKind Foo2 where- type Demote Foo2 = Foo2- fromSing SA = A- fromSing SB = B- fromSing SC = C- fromSing SD = D- fromSing SE = E- toSing A = SomeSing SA- toSing B = SomeSing SB- toSing C = SomeSing SC- toSing D = SomeSing SD- toSing E = SomeSing SE- data instance Sing :: Foo3 a -> Type- where SFoo3 :: forall a (n :: a). (Sing (n :: a)) -> Sing (Foo3 n)- type SFoo3 = (Sing :: Foo3 a -> Type)- instance SingKind a => SingKind (Foo3 a) where- type Demote (Foo3 a) = Foo3 (Demote a)- fromSing (SFoo3 b) = Foo3 (fromSing b)- toSing (Foo3 (b :: Demote a))- = case toSing b :: SomeSing a of {- SomeSing c -> SomeSing (SFoo3 c) }- data instance Sing :: Foo4 a b -> Type- where- SFoo41 :: Sing Foo41- SFoo42 :: Sing Foo42- type SFoo4 = (Sing :: Foo4 a b -> Type)- instance (SingKind a, SingKind b) => SingKind (Foo4 a b) where- type Demote (Foo4 a b) = Foo4 (Demote a) (Demote b)- fromSing SFoo41 = Foo41- fromSing SFoo42 = Foo42- toSing Foo41 = SomeSing SFoo41- toSing Foo42 = SomeSing SFoo42- data instance Sing :: Pair -> Type- where- SPair :: forall (n :: Bool) (n :: Bool).- (Sing (n :: Bool)) -> (Sing (n :: Bool)) -> Sing (Pair n n)- type SPair = (Sing :: Pair -> Type)- instance SingKind Pair where- type Demote Pair = Pair- fromSing (SPair b b) = (Pair (fromSing b)) (fromSing b)- toSing (Pair (b :: Demote Bool) (b :: Demote Bool))- = case- ((,) (toSing b :: SomeSing Bool)) (toSing b :: SomeSing Bool)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c) }- instance SBounded Foo1 where- sMinBound :: Sing (MinBoundSym0 :: Foo1)- sMaxBound :: Sing (MaxBoundSym0 :: Foo1)- sMinBound = SFoo1- sMaxBound = SFoo1- instance SBounded Foo2 where- sMinBound :: Sing (MinBoundSym0 :: Foo2)- sMaxBound :: Sing (MaxBoundSym0 :: Foo2)- sMinBound = SA- sMaxBound = SE- instance SBounded a => SBounded (Foo3 a) where- sMinBound :: Sing (MinBoundSym0 :: Foo3 a)- sMaxBound :: Sing (MaxBoundSym0 :: Foo3 a)- sMinBound = (applySing ((singFun1 @Foo3Sym0) SFoo3)) sMinBound- sMaxBound = (applySing ((singFun1 @Foo3Sym0) SFoo3)) sMaxBound- instance SBounded (Foo4 a b) where- sMinBound :: Sing (MinBoundSym0 :: Foo4 a b)- sMaxBound :: Sing (MaxBoundSym0 :: Foo4 a b)- sMinBound = SFoo41- sMaxBound = SFoo42- instance SBounded Bool => SBounded Pair where- sMinBound :: Sing (MinBoundSym0 :: Pair)- sMaxBound :: Sing (MaxBoundSym0 :: Pair)- sMinBound- = (applySing ((applySing ((singFun2 @PairSym0) SPair)) sMinBound))- sMinBound- sMaxBound- = (applySing ((applySing ((singFun2 @PairSym0) SPair)) sMaxBound))- sMaxBound- instance SingI Foo1 where- sing = SFoo1- instance SingI A where- sing = SA- instance SingI B where- sing = SB- instance SingI C where- sing = SC- instance SingI D where- sing = SD- instance SingI E where- sing = SE- instance SingI n => SingI (Foo3 (n :: a)) where- sing = SFoo3 sing- instance SingI (Foo3Sym0 :: (~>) a (Foo3 a)) where- sing = (singFun1 @Foo3Sym0) SFoo3- instance SingI (TyCon1 Foo3 :: (~>) a (Foo3 a)) where- sing = (singFun1 @(TyCon1 Foo3)) SFoo3- instance SingI Foo41 where- sing = SFoo41- instance SingI Foo42 where- sing = SFoo42- instance (SingI n, SingI n) =>- SingI (Pair (n :: Bool) (n :: Bool)) where- sing = (SPair sing) sing- instance SingI (PairSym0 :: (~>) Bool ((~>) Bool Pair)) where- sing = (singFun2 @PairSym0) SPair- instance SingI (TyCon2 Pair :: (~>) Bool ((~>) Bool Pair)) where- sing = (singFun2 @(TyCon2 Pair)) SPair- instance SingI d =>- SingI (PairSym1 (d :: Bool) :: (~>) Bool Pair) where- sing = (singFun1 @(PairSym1 (d :: Bool))) (SPair (sing @d))- instance SingI d =>- SingI (TyCon1 (Pair (d :: Bool)) :: (~>) Bool Pair) where- sing = (singFun1 @(TyCon1 (Pair (d :: Bool)))) (SPair (sing @d))
+ tests/compile-and-dump/Singletons/BoundedDeriving.ghc88.template view
@@ -0,0 +1,242 @@+Singletons/BoundedDeriving.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Foo1+ = Foo1+ deriving Bounded+ data Foo2+ = A | B | C | D | E+ deriving Bounded+ data Foo3 a+ = Foo3 a+ deriving Bounded+ data Foo4 (a :: Type) (b :: Type)+ = Foo41 | Foo42+ deriving Bounded+ data Pair+ = Pair Bool Bool+ deriving Bounded |]+ ======>+ data Foo1+ = Foo1+ deriving Bounded+ data Foo2+ = A | B | C | D | E+ deriving Bounded+ data Foo3 a+ = Foo3 a+ deriving Bounded+ data Foo4 (a :: Type) (b :: Type)+ = Foo41 | Foo42+ deriving Bounded+ data Pair+ = Pair Bool Bool+ deriving Bounded+ type Foo1Sym0 = Foo1+ type ASym0 = A+ type BSym0 = B+ type CSym0 = C+ type DSym0 = D+ type ESym0 = E+ type Foo3Sym1 (t0123456789876543210 :: a0123456789876543210) =+ Foo3 t0123456789876543210+ instance SuppressUnusedWarnings Foo3Sym0 where+ suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())+ data Foo3Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 (Foo3 a0123456789876543210)+ where+ Foo3Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>+ Foo3Sym0 t0123456789876543210+ type instance Apply Foo3Sym0 t0123456789876543210 = Foo3 t0123456789876543210+ type Foo41Sym0 = Foo41+ type Foo42Sym0 = Foo42+ type PairSym2 (t0123456789876543210 :: Bool) (t0123456789876543210 :: Bool) =+ Pair t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (PairSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) PairSym1KindInference) ())+ data PairSym1 (t0123456789876543210 :: Bool) :: (~>) Bool Pair+ where+ PairSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (PairSym1 t0123456789876543210) arg) (PairSym2 t0123456789876543210 arg) =>+ PairSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (PairSym1 t0123456789876543210) t0123456789876543210 = Pair t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings PairSym0 where+ suppressUnusedWarnings = snd (((,) PairSym0KindInference) ())+ data PairSym0 :: (~>) Bool ((~>) Bool Pair)+ where+ PairSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply PairSym0 arg) (PairSym1 arg) =>+ PairSym0 t0123456789876543210+ type instance Apply PairSym0 t0123456789876543210 = PairSym1 t0123456789876543210+ type family MinBound_0123456789876543210 :: Foo1 where+ MinBound_0123456789876543210 = Foo1Sym0+ type MinBound_0123456789876543210Sym0 =+ MinBound_0123456789876543210+ type family MaxBound_0123456789876543210 :: Foo1 where+ MaxBound_0123456789876543210 = Foo1Sym0+ type MaxBound_0123456789876543210Sym0 =+ MaxBound_0123456789876543210+ instance PBounded Foo1 where+ type MinBound = MinBound_0123456789876543210Sym0+ type MaxBound = MaxBound_0123456789876543210Sym0+ type family MinBound_0123456789876543210 :: Foo2 where+ MinBound_0123456789876543210 = ASym0+ type MinBound_0123456789876543210Sym0 =+ MinBound_0123456789876543210+ type family MaxBound_0123456789876543210 :: Foo2 where+ MaxBound_0123456789876543210 = ESym0+ type MaxBound_0123456789876543210Sym0 =+ MaxBound_0123456789876543210+ instance PBounded Foo2 where+ type MinBound = MinBound_0123456789876543210Sym0+ type MaxBound = MaxBound_0123456789876543210Sym0+ type family MinBound_0123456789876543210 :: Foo3 a where+ MinBound_0123456789876543210 = Apply Foo3Sym0 MinBoundSym0+ type MinBound_0123456789876543210Sym0 =+ MinBound_0123456789876543210+ type family MaxBound_0123456789876543210 :: Foo3 a where+ MaxBound_0123456789876543210 = Apply Foo3Sym0 MaxBoundSym0+ type MaxBound_0123456789876543210Sym0 =+ MaxBound_0123456789876543210+ instance PBounded (Foo3 a) where+ type MinBound = MinBound_0123456789876543210Sym0+ type MaxBound = MaxBound_0123456789876543210Sym0+ type family MinBound_0123456789876543210 :: Foo4 a b where+ MinBound_0123456789876543210 = Foo41Sym0+ type MinBound_0123456789876543210Sym0 =+ MinBound_0123456789876543210+ type family MaxBound_0123456789876543210 :: Foo4 a b where+ MaxBound_0123456789876543210 = Foo42Sym0+ type MaxBound_0123456789876543210Sym0 =+ MaxBound_0123456789876543210+ instance PBounded (Foo4 a b) where+ type MinBound = MinBound_0123456789876543210Sym0+ type MaxBound = MaxBound_0123456789876543210Sym0+ type family MinBound_0123456789876543210 :: Pair where+ MinBound_0123456789876543210 = Apply (Apply PairSym0 MinBoundSym0) MinBoundSym0+ type MinBound_0123456789876543210Sym0 =+ MinBound_0123456789876543210+ type family MaxBound_0123456789876543210 :: Pair where+ MaxBound_0123456789876543210 = Apply (Apply PairSym0 MaxBoundSym0) MaxBoundSym0+ type MaxBound_0123456789876543210Sym0 =+ MaxBound_0123456789876543210+ instance PBounded Pair where+ type MinBound = MinBound_0123456789876543210Sym0+ type MaxBound = MaxBound_0123456789876543210Sym0+ data SFoo1 :: Foo1 -> Type where SFoo1 :: SFoo1 Foo1+ type instance Sing @Foo1 = SFoo1+ instance SingKind Foo1 where+ type Demote Foo1 = Foo1+ fromSing SFoo1 = Foo1+ toSing Foo1 = SomeSing SFoo1+ data SFoo2 :: Foo2 -> Type+ where+ SA :: SFoo2 A+ SB :: SFoo2 B+ SC :: SFoo2 C+ SD :: SFoo2 D+ SE :: SFoo2 E+ type instance Sing @Foo2 = SFoo2+ instance SingKind Foo2 where+ type Demote Foo2 = Foo2+ fromSing SA = A+ fromSing SB = B+ fromSing SC = C+ fromSing SD = D+ fromSing SE = E+ toSing A = SomeSing SA+ toSing B = SomeSing SB+ toSing C = SomeSing SC+ toSing D = SomeSing SD+ toSing E = SomeSing SE+ data SFoo3 :: forall a. Foo3 a -> Type+ where SFoo3 :: forall a (n :: a). (Sing (n :: a)) -> SFoo3 (Foo3 n)+ type instance Sing @(Foo3 a) = SFoo3+ instance SingKind a => SingKind (Foo3 a) where+ type Demote (Foo3 a) = Foo3 (Demote a)+ fromSing (SFoo3 b) = Foo3 (fromSing b)+ toSing (Foo3 (b :: Demote a))+ = case toSing b :: SomeSing a of {+ SomeSing c -> SomeSing (SFoo3 c) }+ data SFoo4 :: forall a b. Foo4 a b -> Type+ where+ SFoo41 :: SFoo4 Foo41+ SFoo42 :: SFoo4 Foo42+ type instance Sing @(Foo4 a b) = SFoo4+ instance (SingKind a, SingKind b) => SingKind (Foo4 a b) where+ type Demote (Foo4 a b) = Foo4 (Demote a) (Demote b)+ fromSing SFoo41 = Foo41+ fromSing SFoo42 = Foo42+ toSing Foo41 = SomeSing SFoo41+ toSing Foo42 = SomeSing SFoo42+ data SPair :: Pair -> Type+ where+ SPair :: forall (n :: Bool) (n :: Bool).+ (Sing (n :: Bool)) -> (Sing (n :: Bool)) -> SPair (Pair n n)+ type instance Sing @Pair = SPair+ instance SingKind Pair where+ type Demote Pair = Pair+ fromSing (SPair b b) = (Pair (fromSing b)) (fromSing b)+ toSing (Pair (b :: Demote Bool) (b :: Demote Bool))+ = case+ ((,) (toSing b :: SomeSing Bool)) (toSing b :: SomeSing Bool)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c) }+ instance SBounded Foo1 where+ sMinBound :: Sing (MinBoundSym0 :: Foo1)+ sMaxBound :: Sing (MaxBoundSym0 :: Foo1)+ sMinBound = SFoo1+ sMaxBound = SFoo1+ instance SBounded Foo2 where+ sMinBound :: Sing (MinBoundSym0 :: Foo2)+ sMaxBound :: Sing (MaxBoundSym0 :: Foo2)+ sMinBound = SA+ sMaxBound = SE+ instance SBounded a => SBounded (Foo3 a) where+ sMinBound :: Sing (MinBoundSym0 :: Foo3 a)+ sMaxBound :: Sing (MaxBoundSym0 :: Foo3 a)+ sMinBound = (applySing ((singFun1 @Foo3Sym0) SFoo3)) sMinBound+ sMaxBound = (applySing ((singFun1 @Foo3Sym0) SFoo3)) sMaxBound+ instance SBounded (Foo4 a b) where+ sMinBound :: Sing (MinBoundSym0 :: Foo4 a b)+ sMaxBound :: Sing (MaxBoundSym0 :: Foo4 a b)+ sMinBound = SFoo41+ sMaxBound = SFoo42+ instance SBounded Bool => SBounded Pair where+ sMinBound :: Sing (MinBoundSym0 :: Pair)+ sMaxBound :: Sing (MaxBoundSym0 :: Pair)+ sMinBound+ = (applySing ((applySing ((singFun2 @PairSym0) SPair)) sMinBound))+ sMinBound+ sMaxBound+ = (applySing ((applySing ((singFun2 @PairSym0) SPair)) sMaxBound))+ sMaxBound+ instance SingI Foo1 where+ sing = SFoo1+ instance SingI A where+ sing = SA+ instance SingI B where+ sing = SB+ instance SingI C where+ sing = SC+ instance SingI D where+ sing = SD+ instance SingI E where+ sing = SE+ instance SingI n => SingI (Foo3 (n :: a)) where+ sing = SFoo3 sing+ instance SingI (Foo3Sym0 :: (~>) a (Foo3 a)) where+ sing = (singFun1 @Foo3Sym0) SFoo3+ instance SingI Foo41 where+ sing = SFoo41+ instance SingI Foo42 where+ sing = SFoo42+ instance (SingI n, SingI n) =>+ SingI (Pair (n :: Bool) (n :: Bool)) where+ sing = (SPair sing) sing+ instance SingI (PairSym0 :: (~>) Bool ((~>) Bool Pair)) where+ sing = (singFun2 @PairSym0) SPair+ instance SingI d =>+ SingI (PairSym1 (d :: Bool) :: (~>) Bool Pair) where+ sing = (singFun1 @(PairSym1 (d :: Bool))) (SPair (sing @d))
− tests/compile-and-dump/Singletons/BoxUnBox.ghc86.template
@@ -1,54 +0,0 @@-Singletons/BoxUnBox.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| unBox :: Box a -> a- unBox (FBox a) = a- - data Box a = FBox a |]- ======>- data Box a = FBox a- unBox :: Box a -> a- unBox (FBox a) = a- type FBoxSym1 (t0123456789876543210 :: a0123456789876543210) =- FBox t0123456789876543210- instance SuppressUnusedWarnings FBoxSym0 where- suppressUnusedWarnings = snd (((,) FBoxSym0KindInference) ())- data FBoxSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 (Box a0123456789876543210)- where- FBoxSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply FBoxSym0 arg) (FBoxSym1 arg) =>- FBoxSym0 t0123456789876543210- type instance Apply FBoxSym0 t0123456789876543210 = FBox t0123456789876543210- type UnBoxSym1 (a0123456789876543210 :: Box a0123456789876543210) =- UnBox a0123456789876543210- instance SuppressUnusedWarnings UnBoxSym0 where- suppressUnusedWarnings = snd (((,) UnBoxSym0KindInference) ())- data UnBoxSym0 :: forall a0123456789876543210.- (~>) (Box a0123456789876543210) a0123456789876543210- where- UnBoxSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply UnBoxSym0 arg) (UnBoxSym1 arg) =>- UnBoxSym0 a0123456789876543210- type instance Apply UnBoxSym0 a0123456789876543210 = UnBox a0123456789876543210- type family UnBox (a :: Box a) :: a where- UnBox (FBox a) = a- sUnBox ::- forall a (t :: Box a). Sing t -> Sing (Apply UnBoxSym0 t :: a)- sUnBox (SFBox (sA :: Sing a)) = sA- instance SingI (UnBoxSym0 :: (~>) (Box a) a) where- sing = (singFun1 @UnBoxSym0) sUnBox- data instance Sing :: Box a -> GHC.Types.Type- where SFBox :: forall a (n :: a). (Sing (n :: a)) -> Sing (FBox n)- type SBox = (Sing :: Box a -> GHC.Types.Type)- instance SingKind a => SingKind (Box a) where- type Demote (Box a) = Box (Demote a)- fromSing (SFBox b) = FBox (fromSing b)- toSing (FBox (b :: Demote a))- = case toSing b :: SomeSing a of {- SomeSing c -> SomeSing (SFBox c) }- instance SingI n => SingI (FBox (n :: a)) where- sing = SFBox sing- instance SingI (FBoxSym0 :: (~>) a (Box a)) where- sing = (singFun1 @FBoxSym0) SFBox- instance SingI (TyCon1 FBox :: (~>) a (Box a)) where- sing = (singFun1 @(TyCon1 FBox)) SFBox
+ tests/compile-and-dump/Singletons/BoxUnBox.ghc88.template view
@@ -0,0 +1,52 @@+Singletons/BoxUnBox.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| unBox :: Box a -> a+ unBox (FBox a) = a+ + data Box a = FBox a |]+ ======>+ data Box a = FBox a+ unBox :: Box a -> a+ unBox (FBox a) = a+ type FBoxSym1 (t0123456789876543210 :: a0123456789876543210) =+ FBox t0123456789876543210+ instance SuppressUnusedWarnings FBoxSym0 where+ suppressUnusedWarnings = snd (((,) FBoxSym0KindInference) ())+ data FBoxSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 (Box a0123456789876543210)+ where+ FBoxSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply FBoxSym0 arg) (FBoxSym1 arg) =>+ FBoxSym0 t0123456789876543210+ type instance Apply FBoxSym0 t0123456789876543210 = FBox t0123456789876543210+ type UnBoxSym1 (a0123456789876543210 :: Box a0123456789876543210) =+ UnBox a0123456789876543210+ instance SuppressUnusedWarnings UnBoxSym0 where+ suppressUnusedWarnings = snd (((,) UnBoxSym0KindInference) ())+ data UnBoxSym0 :: forall a0123456789876543210.+ (~>) (Box a0123456789876543210) a0123456789876543210+ where+ UnBoxSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply UnBoxSym0 arg) (UnBoxSym1 arg) =>+ UnBoxSym0 a0123456789876543210+ type instance Apply UnBoxSym0 a0123456789876543210 = UnBox a0123456789876543210+ type family UnBox (a :: Box a) :: a where+ UnBox (FBox a) = a+ sUnBox ::+ forall a (t :: Box a). Sing t -> Sing (Apply UnBoxSym0 t :: a)+ sUnBox (SFBox (sA :: Sing a)) = sA+ instance SingI (UnBoxSym0 :: (~>) (Box a) a) where+ sing = (singFun1 @UnBoxSym0) sUnBox+ data SBox :: forall a. Box a -> GHC.Types.Type+ where SFBox :: forall a (n :: a). (Sing (n :: a)) -> SBox (FBox n)+ type instance Sing @(Box a) = SBox+ instance SingKind a => SingKind (Box a) where+ type Demote (Box a) = Box (Demote a)+ fromSing (SFBox b) = FBox (fromSing b)+ toSing (FBox (b :: Demote a))+ = case toSing b :: SomeSing a of {+ SomeSing c -> SomeSing (SFBox c) }+ instance SingI n => SingI (FBox (n :: a)) where+ sing = SFBox sing+ instance SingI (FBoxSym0 :: (~>) a (Box a)) where+ sing = (singFun1 @FBoxSym0) SFBox
− tests/compile-and-dump/Singletons/CaseExpressions.ghc86.template
@@ -1,319 +0,0 @@-Singletons/CaseExpressions.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo1 :: a -> Maybe a -> a- foo1 d x- = case x of- Just y -> y- Nothing -> d- foo2 :: a -> Maybe a -> a- foo2 d _ = case (Just d) of { Just y -> y }- foo3 :: a -> b -> a- foo3 a b = case (a, b) of { (p, _) -> p }- foo4 :: forall a. a -> a- foo4 x- = case x of {- y -> let- z :: a- z = y- in z }- foo5 :: a -> a- foo5 x = case x of { y -> (\ _ -> x) y } |]- ======>- foo1 :: a -> Maybe a -> a- foo1 d x- = case x of- Just y -> y- Nothing -> d- foo2 :: a -> Maybe a -> a- foo2 d _ = case Just d of { Just y -> y }- foo3 :: a -> b -> a- foo3 a b = case (a, b) of { (p, _) -> p }- foo4 :: forall a. a -> a- foo4 x- = case x of {- y -> let- z :: a- z = y- in z }- foo5 :: a -> a- foo5 x = case x of { y -> (\ _ -> x) y }- type family Case_0123456789876543210 x y arg_0123456789876543210 t where- Case_0123456789876543210 x y arg_0123456789876543210 _ = x- type family Lambda_0123456789876543210 x y t where- Lambda_0123456789876543210 x y arg_0123456789876543210 = Case_0123456789876543210 x y arg_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210- y0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- y0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Case_0123456789876543210 x t where- Case_0123456789876543210 x y = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) y- type Let0123456789876543210ZSym2 x0123456789876543210 y0123456789876543210 =- Let0123456789876543210Z x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210ZSym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210ZSym1KindInference) ())- data Let0123456789876543210ZSym1 x0123456789876543210 y0123456789876543210- where- Let0123456789876543210ZSym1KindInference :: forall x0123456789876543210- y0123456789876543210- arg. SameKind (Apply (Let0123456789876543210ZSym1 x0123456789876543210) arg) (Let0123456789876543210ZSym2 x0123456789876543210 arg) =>- Let0123456789876543210ZSym1 x0123456789876543210 y0123456789876543210- type instance Apply (Let0123456789876543210ZSym1 x0123456789876543210) y0123456789876543210 = Let0123456789876543210Z x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210ZSym0KindInference) ())- data Let0123456789876543210ZSym0 x0123456789876543210- where- Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>- Let0123456789876543210ZSym0 x0123456789876543210- type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210ZSym1 x0123456789876543210- type family Let0123456789876543210Z x y :: a where- Let0123456789876543210Z x y = y- type family Case_0123456789876543210 x t where- Case_0123456789876543210 x y = Let0123456789876543210ZSym2 x y- type Let0123456789876543210Scrutinee_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 =- Let0123456789876543210Scrutinee_0123456789876543210 a0123456789876543210 b0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference :: forall a0123456789876543210- b0123456789876543210- arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym2 a0123456789876543210 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210- type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210) b0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 a0123456789876543210 b0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym0 a0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym0 a0123456789876543210- type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 a0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210- type family Let0123456789876543210Scrutinee_0123456789876543210 a b where- Let0123456789876543210Scrutinee_0123456789876543210 a b = Apply (Apply Tuple2Sym0 a) b- type family Case_0123456789876543210 a b t where- Case_0123456789876543210 a b '(p, _) = p- type Let0123456789876543210Scrutinee_0123456789876543210Sym1 d0123456789876543210 =- Let0123456789876543210Scrutinee_0123456789876543210 d0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym0 d0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall d0123456789876543210- arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym0 d0123456789876543210- type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 d0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 d0123456789876543210- type family Let0123456789876543210Scrutinee_0123456789876543210 d where- Let0123456789876543210Scrutinee_0123456789876543210 d = Apply JustSym0 d- type family Case_0123456789876543210 d t where- Case_0123456789876543210 d ( 'Just y) = y- type family Case_0123456789876543210 d x t where- Case_0123456789876543210 d x ( 'Just y) = y- Case_0123456789876543210 d x 'Nothing = d- type Foo5Sym1 (a0123456789876543210 :: a0123456789876543210) =- Foo5 a0123456789876543210- instance SuppressUnusedWarnings Foo5Sym0 where- suppressUnusedWarnings = snd (((,) Foo5Sym0KindInference) ())- data Foo5Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- Foo5Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo5Sym0 arg) (Foo5Sym1 arg) =>- Foo5Sym0 a0123456789876543210- type instance Apply Foo5Sym0 a0123456789876543210 = Foo5 a0123456789876543210- type Foo4Sym1 (a0123456789876543210 :: a0123456789876543210) =- Foo4 a0123456789876543210- instance SuppressUnusedWarnings Foo4Sym0 where- suppressUnusedWarnings = snd (((,) Foo4Sym0KindInference) ())- data Foo4Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- Foo4Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo4Sym0 arg) (Foo4Sym1 arg) =>- Foo4Sym0 a0123456789876543210- type instance Apply Foo4Sym0 a0123456789876543210 = Foo4 a0123456789876543210- type Foo3Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Foo3 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo3Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo3Sym1KindInference) ())- data Foo3Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 a0123456789876543210- where- Foo3Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo3Sym1 a0123456789876543210) arg) (Foo3Sym2 a0123456789876543210 arg) =>- Foo3Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo3Sym1 a0123456789876543210) a0123456789876543210 = Foo3 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo3Sym0 where- suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())- data Foo3Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)- where- Foo3Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>- Foo3Sym0 a0123456789876543210- type instance Apply Foo3Sym0 a0123456789876543210 = Foo3Sym1 a0123456789876543210- type Foo2Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: Maybe a0123456789876543210) =- Foo2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo2Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo2Sym1KindInference) ())- data Foo2Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) (Maybe a0123456789876543210) a0123456789876543210- where- Foo2Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo2Sym1 a0123456789876543210) arg) (Foo2Sym2 a0123456789876543210 arg) =>- Foo2Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo2Sym1 a0123456789876543210) a0123456789876543210 = Foo2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo2Sym0 where- suppressUnusedWarnings = snd (((,) Foo2Sym0KindInference) ())- data Foo2Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) a0123456789876543210)- where- Foo2Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo2Sym0 arg) (Foo2Sym1 arg) =>- Foo2Sym0 a0123456789876543210- type instance Apply Foo2Sym0 a0123456789876543210 = Foo2Sym1 a0123456789876543210- type Foo1Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: Maybe a0123456789876543210) =- Foo1 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo1Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo1Sym1KindInference) ())- data Foo1Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) (Maybe a0123456789876543210) a0123456789876543210- where- Foo1Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo1Sym1 a0123456789876543210) arg) (Foo1Sym2 a0123456789876543210 arg) =>- Foo1Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo1Sym1 a0123456789876543210) a0123456789876543210 = Foo1 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo1Sym0 where- suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())- data Foo1Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) a0123456789876543210)- where- Foo1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>- Foo1Sym0 a0123456789876543210- type instance Apply Foo1Sym0 a0123456789876543210 = Foo1Sym1 a0123456789876543210- type family Foo5 (a :: a) :: a where- Foo5 x = Case_0123456789876543210 x x- type family Foo4 (a :: a) :: a where- Foo4 x = Case_0123456789876543210 x x- type family Foo3 (a :: a) (a :: b) :: a where- Foo3 a b = Case_0123456789876543210 a b (Let0123456789876543210Scrutinee_0123456789876543210Sym2 a b)- type family Foo2 (a :: a) (a :: Maybe a) :: a where- Foo2 d _ = Case_0123456789876543210 d (Let0123456789876543210Scrutinee_0123456789876543210Sym1 d)- type family Foo1 (a :: a) (a :: Maybe a) :: a where- Foo1 d x = Case_0123456789876543210 d x x- sFoo5 :: forall a (t :: a). Sing t -> Sing (Apply Foo5Sym0 t :: a)- sFoo4 :: forall a (t :: a). Sing t -> Sing (Apply Foo4Sym0 t :: a)- sFoo3 ::- forall a b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply Foo3Sym0 t) t :: a)- sFoo2 ::- forall a (t :: a) (t :: Maybe a).- Sing t -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)- sFoo1 ::- forall a (t :: a) (t :: Maybe a).- Sing t -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)- sFoo5 (sX :: Sing x)- = (case sX of {- (sY :: Sing y)- -> (applySing- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of { _ -> sX }) ::- Sing (Case_0123456789876543210 x y arg_0123456789876543210 arg_0123456789876543210) })))- sY }) ::- Sing (Case_0123456789876543210 x x :: a)- sFoo4 (sX :: Sing x)- = (case sX of {- (sY :: Sing y)- -> let- sZ :: Sing (Let0123456789876543210ZSym2 x y :: a)- sZ = sY- in sZ }) ::- Sing (Case_0123456789876543210 x x :: a)- sFoo3 (sA :: Sing a) (sB :: Sing b)- = let- sScrutinee_0123456789876543210 ::- Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym2 a b)- sScrutinee_0123456789876543210- = (applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sA)) sB- in (case sScrutinee_0123456789876543210 of {- STuple2 (sP :: Sing p) _ -> sP }) ::- Sing (Case_0123456789876543210 a b (Let0123456789876543210Scrutinee_0123456789876543210Sym2 a b) :: a)- sFoo2 (sD :: Sing d) _- = let- sScrutinee_0123456789876543210 ::- Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym1 d)- sScrutinee_0123456789876543210- = (applySing ((singFun1 @JustSym0) SJust)) sD- in (case sScrutinee_0123456789876543210 of {- SJust (sY :: Sing y) -> sY }) ::- Sing (Case_0123456789876543210 d (Let0123456789876543210Scrutinee_0123456789876543210Sym1 d) :: a)- sFoo1 (sD :: Sing d) (sX :: Sing x)- = (case sX of- SJust (sY :: Sing y) -> sY- SNothing -> sD) ::- Sing (Case_0123456789876543210 d x x :: a)- instance SingI (Foo5Sym0 :: (~>) a a) where- sing = (singFun1 @Foo5Sym0) sFoo5- instance SingI (Foo4Sym0 :: (~>) a a) where- sing = (singFun1 @Foo4Sym0) sFoo4- instance SingI (Foo3Sym0 :: (~>) a ((~>) b a)) where- sing = (singFun2 @Foo3Sym0) sFoo3- instance SingI d => SingI (Foo3Sym1 (d :: a) :: (~>) b a) where- sing = (singFun1 @(Foo3Sym1 (d :: a))) (sFoo3 (sing @d))- instance SingI (Foo2Sym0 :: (~>) a ((~>) (Maybe a) a)) where- sing = (singFun2 @Foo2Sym0) sFoo2- instance SingI d =>- SingI (Foo2Sym1 (d :: a) :: (~>) (Maybe a) a) where- sing = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 (sing @d))- instance SingI (Foo1Sym0 :: (~>) a ((~>) (Maybe a) a)) where- sing = (singFun2 @Foo1Sym0) sFoo1- instance SingI d =>- SingI (Foo1Sym1 (d :: a) :: (~>) (Maybe a) a) where- sing = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 (sing @d))
+ tests/compile-and-dump/Singletons/CaseExpressions.ghc88.template view
@@ -0,0 +1,324 @@+Singletons/CaseExpressions.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo1 :: a -> Maybe a -> a+ foo1 d x+ = case x of+ Just y -> y+ Nothing -> d+ foo2 :: a -> Maybe a -> a+ foo2 d _ = case (Just d) of { Just y -> y }+ foo3 :: a -> b -> a+ foo3 a b = case (a, b) of { (p, _) -> p }+ foo4 :: forall a. a -> a+ foo4 x+ = case x of {+ y -> let+ z :: a+ z = y+ in z }+ foo5 :: a -> a+ foo5 x = case x of { y -> (\ _ -> x) y } |]+ ======>+ foo1 :: a -> Maybe a -> a+ foo1 d x+ = case x of+ Just y -> y+ Nothing -> d+ foo2 :: a -> Maybe a -> a+ foo2 d _ = case Just d of { Just y -> y }+ foo3 :: a -> b -> a+ foo3 a b = case (a, b) of { (p, _) -> p }+ foo4 :: forall a. a -> a+ foo4 x+ = case x of {+ y -> let+ z :: a+ z = y+ in z }+ foo5 :: a -> a+ foo5 x = case x of { y -> (\ _ -> x) y }+ type family Case_0123456789876543210 arg_0123456789876543210 y x t where+ Case_0123456789876543210 arg_0123456789876543210 y x _ = x+ type family Lambda_0123456789876543210 y x t where+ Lambda_0123456789876543210 y x arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 y x arg_0123456789876543210+ type Lambda_0123456789876543210Sym3 y0123456789876543210 x0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall y0123456789876543210+ x0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) arg) (Lambda_0123456789876543210Sym3 y0123456789876543210 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 y0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 y0123456789876543210 x0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall y0123456789876543210+ x0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 y0123456789876543210) arg) (Lambda_0123456789876543210Sym2 y0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 y0123456789876543210 x0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 y0123456789876543210) x0123456789876543210 = Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 y0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall y0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 y0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 y0123456789876543210 = Lambda_0123456789876543210Sym1 y0123456789876543210+ type family Case_0123456789876543210 x t where+ Case_0123456789876543210 x y = Apply (Apply (Apply Lambda_0123456789876543210Sym0 y) x) y+ type Let0123456789876543210ZSym2 y0123456789876543210 x0123456789876543210 =+ Let0123456789876543210Z y0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210ZSym1 y0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210ZSym1KindInference) ())+ data Let0123456789876543210ZSym1 y0123456789876543210 x0123456789876543210+ where+ Let0123456789876543210ZSym1KindInference :: forall y0123456789876543210+ x0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210ZSym1 y0123456789876543210) arg) (Let0123456789876543210ZSym2 y0123456789876543210 arg) =>+ Let0123456789876543210ZSym1 y0123456789876543210 x0123456789876543210+ type instance Apply (Let0123456789876543210ZSym1 y0123456789876543210) x0123456789876543210 = Let0123456789876543210Z y0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210ZSym0KindInference) ())+ data Let0123456789876543210ZSym0 y0123456789876543210+ where+ Let0123456789876543210ZSym0KindInference :: forall y0123456789876543210+ arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>+ Let0123456789876543210ZSym0 y0123456789876543210+ type instance Apply Let0123456789876543210ZSym0 y0123456789876543210 = Let0123456789876543210ZSym1 y0123456789876543210+ type family Let0123456789876543210Z y x :: a where+ Let0123456789876543210Z y x = y+ type family Case_0123456789876543210 x t where+ Case_0123456789876543210 x y = Let0123456789876543210ZSym2 y x+ type Let0123456789876543210Scrutinee_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 =+ Let0123456789876543210Scrutinee_0123456789876543210 a0123456789876543210 b0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ b0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210) arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210+ type instance Apply (Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210) b0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 a0123456789876543210 b0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym0 a0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 a0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210Sym1 a0123456789876543210+ type family Let0123456789876543210Scrutinee_0123456789876543210 a b where+ Let0123456789876543210Scrutinee_0123456789876543210 a b = Apply (Apply Tuple2Sym0 a) b+ type family Case_0123456789876543210 a b t where+ Case_0123456789876543210 a b '(p, _) = p+ type Let0123456789876543210Scrutinee_0123456789876543210Sym1 d0123456789876543210 =+ Let0123456789876543210Scrutinee_0123456789876543210 d0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym0 d0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall d0123456789876543210+ arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym0 d0123456789876543210+ type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 d0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 d0123456789876543210+ type family Let0123456789876543210Scrutinee_0123456789876543210 d where+ Let0123456789876543210Scrutinee_0123456789876543210 d = Apply JustSym0 d+ type family Case_0123456789876543210 d t where+ Case_0123456789876543210 d ('Just y) = y+ type family Case_0123456789876543210 d x t where+ Case_0123456789876543210 d x ('Just y) = y+ Case_0123456789876543210 d x 'Nothing = d+ type Foo5Sym1 (a0123456789876543210 :: a0123456789876543210) =+ Foo5 a0123456789876543210+ instance SuppressUnusedWarnings Foo5Sym0 where+ suppressUnusedWarnings = snd (((,) Foo5Sym0KindInference) ())+ data Foo5Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ Foo5Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo5Sym0 arg) (Foo5Sym1 arg) =>+ Foo5Sym0 a0123456789876543210+ type instance Apply Foo5Sym0 a0123456789876543210 = Foo5 a0123456789876543210+ type Foo4Sym1 (a0123456789876543210 :: a0123456789876543210) =+ Foo4 a0123456789876543210+ instance SuppressUnusedWarnings Foo4Sym0 where+ suppressUnusedWarnings = snd (((,) Foo4Sym0KindInference) ())+ data Foo4Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ Foo4Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo4Sym0 arg) (Foo4Sym1 arg) =>+ Foo4Sym0 a0123456789876543210+ type instance Apply Foo4Sym0 a0123456789876543210 = Foo4 a0123456789876543210+ type Foo3Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Foo3 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo3Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo3Sym1KindInference) ())+ data Foo3Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ Foo3Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo3Sym1 a0123456789876543210) arg) (Foo3Sym2 a0123456789876543210 arg) =>+ Foo3Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo3Sym1 a0123456789876543210) a0123456789876543210 = Foo3 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo3Sym0 where+ suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())+ data Foo3Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)+ where+ Foo3Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>+ Foo3Sym0 a0123456789876543210+ type instance Apply Foo3Sym0 a0123456789876543210 = Foo3Sym1 a0123456789876543210+ type Foo2Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: Maybe a0123456789876543210) =+ Foo2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo2Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo2Sym1KindInference) ())+ data Foo2Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) (Maybe a0123456789876543210) a0123456789876543210+ where+ Foo2Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo2Sym1 a0123456789876543210) arg) (Foo2Sym2 a0123456789876543210 arg) =>+ Foo2Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo2Sym1 a0123456789876543210) a0123456789876543210 = Foo2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo2Sym0 where+ suppressUnusedWarnings = snd (((,) Foo2Sym0KindInference) ())+ data Foo2Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) a0123456789876543210)+ where+ Foo2Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo2Sym0 arg) (Foo2Sym1 arg) =>+ Foo2Sym0 a0123456789876543210+ type instance Apply Foo2Sym0 a0123456789876543210 = Foo2Sym1 a0123456789876543210+ type Foo1Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: Maybe a0123456789876543210) =+ Foo1 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo1Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo1Sym1KindInference) ())+ data Foo1Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) (Maybe a0123456789876543210) a0123456789876543210+ where+ Foo1Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo1Sym1 a0123456789876543210) arg) (Foo1Sym2 a0123456789876543210 arg) =>+ Foo1Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo1Sym1 a0123456789876543210) a0123456789876543210 = Foo1 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo1Sym0 where+ suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())+ data Foo1Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) a0123456789876543210)+ where+ Foo1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>+ Foo1Sym0 a0123456789876543210+ type instance Apply Foo1Sym0 a0123456789876543210 = Foo1Sym1 a0123456789876543210+ type family Foo5 (a :: a) :: a where+ Foo5 x = Case_0123456789876543210 x x+ type family Foo4 (a :: a) :: a where+ Foo4 x = Case_0123456789876543210 x x+ type family Foo3 (a :: a) (a :: b) :: a where+ Foo3 a b = Case_0123456789876543210 a b (Let0123456789876543210Scrutinee_0123456789876543210Sym2 a b)+ type family Foo2 (a :: a) (a :: Maybe a) :: a where+ Foo2 d _ = Case_0123456789876543210 d (Let0123456789876543210Scrutinee_0123456789876543210Sym1 d)+ type family Foo1 (a :: a) (a :: Maybe a) :: a where+ Foo1 d x = Case_0123456789876543210 d x x+ sFoo5 :: forall a (t :: a). Sing t -> Sing (Apply Foo5Sym0 t :: a)+ sFoo4 :: forall a (t :: a). Sing t -> Sing (Apply Foo4Sym0 t :: a)+ sFoo3 ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Foo3Sym0 t) t :: a)+ sFoo2 ::+ forall a (t :: a) (t :: Maybe a).+ Sing t -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)+ sFoo1 ::+ forall a (t :: a) (t :: Maybe a).+ Sing t -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)+ sFoo5 (sX :: Sing x)+ = (id @(Sing (Case_0123456789876543210 x x :: a)))+ (case sX of {+ (sY :: Sing y)+ -> (applySing+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 y) x))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 y x arg_0123456789876543210)))+ (case sArg_0123456789876543210 of { _ -> sX }) })))+ sY })+ sFoo4 (sX :: Sing x)+ = (id @(Sing (Case_0123456789876543210 x x :: a)))+ (case sX of {+ (sY :: Sing y)+ -> let+ sZ :: Sing (Let0123456789876543210ZSym2 y x :: a)+ sZ = sY+ in sZ })+ sFoo3 (sA :: Sing a) (sB :: Sing b)+ = let+ sScrutinee_0123456789876543210 ::+ Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym2 a b)+ sScrutinee_0123456789876543210+ = (applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sA)) sB+ in+ (id+ @(Sing (Case_0123456789876543210 a b (Let0123456789876543210Scrutinee_0123456789876543210Sym2 a b) :: a)))+ (case sScrutinee_0123456789876543210 of {+ STuple2 (sP :: Sing p) _ -> sP })+ sFoo2 (sD :: Sing d) _+ = let+ sScrutinee_0123456789876543210 ::+ Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym1 d)+ sScrutinee_0123456789876543210+ = (applySing ((singFun1 @JustSym0) SJust)) sD+ in+ (id+ @(Sing (Case_0123456789876543210 d (Let0123456789876543210Scrutinee_0123456789876543210Sym1 d) :: a)))+ (case sScrutinee_0123456789876543210 of {+ SJust (sY :: Sing y) -> sY })+ sFoo1 (sD :: Sing d) (sX :: Sing x)+ = (id @(Sing (Case_0123456789876543210 d x x :: a)))+ (case sX of+ SJust (sY :: Sing y) -> sY+ SNothing -> sD)+ instance SingI (Foo5Sym0 :: (~>) a a) where+ sing = (singFun1 @Foo5Sym0) sFoo5+ instance SingI (Foo4Sym0 :: (~>) a a) where+ sing = (singFun1 @Foo4Sym0) sFoo4+ instance SingI (Foo3Sym0 :: (~>) a ((~>) b a)) where+ sing = (singFun2 @Foo3Sym0) sFoo3+ instance SingI d => SingI (Foo3Sym1 (d :: a) :: (~>) b a) where+ sing = (singFun1 @(Foo3Sym1 (d :: a))) (sFoo3 (sing @d))+ instance SingI (Foo2Sym0 :: (~>) a ((~>) (Maybe a) a)) where+ sing = (singFun2 @Foo2Sym0) sFoo2+ instance SingI d =>+ SingI (Foo2Sym1 (d :: a) :: (~>) (Maybe a) a) where+ sing = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 (sing @d))+ instance SingI (Foo1Sym0 :: (~>) a ((~>) (Maybe a) a)) where+ sing = (singFun2 @Foo1Sym0) sFoo1+ instance SingI d =>+ SingI (Foo1Sym1 (d :: a) :: (~>) (Maybe a) a) where+ sing = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 (sing @d))
− tests/compile-and-dump/Singletons/Classes.ghc86.template
@@ -1,577 +0,0 @@-Singletons/Classes.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| infix 4 <=>- - const :: a -> b -> a- const x _ = x- fooCompare :: Foo -> Foo -> Ordering- fooCompare A A = EQ- fooCompare A B = LT- fooCompare B B = GT- fooCompare B A = EQ- - class MyOrd a where- mycompare :: a -> a -> Ordering- (<=>) :: a -> a -> Ordering- (<=>) = mycompare- infix 4 <=>- data Foo = A | B- data Foo2 = F | G- - instance MyOrd () where- mycompare _ = const EQ- instance MyOrd Nat where- Zero `mycompare` Zero = EQ- Zero `mycompare` (Succ _) = LT- (Succ _) `mycompare` Zero = GT- (Succ n) `mycompare` (Succ m) = m `mycompare` n- instance MyOrd Foo where- mycompare = fooCompare- instance Eq Foo2 where- F == F = True- G == G = True- F == G = False- G == F = False |]- ======>- const :: a -> b -> a- const x _ = x- class MyOrd a where- mycompare :: a -> a -> Ordering- (<=>) :: a -> a -> Ordering- (<=>) = mycompare- infix 4 <=>- instance MyOrd Nat where- mycompare Zero Zero = EQ- mycompare Zero (Succ _) = LT- mycompare (Succ _) Zero = GT- mycompare (Succ n) (Succ m) = (m `mycompare` n)- instance MyOrd () where- mycompare _ = const EQ- data Foo = A | B- fooCompare :: Foo -> Foo -> Ordering- fooCompare A A = EQ- fooCompare A B = LT- fooCompare B B = GT- fooCompare B A = EQ- instance MyOrd Foo where- mycompare = fooCompare- data Foo2 = F | G- instance Eq Foo2 where- (==) F F = True- (==) G G = True- (==) F G = False- (==) G F = False- type ASym0 = A- type BSym0 = B- type FSym0 = F- type GSym0 = G- type FooCompareSym2 (a0123456789876543210 :: Foo) (a0123456789876543210 :: Foo) =- FooCompare a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (FooCompareSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) FooCompareSym1KindInference) ())- data FooCompareSym1 (a0123456789876543210 :: Foo) :: (~>) Foo Ordering- where- FooCompareSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (FooCompareSym1 a0123456789876543210) arg) (FooCompareSym2 a0123456789876543210 arg) =>- FooCompareSym1 a0123456789876543210 a0123456789876543210- type instance Apply (FooCompareSym1 a0123456789876543210) a0123456789876543210 = FooCompare a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FooCompareSym0 where- suppressUnusedWarnings = snd (((,) FooCompareSym0KindInference) ())- data FooCompareSym0 :: (~>) Foo ((~>) Foo Ordering)- where- FooCompareSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FooCompareSym0 arg) (FooCompareSym1 arg) =>- FooCompareSym0 a0123456789876543210- type instance Apply FooCompareSym0 a0123456789876543210 = FooCompareSym1 a0123456789876543210- type ConstSym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Const a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ConstSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) ConstSym1KindInference) ())- data ConstSym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 a0123456789876543210- where- ConstSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ConstSym1 a0123456789876543210) arg) (ConstSym2 a0123456789876543210 arg) =>- ConstSym1 a0123456789876543210 a0123456789876543210- type instance Apply (ConstSym1 a0123456789876543210) a0123456789876543210 = Const a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ConstSym0 where- suppressUnusedWarnings = snd (((,) ConstSym0KindInference) ())- data ConstSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)- where- ConstSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ConstSym0 arg) (ConstSym1 arg) =>- ConstSym0 a0123456789876543210- type instance Apply ConstSym0 a0123456789876543210 = ConstSym1 a0123456789876543210- type family FooCompare (a :: Foo) (a :: Foo) :: Ordering where- FooCompare A A = EQSym0- FooCompare A B = LTSym0- FooCompare B B = GTSym0- FooCompare B A = EQSym0- type family Const (a :: a) (a :: b) :: a where- Const x _ = x- type MycompareSym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: a0123456789876543210) =- Mycompare arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (MycompareSym1 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) MycompareSym1KindInference) ())- data MycompareSym1 (arg0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 Ordering- where- MycompareSym1KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (MycompareSym1 arg0123456789876543210) arg) (MycompareSym2 arg0123456789876543210 arg) =>- MycompareSym1 arg0123456789876543210 arg0123456789876543210- type instance Apply (MycompareSym1 arg0123456789876543210) arg0123456789876543210 = Mycompare arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings MycompareSym0 where- suppressUnusedWarnings = snd (((,) MycompareSym0KindInference) ())- data MycompareSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) a0123456789876543210 Ordering)- where- MycompareSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply MycompareSym0 arg) (MycompareSym1 arg) =>- MycompareSym0 arg0123456789876543210- type instance Apply MycompareSym0 arg0123456789876543210 = MycompareSym1 arg0123456789876543210- type (<=>@#@$$$) (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: a0123456789876543210) =- (<=>) arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings ((<=>@#@$$) arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:<=>@#@$$###)) ())- data (<=>@#@$$) (arg0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 Ordering- where- (:<=>@#@$$###) :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply ((<=>@#@$$) arg0123456789876543210) arg) ((<=>@#@$$$) arg0123456789876543210 arg) =>- (<=>@#@$$) arg0123456789876543210 arg0123456789876543210- type instance Apply ((<=>@#@$$) arg0123456789876543210) arg0123456789876543210 = (<=>) arg0123456789876543210 arg0123456789876543210- infix 4 <=>@#@$$- instance SuppressUnusedWarnings (<=>@#@$) where- suppressUnusedWarnings = snd (((,) (:<=>@#@$###)) ())- data (<=>@#@$) :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) a0123456789876543210 Ordering)- where- (:<=>@#@$###) :: forall arg0123456789876543210- arg. SameKind (Apply (<=>@#@$) arg) ((<=>@#@$$) arg) =>- (<=>@#@$) arg0123456789876543210- type instance Apply (<=>@#@$) arg0123456789876543210 = (<=>@#@$$) arg0123456789876543210- infix 4 <=>@#@$- type family TFHelper_0123456789876543210 (a :: a) (a :: a) :: Ordering where- TFHelper_0123456789876543210 a_0123456789876543210 a_0123456789876543210 = Apply (Apply MycompareSym0 a_0123456789876543210) a_0123456789876543210- type TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: a0123456789876543210) =- TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())- data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 Ordering- where- TFHelper_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>- TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())- data TFHelper_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) a0123456789876543210 Ordering)- where- TFHelper_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>- TFHelper_0123456789876543210Sym0 a0123456789876543210- type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210- class PMyOrd (a :: GHC.Types.Type) where- type Mycompare (arg :: a) (arg :: a) :: Ordering- type (<=>) (arg :: a) (arg :: a) :: Ordering- type (<=>) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a- type family Mycompare_0123456789876543210 (a :: Nat) (a :: Nat) :: Ordering where- Mycompare_0123456789876543210 'Zero 'Zero = EQSym0- Mycompare_0123456789876543210 'Zero ( 'Succ _) = LTSym0- Mycompare_0123456789876543210 ( 'Succ _) 'Zero = GTSym0- Mycompare_0123456789876543210 ( 'Succ n) ( 'Succ m) = Apply (Apply MycompareSym0 m) n- type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())- data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Nat Ordering- where- Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())- data Mycompare_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Ordering)- where- Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>- Mycompare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210- instance PMyOrd Nat where- type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a- type family Mycompare_0123456789876543210 (a :: ()) (a :: ()) :: Ordering where- Mycompare_0123456789876543210 _ a_0123456789876543210 = Apply (Apply ConstSym0 EQSym0) a_0123456789876543210- type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: ()) (a0123456789876543210 :: ()) =- Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())- data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: ()) :: (~>) () Ordering- where- Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())- data Mycompare_0123456789876543210Sym0 :: (~>) () ((~>) () Ordering)- where- Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>- Mycompare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210- instance PMyOrd () where- type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a- type family Mycompare_0123456789876543210 (a :: Foo) (a :: Foo) :: Ordering where- Mycompare_0123456789876543210 a_0123456789876543210 a_0123456789876543210 = Apply (Apply FooCompareSym0 a_0123456789876543210) a_0123456789876543210- type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: Foo) (a0123456789876543210 :: Foo) =- Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())- data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: Foo) :: (~>) Foo Ordering- where- Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())- data Mycompare_0123456789876543210Sym0 :: (~>) Foo ((~>) Foo Ordering)- where- Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>- Mycompare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210- instance PMyOrd Foo where- type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a- type family TFHelper_0123456789876543210 (a :: Foo2) (a :: Foo2) :: Bool where- TFHelper_0123456789876543210 F F = TrueSym0- TFHelper_0123456789876543210 G G = TrueSym0- TFHelper_0123456789876543210 F G = FalseSym0- TFHelper_0123456789876543210 G F = FalseSym0- type TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: Foo2) (a0123456789876543210 :: Foo2) =- TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())- data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: Foo2) :: (~>) Foo2 Bool- where- TFHelper_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>- TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())- data TFHelper_0123456789876543210Sym0 :: (~>) Foo2 ((~>) Foo2 Bool)- where- TFHelper_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>- TFHelper_0123456789876543210Sym0 a0123456789876543210- type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210- instance PEq Foo2 where- type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a- infix 4 %<=>- sFooCompare ::- forall (t :: Foo) (t :: Foo).- Sing t- -> Sing t -> Sing (Apply (Apply FooCompareSym0 t) t :: Ordering)- sConst ::- forall a b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply ConstSym0 t) t :: a)- sFooCompare SA SA = SEQ- sFooCompare SA SB = SLT- sFooCompare SB SB = SGT- sFooCompare SB SA = SEQ- sConst (sX :: Sing x) _ = sX- instance SingI (FooCompareSym0 :: (~>) Foo ((~>) Foo Ordering)) where- sing = (singFun2 @FooCompareSym0) sFooCompare- instance SingI d =>- SingI (FooCompareSym1 (d :: Foo) :: (~>) Foo Ordering) where- sing- = (singFun1 @(FooCompareSym1 (d :: Foo))) (sFooCompare (sing @d))- instance SingI (ConstSym0 :: (~>) a ((~>) b a)) where- sing = (singFun2 @ConstSym0) sConst- instance SingI d => SingI (ConstSym1 (d :: a) :: (~>) b a) where- sing = (singFun1 @(ConstSym1 (d :: a))) (sConst (sing @d))- data instance Sing :: Foo -> GHC.Types.Type- where- SA :: Sing A- SB :: Sing B- type SFoo = (Sing :: Foo -> GHC.Types.Type)- instance SingKind Foo where- type Demote Foo = Foo- fromSing SA = A- fromSing SB = B- toSing A = SomeSing SA- toSing B = SomeSing SB- data instance Sing :: Foo2 -> GHC.Types.Type- where- SF :: Sing F- SG :: Sing G- type SFoo2 = (Sing :: Foo2 -> GHC.Types.Type)- instance SingKind Foo2 where- type Demote Foo2 = Foo2- fromSing SF = F- fromSing SG = G- toSing F = SomeSing SF- toSing G = SomeSing SG- class SMyOrd a where- sMycompare ::- forall (t :: a) (t :: a).- Sing t- -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)- (%<=>) ::- forall (t :: a) (t :: a).- Sing t -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)- default (%<=>) ::- forall (t :: a) (t :: a).- (Apply (Apply (<=>@#@$) t) t :: Ordering)- ~ Apply (Apply TFHelper_0123456789876543210Sym0 t) t =>- Sing t -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)- (%<=>)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @MycompareSym0) sMycompare))- sA_0123456789876543210))- sA_0123456789876543210- instance SMyOrd Nat where- sMycompare ::- forall (t :: Nat) (t :: Nat).- Sing t- -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)- sMycompare SZero SZero = SEQ- sMycompare SZero (SSucc _) = SLT- sMycompare (SSucc _) SZero = SGT- sMycompare (SSucc (sN :: Sing n)) (SSucc (sM :: Sing m))- = (applySing- ((applySing ((singFun2 @MycompareSym0) sMycompare)) sM))- sN- instance SMyOrd () where- sMycompare ::- forall (t :: ()) (t :: ()).- Sing t- -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)- sMycompare _ (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing ((applySing ((singFun2 @ConstSym0) sConst)) SEQ))- sA_0123456789876543210- instance SMyOrd Foo where- sMycompare ::- forall (t :: Foo) (t :: Foo).- Sing t- -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)- sMycompare- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @FooCompareSym0) sFooCompare))- sA_0123456789876543210))- sA_0123456789876543210- instance SEq Foo2 where- (%==) ::- forall (a :: Foo2) (b :: Foo2). Sing a -> Sing b -> Sing ((==) a b)- (%==) SF SF = STrue- (%==) SG SG = STrue- (%==) SF SG = SFalse- (%==) SG SF = SFalse- instance SingI A where- sing = SA- instance SingI B where- sing = SB- instance SingI F where- sing = SF- instance SingI G where- sing = SG- instance SMyOrd a =>- SingI (MycompareSym0 :: (~>) a ((~>) a Ordering)) where- sing = (singFun2 @MycompareSym0) sMycompare- instance (SMyOrd a, SingI d) =>- SingI (MycompareSym1 (d :: a) :: (~>) a Ordering) where- sing = (singFun1 @(MycompareSym1 (d :: a))) (sMycompare (sing @d))- instance SMyOrd a =>- SingI ((<=>@#@$) :: (~>) a ((~>) a Ordering)) where- sing = (singFun2 @(<=>@#@$)) (%<=>)- instance (SMyOrd a, SingI d) =>- SingI ((<=>@#@$$) (d :: a) :: (~>) a Ordering) where- sing = (singFun1 @((<=>@#@$$) (d :: a))) ((%<=>) (sing @d))-Singletons/Classes.hs:(0,0)-(0,0): Splicing declarations- promote- [d| instance Ord Foo2 where- F `compare` F = EQ- F `compare` _ = LT- _ `compare` _ = GT- instance MyOrd Foo2 where- F `mycompare` F = EQ- F `mycompare` _ = LT- _ `mycompare` _ = GT |]- ======>- instance MyOrd Foo2 where- mycompare F F = EQ- mycompare F _ = LT- mycompare _ _ = GT- instance Ord Foo2 where- compare F F = EQ- compare F _ = LT- compare _ _ = GT- type family Mycompare_0123456789876543210 (a :: Foo2) (a :: Foo2) :: Ordering where- Mycompare_0123456789876543210 'F 'F = EQSym0- Mycompare_0123456789876543210 'F _ = LTSym0- Mycompare_0123456789876543210 _ _ = GTSym0- type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: Foo2) (a0123456789876543210 :: Foo2) =- Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())- data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: Foo2) :: (~>) Foo2 Ordering- where- Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())- data Mycompare_0123456789876543210Sym0 :: (~>) Foo2 ((~>) Foo2 Ordering)- where- Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>- Mycompare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210- instance PMyOrd Foo2 where- type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a- type family Compare_0123456789876543210 (a :: Foo2) (a :: Foo2) :: Ordering where- Compare_0123456789876543210 'F 'F = EQSym0- Compare_0123456789876543210 'F _ = LTSym0- Compare_0123456789876543210 _ _ = GTSym0- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Foo2) (a0123456789876543210 :: Foo2) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Foo2) :: (~>) Foo2 Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: (~>) Foo2 ((~>) Foo2 Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd Foo2 where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a-Singletons/Classes.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Nat' = Zero' | Succ' Nat'- - instance MyOrd Nat' where- Zero' `mycompare` Zero' = EQ- Zero' `mycompare` (Succ' _) = LT- (Succ' _) `mycompare` Zero' = GT- (Succ' n) `mycompare` (Succ' m) = m `mycompare` n |]- ======>- data Nat' = Zero' | Succ' Nat'- instance MyOrd Nat' where- mycompare Zero' Zero' = EQ- mycompare Zero' (Succ' _) = LT- mycompare (Succ' _) Zero' = GT- mycompare (Succ' n) (Succ' m) = (m `mycompare` n)- type Zero'Sym0 = Zero'- type Succ'Sym1 (t0123456789876543210 :: Nat') =- Succ' t0123456789876543210- instance SuppressUnusedWarnings Succ'Sym0 where- suppressUnusedWarnings = snd (((,) Succ'Sym0KindInference) ())- data Succ'Sym0 :: (~>) Nat' Nat'- where- Succ'Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply Succ'Sym0 arg) (Succ'Sym1 arg) =>- Succ'Sym0 t0123456789876543210- type instance Apply Succ'Sym0 t0123456789876543210 = Succ' t0123456789876543210- type family Mycompare_0123456789876543210 (a :: Nat') (a :: Nat') :: Ordering where- Mycompare_0123456789876543210 Zero' Zero' = EQSym0- Mycompare_0123456789876543210 Zero' (Succ' _) = LTSym0- Mycompare_0123456789876543210 (Succ' _) Zero' = GTSym0- Mycompare_0123456789876543210 (Succ' n) (Succ' m) = Apply (Apply MycompareSym0 m) n- type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: Nat') (a0123456789876543210 :: Nat') =- Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())- data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: Nat') :: (~>) Nat' Ordering- where- Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())- data Mycompare_0123456789876543210Sym0 :: (~>) Nat' ((~>) Nat' Ordering)- where- Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>- Mycompare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210- instance PMyOrd Nat' where- type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a- data instance Sing :: Nat' -> GHC.Types.Type- where- SZero' :: Sing Zero'- SSucc' :: forall (n :: Nat'). (Sing (n :: Nat')) -> Sing (Succ' n)- type SNat' = (Sing :: Nat' -> GHC.Types.Type)- instance SingKind Nat' where- type Demote Nat' = Nat'- fromSing SZero' = Zero'- fromSing (SSucc' b) = Succ' (fromSing b)- toSing Zero' = SomeSing SZero'- toSing (Succ' (b :: Demote Nat'))- = case toSing b :: SomeSing Nat' of {- SomeSing c -> SomeSing (SSucc' c) }- instance SMyOrd Nat' where- sMycompare ::- forall (t :: Nat') (t :: Nat').- Sing t- -> Sing t- -> Sing (Apply (Apply (MycompareSym0 :: TyFun Nat' ((~>) Nat' Ordering)- -> GHC.Types.Type) t) t)- sMycompare SZero' SZero' = SEQ- sMycompare SZero' (SSucc' _) = SLT- sMycompare (SSucc' _) SZero' = SGT- sMycompare (SSucc' (sN :: Sing n)) (SSucc' (sM :: Sing m))- = (applySing- ((applySing ((singFun2 @MycompareSym0) sMycompare)) sM))- sN- instance SingI Zero' where- sing = SZero'- instance SingI n => SingI (Succ' (n :: Nat')) where- sing = SSucc' sing- instance SingI (Succ'Sym0 :: (~>) Nat' Nat') where- sing = (singFun1 @Succ'Sym0) SSucc'- instance SingI (TyCon1 Succ' :: (~>) Nat' Nat') where- sing = (singFun1 @(TyCon1 Succ')) SSucc'
+ tests/compile-and-dump/Singletons/Classes.ghc88.template view
@@ -0,0 +1,575 @@+Singletons/Classes.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| infix 4 <=>+ + const :: a -> b -> a+ const x _ = x+ fooCompare :: Foo -> Foo -> Ordering+ fooCompare A A = EQ+ fooCompare A B = LT+ fooCompare B B = GT+ fooCompare B A = EQ+ + class MyOrd a where+ mycompare :: a -> a -> Ordering+ (<=>) :: a -> a -> Ordering+ (<=>) = mycompare+ infix 4 <=>+ data Foo = A | B+ data Foo2 = F | G+ + instance MyOrd () where+ mycompare _ = const EQ+ instance MyOrd Nat where+ Zero `mycompare` Zero = EQ+ Zero `mycompare` (Succ _) = LT+ (Succ _) `mycompare` Zero = GT+ (Succ n) `mycompare` (Succ m) = m `mycompare` n+ instance MyOrd Foo where+ mycompare = fooCompare+ instance Eq Foo2 where+ F == F = True+ G == G = True+ F == G = False+ G == F = False |]+ ======>+ const :: a -> b -> a+ const x _ = x+ class MyOrd a where+ mycompare :: a -> a -> Ordering+ (<=>) :: a -> a -> Ordering+ (<=>) = mycompare+ infix 4 <=>+ instance MyOrd Nat where+ mycompare Zero Zero = EQ+ mycompare Zero (Succ _) = LT+ mycompare (Succ _) Zero = GT+ mycompare (Succ n) (Succ m) = (m `mycompare` n)+ instance MyOrd () where+ mycompare _ = const EQ+ data Foo = A | B+ fooCompare :: Foo -> Foo -> Ordering+ fooCompare A A = EQ+ fooCompare A B = LT+ fooCompare B B = GT+ fooCompare B A = EQ+ instance MyOrd Foo where+ mycompare = fooCompare+ data Foo2 = F | G+ instance Eq Foo2 where+ (==) F F = True+ (==) G G = True+ (==) F G = False+ (==) G F = False+ type ASym0 = A+ type BSym0 = B+ type FSym0 = F+ type GSym0 = G+ type FooCompareSym2 (a0123456789876543210 :: Foo) (a0123456789876543210 :: Foo) =+ FooCompare a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (FooCompareSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FooCompareSym1KindInference) ())+ data FooCompareSym1 (a0123456789876543210 :: Foo) :: (~>) Foo Ordering+ where+ FooCompareSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (FooCompareSym1 a0123456789876543210) arg) (FooCompareSym2 a0123456789876543210 arg) =>+ FooCompareSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (FooCompareSym1 a0123456789876543210) a0123456789876543210 = FooCompare a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FooCompareSym0 where+ suppressUnusedWarnings = snd (((,) FooCompareSym0KindInference) ())+ data FooCompareSym0 :: (~>) Foo ((~>) Foo Ordering)+ where+ FooCompareSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FooCompareSym0 arg) (FooCompareSym1 arg) =>+ FooCompareSym0 a0123456789876543210+ type instance Apply FooCompareSym0 a0123456789876543210 = FooCompareSym1 a0123456789876543210+ type ConstSym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Const a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ConstSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ConstSym1KindInference) ())+ data ConstSym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ ConstSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ConstSym1 a0123456789876543210) arg) (ConstSym2 a0123456789876543210 arg) =>+ ConstSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ConstSym1 a0123456789876543210) a0123456789876543210 = Const a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ConstSym0 where+ suppressUnusedWarnings = snd (((,) ConstSym0KindInference) ())+ data ConstSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)+ where+ ConstSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ConstSym0 arg) (ConstSym1 arg) =>+ ConstSym0 a0123456789876543210+ type instance Apply ConstSym0 a0123456789876543210 = ConstSym1 a0123456789876543210+ type family FooCompare (a :: Foo) (a :: Foo) :: Ordering where+ FooCompare A A = EQSym0+ FooCompare A B = LTSym0+ FooCompare B B = GTSym0+ FooCompare B A = EQSym0+ type family Const (a :: a) (a :: b) :: a where+ Const x _ = x+ type MycompareSym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: a0123456789876543210) =+ Mycompare arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (MycompareSym1 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MycompareSym1KindInference) ())+ data MycompareSym1 (arg0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 Ordering+ where+ MycompareSym1KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (MycompareSym1 arg0123456789876543210) arg) (MycompareSym2 arg0123456789876543210 arg) =>+ MycompareSym1 arg0123456789876543210 arg0123456789876543210+ type instance Apply (MycompareSym1 arg0123456789876543210) arg0123456789876543210 = Mycompare arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings MycompareSym0 where+ suppressUnusedWarnings = snd (((,) MycompareSym0KindInference) ())+ data MycompareSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) a0123456789876543210 Ordering)+ where+ MycompareSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply MycompareSym0 arg) (MycompareSym1 arg) =>+ MycompareSym0 arg0123456789876543210+ type instance Apply MycompareSym0 arg0123456789876543210 = MycompareSym1 arg0123456789876543210+ type (<=>@#@$$$) (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: a0123456789876543210) =+ (<=>) arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings ((<=>@#@$$) arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:<=>@#@$$###)) ())+ data (<=>@#@$$) (arg0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 Ordering+ where+ (:<=>@#@$$###) :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply ((<=>@#@$$) arg0123456789876543210) arg) ((<=>@#@$$$) arg0123456789876543210 arg) =>+ (<=>@#@$$) arg0123456789876543210 arg0123456789876543210+ type instance Apply ((<=>@#@$$) arg0123456789876543210) arg0123456789876543210 = (<=>) arg0123456789876543210 arg0123456789876543210+ infix 4 <=>@#@$$+ instance SuppressUnusedWarnings (<=>@#@$) where+ suppressUnusedWarnings = snd (((,) (:<=>@#@$###)) ())+ data (<=>@#@$) :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) a0123456789876543210 Ordering)+ where+ (:<=>@#@$###) :: forall arg0123456789876543210+ arg. SameKind (Apply (<=>@#@$) arg) ((<=>@#@$$) arg) =>+ (<=>@#@$) arg0123456789876543210+ type instance Apply (<=>@#@$) arg0123456789876543210 = (<=>@#@$$) arg0123456789876543210+ infix 4 <=>@#@$+ type family TFHelper_0123456789876543210 (a :: a) (a :: a) :: Ordering where+ TFHelper_0123456789876543210 a_0123456789876543210 a_0123456789876543210 = Apply (Apply MycompareSym0 a_0123456789876543210) a_0123456789876543210+ type TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: a0123456789876543210) =+ TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())+ data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 Ordering+ where+ TFHelper_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>+ TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())+ data TFHelper_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) a0123456789876543210 Ordering)+ where+ TFHelper_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>+ TFHelper_0123456789876543210Sym0 a0123456789876543210+ type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210+ class PMyOrd (a :: GHC.Types.Type) where+ type Mycompare (arg :: a) (arg :: a) :: Ordering+ type (<=>) (arg :: a) (arg :: a) :: Ordering+ type (<=>) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a+ type family Mycompare_0123456789876543210 (a :: Nat) (a :: Nat) :: Ordering where+ Mycompare_0123456789876543210 'Zero 'Zero = EQSym0+ Mycompare_0123456789876543210 'Zero ('Succ _) = LTSym0+ Mycompare_0123456789876543210 ('Succ _) 'Zero = GTSym0+ Mycompare_0123456789876543210 ('Succ n) ('Succ m) = Apply (Apply MycompareSym0 m) n+ type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())+ data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Nat Ordering+ where+ Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())+ data Mycompare_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Ordering)+ where+ Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>+ Mycompare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210+ instance PMyOrd Nat where+ type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a+ type family Mycompare_0123456789876543210 (a :: ()) (a :: ()) :: Ordering where+ Mycompare_0123456789876543210 _ a_0123456789876543210 = Apply (Apply ConstSym0 EQSym0) a_0123456789876543210+ type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: ()) (a0123456789876543210 :: ()) =+ Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())+ data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: ()) :: (~>) () Ordering+ where+ Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())+ data Mycompare_0123456789876543210Sym0 :: (~>) () ((~>) () Ordering)+ where+ Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>+ Mycompare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210+ instance PMyOrd () where+ type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a+ type family Mycompare_0123456789876543210 (a :: Foo) (a :: Foo) :: Ordering where+ Mycompare_0123456789876543210 a_0123456789876543210 a_0123456789876543210 = Apply (Apply FooCompareSym0 a_0123456789876543210) a_0123456789876543210+ type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: Foo) (a0123456789876543210 :: Foo) =+ Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())+ data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: Foo) :: (~>) Foo Ordering+ where+ Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())+ data Mycompare_0123456789876543210Sym0 :: (~>) Foo ((~>) Foo Ordering)+ where+ Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>+ Mycompare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210+ instance PMyOrd Foo where+ type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a+ type family TFHelper_0123456789876543210 (a :: Foo2) (a :: Foo2) :: Bool where+ TFHelper_0123456789876543210 F F = TrueSym0+ TFHelper_0123456789876543210 G G = TrueSym0+ TFHelper_0123456789876543210 F G = FalseSym0+ TFHelper_0123456789876543210 G F = FalseSym0+ type TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: Foo2) (a0123456789876543210 :: Foo2) =+ TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())+ data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: Foo2) :: (~>) Foo2 Bool+ where+ TFHelper_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>+ TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())+ data TFHelper_0123456789876543210Sym0 :: (~>) Foo2 ((~>) Foo2 Bool)+ where+ TFHelper_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>+ TFHelper_0123456789876543210Sym0 a0123456789876543210+ type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210+ instance PEq Foo2 where+ type (==) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a+ infix 4 %<=>+ sFooCompare ::+ forall (t :: Foo) (t :: Foo).+ Sing t+ -> Sing t -> Sing (Apply (Apply FooCompareSym0 t) t :: Ordering)+ sConst ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply ConstSym0 t) t :: a)+ sFooCompare SA SA = SEQ+ sFooCompare SA SB = SLT+ sFooCompare SB SB = SGT+ sFooCompare SB SA = SEQ+ sConst (sX :: Sing x) _ = sX+ instance SingI (FooCompareSym0 :: (~>) Foo ((~>) Foo Ordering)) where+ sing = (singFun2 @FooCompareSym0) sFooCompare+ instance SingI d =>+ SingI (FooCompareSym1 (d :: Foo) :: (~>) Foo Ordering) where+ sing+ = (singFun1 @(FooCompareSym1 (d :: Foo))) (sFooCompare (sing @d))+ instance SingI (ConstSym0 :: (~>) a ((~>) b a)) where+ sing = (singFun2 @ConstSym0) sConst+ instance SingI d => SingI (ConstSym1 (d :: a) :: (~>) b a) where+ sing = (singFun1 @(ConstSym1 (d :: a))) (sConst (sing @d))+ data SFoo :: Foo -> GHC.Types.Type+ where+ SA :: SFoo A+ SB :: SFoo B+ type instance Sing @Foo = SFoo+ instance SingKind Foo where+ type Demote Foo = Foo+ fromSing SA = A+ fromSing SB = B+ toSing A = SomeSing SA+ toSing B = SomeSing SB+ data SFoo2 :: Foo2 -> GHC.Types.Type+ where+ SF :: SFoo2 F+ SG :: SFoo2 G+ type instance Sing @Foo2 = SFoo2+ instance SingKind Foo2 where+ type Demote Foo2 = Foo2+ fromSing SF = F+ fromSing SG = G+ toSing F = SomeSing SF+ toSing G = SomeSing SG+ class SMyOrd a where+ sMycompare ::+ forall (t :: a) (t :: a).+ Sing t+ -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)+ (%<=>) ::+ forall (t :: a) (t :: a).+ Sing t -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)+ default (%<=>) ::+ forall (t :: a) (t :: a).+ ((Apply (Apply (<=>@#@$) t) t :: Ordering)+ ~ Apply (Apply TFHelper_0123456789876543210Sym0 t) t) =>+ Sing t -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)+ (%<=>)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @MycompareSym0) sMycompare))+ sA_0123456789876543210))+ sA_0123456789876543210+ instance SMyOrd Nat where+ sMycompare ::+ forall (t :: Nat) (t :: Nat).+ Sing t+ -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)+ sMycompare SZero SZero = SEQ+ sMycompare SZero (SSucc _) = SLT+ sMycompare (SSucc _) SZero = SGT+ sMycompare (SSucc (sN :: Sing n)) (SSucc (sM :: Sing m))+ = (applySing+ ((applySing ((singFun2 @MycompareSym0) sMycompare)) sM))+ sN+ instance SMyOrd () where+ sMycompare ::+ forall (t :: ()) (t :: ()).+ Sing t+ -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)+ sMycompare _ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing ((applySing ((singFun2 @ConstSym0) sConst)) SEQ))+ sA_0123456789876543210+ instance SMyOrd Foo where+ sMycompare ::+ forall (t :: Foo) (t :: Foo).+ Sing t+ -> Sing t -> Sing (Apply (Apply MycompareSym0 t) t :: Ordering)+ sMycompare+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @FooCompareSym0) sFooCompare))+ sA_0123456789876543210))+ sA_0123456789876543210+ instance SEq Foo2 where+ (%==) ::+ forall (a :: Foo2) (b :: Foo2). Sing a -> Sing b -> Sing ((==) a b)+ (%==) SF SF = STrue+ (%==) SG SG = STrue+ (%==) SF SG = SFalse+ (%==) SG SF = SFalse+ instance SingI A where+ sing = SA+ instance SingI B where+ sing = SB+ instance SingI F where+ sing = SF+ instance SingI G where+ sing = SG+ instance SMyOrd a =>+ SingI (MycompareSym0 :: (~>) a ((~>) a Ordering)) where+ sing = (singFun2 @MycompareSym0) sMycompare+ instance (SMyOrd a, SingI d) =>+ SingI (MycompareSym1 (d :: a) :: (~>) a Ordering) where+ sing = (singFun1 @(MycompareSym1 (d :: a))) (sMycompare (sing @d))+ instance SMyOrd a =>+ SingI ((<=>@#@$) :: (~>) a ((~>) a Ordering)) where+ sing = (singFun2 @(<=>@#@$)) (%<=>)+ instance (SMyOrd a, SingI d) =>+ SingI ((<=>@#@$$) (d :: a) :: (~>) a Ordering) where+ sing = (singFun1 @((<=>@#@$$) (d :: a))) ((%<=>) (sing @d))+Singletons/Classes.hs:(0,0)-(0,0): Splicing declarations+ promote+ [d| instance Ord Foo2 where+ F `compare` F = EQ+ F `compare` _ = LT+ _ `compare` _ = GT+ instance MyOrd Foo2 where+ F `mycompare` F = EQ+ F `mycompare` _ = LT+ _ `mycompare` _ = GT |]+ ======>+ instance MyOrd Foo2 where+ mycompare F F = EQ+ mycompare F _ = LT+ mycompare _ _ = GT+ instance Ord Foo2 where+ compare F F = EQ+ compare F _ = LT+ compare _ _ = GT+ type family Mycompare_0123456789876543210 (a :: Foo2) (a :: Foo2) :: Ordering where+ Mycompare_0123456789876543210 'F 'F = EQSym0+ Mycompare_0123456789876543210 'F _ = LTSym0+ Mycompare_0123456789876543210 _ _ = GTSym0+ type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: Foo2) (a0123456789876543210 :: Foo2) =+ Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())+ data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: Foo2) :: (~>) Foo2 Ordering+ where+ Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())+ data Mycompare_0123456789876543210Sym0 :: (~>) Foo2 ((~>) Foo2 Ordering)+ where+ Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>+ Mycompare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210+ instance PMyOrd Foo2 where+ type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a+ type family Compare_0123456789876543210 (a :: Foo2) (a :: Foo2) :: Ordering where+ Compare_0123456789876543210 'F 'F = EQSym0+ Compare_0123456789876543210 'F _ = LTSym0+ Compare_0123456789876543210 _ _ = GTSym0+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Foo2) (a0123456789876543210 :: Foo2) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Foo2) :: (~>) Foo2 Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: (~>) Foo2 ((~>) Foo2 Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd Foo2 where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+Singletons/Classes.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Nat' = Zero' | Succ' Nat'+ + instance MyOrd Nat' where+ Zero' `mycompare` Zero' = EQ+ Zero' `mycompare` (Succ' _) = LT+ (Succ' _) `mycompare` Zero' = GT+ (Succ' n) `mycompare` (Succ' m) = m `mycompare` n |]+ ======>+ data Nat' = Zero' | Succ' Nat'+ instance MyOrd Nat' where+ mycompare Zero' Zero' = EQ+ mycompare Zero' (Succ' _) = LT+ mycompare (Succ' _) Zero' = GT+ mycompare (Succ' n) (Succ' m) = (m `mycompare` n)+ type Zero'Sym0 = Zero'+ type Succ'Sym1 (t0123456789876543210 :: Nat') =+ Succ' t0123456789876543210+ instance SuppressUnusedWarnings Succ'Sym0 where+ suppressUnusedWarnings = snd (((,) Succ'Sym0KindInference) ())+ data Succ'Sym0 :: (~>) Nat' Nat'+ where+ Succ'Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply Succ'Sym0 arg) (Succ'Sym1 arg) =>+ Succ'Sym0 t0123456789876543210+ type instance Apply Succ'Sym0 t0123456789876543210 = Succ' t0123456789876543210+ type family Mycompare_0123456789876543210 (a :: Nat') (a :: Nat') :: Ordering where+ Mycompare_0123456789876543210 Zero' Zero' = EQSym0+ Mycompare_0123456789876543210 Zero' (Succ' _) = LTSym0+ Mycompare_0123456789876543210 (Succ' _) Zero' = GTSym0+ Mycompare_0123456789876543210 (Succ' n) (Succ' m) = Apply (Apply MycompareSym0 m) n+ type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: Nat') (a0123456789876543210 :: Nat') =+ Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())+ data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: Nat') :: (~>) Nat' Ordering+ where+ Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())+ data Mycompare_0123456789876543210Sym0 :: (~>) Nat' ((~>) Nat' Ordering)+ where+ Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>+ Mycompare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210+ instance PMyOrd Nat' where+ type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a+ data SNat' :: Nat' -> GHC.Types.Type+ where+ SZero' :: SNat' Zero'+ SSucc' :: forall (n :: Nat'). (Sing (n :: Nat')) -> SNat' (Succ' n)+ type instance Sing @Nat' = SNat'+ instance SingKind Nat' where+ type Demote Nat' = Nat'+ fromSing SZero' = Zero'+ fromSing (SSucc' b) = Succ' (fromSing b)+ toSing Zero' = SomeSing SZero'+ toSing (Succ' (b :: Demote Nat'))+ = case toSing b :: SomeSing Nat' of {+ SomeSing c -> SomeSing (SSucc' c) }+ instance SMyOrd Nat' where+ sMycompare ::+ forall (t :: Nat') (t :: Nat').+ Sing t+ -> Sing t+ -> Sing (Apply (Apply (MycompareSym0 :: TyFun Nat' ((~>) Nat' Ordering)+ -> GHC.Types.Type) t) t)+ sMycompare SZero' SZero' = SEQ+ sMycompare SZero' (SSucc' _) = SLT+ sMycompare (SSucc' _) SZero' = SGT+ sMycompare (SSucc' (sN :: Sing n)) (SSucc' (sM :: Sing m))+ = (applySing+ ((applySing ((singFun2 @MycompareSym0) sMycompare)) sM))+ sN+ instance SingI Zero' where+ sing = SZero'+ instance SingI n => SingI (Succ' (n :: Nat')) where+ sing = SSucc' sing+ instance SingI (Succ'Sym0 :: (~>) Nat' Nat') where+ sing = (singFun1 @Succ'Sym0) SSucc'
− tests/compile-and-dump/Singletons/Classes2.ghc86.template
@@ -1,91 +0,0 @@-Singletons/Classes2.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data NatFoo = ZeroFoo | SuccFoo NatFoo- - instance MyOrd NatFoo where- ZeroFoo `mycompare` ZeroFoo = EQ- ZeroFoo `mycompare` (SuccFoo _) = LT- (SuccFoo _) `mycompare` ZeroFoo = GT- (SuccFoo n) `mycompare` (SuccFoo m) = m `mycompare` n |]- ======>- data NatFoo = ZeroFoo | SuccFoo NatFoo- instance MyOrd NatFoo where- mycompare ZeroFoo ZeroFoo = EQ- mycompare ZeroFoo (SuccFoo _) = LT- mycompare (SuccFoo _) ZeroFoo = GT- mycompare (SuccFoo n) (SuccFoo m) = (m `mycompare` n)- type ZeroFooSym0 = ZeroFoo- type SuccFooSym1 (t0123456789876543210 :: NatFoo) =- SuccFoo t0123456789876543210- instance SuppressUnusedWarnings SuccFooSym0 where- suppressUnusedWarnings = snd (((,) SuccFooSym0KindInference) ())- data SuccFooSym0 :: (~>) NatFoo NatFoo- where- SuccFooSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply SuccFooSym0 arg) (SuccFooSym1 arg) =>- SuccFooSym0 t0123456789876543210- type instance Apply SuccFooSym0 t0123456789876543210 = SuccFoo t0123456789876543210- type family Mycompare_0123456789876543210 (a :: NatFoo) (a :: NatFoo) :: Ordering where- Mycompare_0123456789876543210 ZeroFoo ZeroFoo = EQSym0- Mycompare_0123456789876543210 ZeroFoo (SuccFoo _) = LTSym0- Mycompare_0123456789876543210 (SuccFoo _) ZeroFoo = GTSym0- Mycompare_0123456789876543210 (SuccFoo n) (SuccFoo m) = Apply (Apply MycompareSym0 m) n- type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: NatFoo) (a0123456789876543210 :: NatFoo) =- Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())- data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: NatFoo) :: (~>) NatFoo Ordering- where- Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())- data Mycompare_0123456789876543210Sym0 :: (~>) NatFoo ((~>) NatFoo Ordering)- where- Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>- Mycompare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210- instance PMyOrd NatFoo where- type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a- data instance Sing :: NatFoo -> GHC.Types.Type- where- SZeroFoo :: Sing ZeroFoo- SSuccFoo :: forall (n :: NatFoo).- (Sing (n :: NatFoo)) -> Sing (SuccFoo n)- type SNatFoo = (Sing :: NatFoo -> GHC.Types.Type)- instance SingKind NatFoo where- type Demote NatFoo = NatFoo- fromSing SZeroFoo = ZeroFoo- fromSing (SSuccFoo b) = SuccFoo (fromSing b)- toSing ZeroFoo = SomeSing SZeroFoo- toSing (SuccFoo (b :: Demote NatFoo))- = case toSing b :: SomeSing NatFoo of {- SomeSing c -> SomeSing (SSuccFoo c) }- instance SMyOrd NatFoo where- sMycompare ::- forall (t1 :: NatFoo) (t2 :: NatFoo).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (MycompareSym0 :: TyFun NatFoo ((~>) NatFoo Ordering)- -> GHC.Types.Type) t1) t2)- sMycompare SZeroFoo SZeroFoo = SEQ- sMycompare SZeroFoo (SSuccFoo _) = SLT- sMycompare (SSuccFoo _) SZeroFoo = SGT- sMycompare (SSuccFoo (sN :: Sing n)) (SSuccFoo (sM :: Sing m))- = (applySing- ((applySing ((singFun2 @MycompareSym0) sMycompare)) sM))- sN- instance SingI ZeroFoo where- sing = SZeroFoo- instance SingI n => SingI (SuccFoo (n :: NatFoo)) where- sing = SSuccFoo sing- instance SingI (SuccFooSym0 :: (~>) NatFoo NatFoo) where- sing = (singFun1 @SuccFooSym0) SSuccFoo- instance SingI (TyCon1 SuccFoo :: (~>) NatFoo NatFoo) where- sing = (singFun1 @(TyCon1 SuccFoo)) SSuccFoo
+ tests/compile-and-dump/Singletons/Classes2.ghc88.template view
@@ -0,0 +1,89 @@+Singletons/Classes2.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data NatFoo = ZeroFoo | SuccFoo NatFoo+ + instance MyOrd NatFoo where+ ZeroFoo `mycompare` ZeroFoo = EQ+ ZeroFoo `mycompare` (SuccFoo _) = LT+ (SuccFoo _) `mycompare` ZeroFoo = GT+ (SuccFoo n) `mycompare` (SuccFoo m) = m `mycompare` n |]+ ======>+ data NatFoo = ZeroFoo | SuccFoo NatFoo+ instance MyOrd NatFoo where+ mycompare ZeroFoo ZeroFoo = EQ+ mycompare ZeroFoo (SuccFoo _) = LT+ mycompare (SuccFoo _) ZeroFoo = GT+ mycompare (SuccFoo n) (SuccFoo m) = (m `mycompare` n)+ type ZeroFooSym0 = ZeroFoo+ type SuccFooSym1 (t0123456789876543210 :: NatFoo) =+ SuccFoo t0123456789876543210+ instance SuppressUnusedWarnings SuccFooSym0 where+ suppressUnusedWarnings = snd (((,) SuccFooSym0KindInference) ())+ data SuccFooSym0 :: (~>) NatFoo NatFoo+ where+ SuccFooSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply SuccFooSym0 arg) (SuccFooSym1 arg) =>+ SuccFooSym0 t0123456789876543210+ type instance Apply SuccFooSym0 t0123456789876543210 = SuccFoo t0123456789876543210+ type family Mycompare_0123456789876543210 (a :: NatFoo) (a :: NatFoo) :: Ordering where+ Mycompare_0123456789876543210 ZeroFoo ZeroFoo = EQSym0+ Mycompare_0123456789876543210 ZeroFoo (SuccFoo _) = LTSym0+ Mycompare_0123456789876543210 (SuccFoo _) ZeroFoo = GTSym0+ Mycompare_0123456789876543210 (SuccFoo n) (SuccFoo m) = Apply (Apply MycompareSym0 m) n+ type Mycompare_0123456789876543210Sym2 (a0123456789876543210 :: NatFoo) (a0123456789876543210 :: NatFoo) =+ Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Mycompare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym1KindInference) ())+ data Mycompare_0123456789876543210Sym1 (a0123456789876543210 :: NatFoo) :: (~>) NatFoo Ordering+ where+ Mycompare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) arg) (Mycompare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Mycompare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Mycompare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Mycompare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Mycompare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Mycompare_0123456789876543210Sym0KindInference) ())+ data Mycompare_0123456789876543210Sym0 :: (~>) NatFoo ((~>) NatFoo Ordering)+ where+ Mycompare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Mycompare_0123456789876543210Sym0 arg) (Mycompare_0123456789876543210Sym1 arg) =>+ Mycompare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Mycompare_0123456789876543210Sym0 a0123456789876543210 = Mycompare_0123456789876543210Sym1 a0123456789876543210+ instance PMyOrd NatFoo where+ type Mycompare a a = Apply (Apply Mycompare_0123456789876543210Sym0 a) a+ data SNatFoo :: NatFoo -> GHC.Types.Type+ where+ SZeroFoo :: SNatFoo ZeroFoo+ SSuccFoo :: forall (n :: NatFoo).+ (Sing (n :: NatFoo)) -> SNatFoo (SuccFoo n)+ type instance Sing @NatFoo = SNatFoo+ instance SingKind NatFoo where+ type Demote NatFoo = NatFoo+ fromSing SZeroFoo = ZeroFoo+ fromSing (SSuccFoo b) = SuccFoo (fromSing b)+ toSing ZeroFoo = SomeSing SZeroFoo+ toSing (SuccFoo (b :: Demote NatFoo))+ = case toSing b :: SomeSing NatFoo of {+ SomeSing c -> SomeSing (SSuccFoo c) }+ instance SMyOrd NatFoo where+ sMycompare ::+ forall (t1 :: NatFoo) (t2 :: NatFoo).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (MycompareSym0 :: TyFun NatFoo ((~>) NatFoo Ordering)+ -> GHC.Types.Type) t1) t2)+ sMycompare SZeroFoo SZeroFoo = SEQ+ sMycompare SZeroFoo (SSuccFoo _) = SLT+ sMycompare (SSuccFoo _) SZeroFoo = SGT+ sMycompare (SSuccFoo (sN :: Sing n)) (SSuccFoo (sM :: Sing m))+ = (applySing+ ((applySing ((singFun2 @MycompareSym0) sMycompare)) sM))+ sN+ instance SingI ZeroFoo where+ sing = SZeroFoo+ instance SingI n => SingI (SuccFoo (n :: NatFoo)) where+ sing = SSuccFoo sing+ instance SingI (SuccFooSym0 :: (~>) NatFoo NatFoo) where+ sing = (singFun1 @SuccFooSym0) SSuccFoo
− tests/compile-and-dump/Singletons/Contains.ghc86.template
@@ -1,50 +0,0 @@-Singletons/Contains.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| contains :: Eq a => a -> [a] -> Bool- contains _ [] = False- contains elt (h : t) = (elt == h) || (contains elt t) |]- ======>- contains :: Eq a => a -> [a] -> Bool- contains _ [] = False- contains elt (h : t) = ((elt == h) || (contains elt) t)- type ContainsSym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: [a0123456789876543210]) =- Contains a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ContainsSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) ContainsSym1KindInference) ())- data ContainsSym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) [a0123456789876543210] Bool- where- ContainsSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ContainsSym1 a0123456789876543210) arg) (ContainsSym2 a0123456789876543210 arg) =>- ContainsSym1 a0123456789876543210 a0123456789876543210- type instance Apply (ContainsSym1 a0123456789876543210) a0123456789876543210 = Contains a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ContainsSym0 where- suppressUnusedWarnings = snd (((,) ContainsSym0KindInference) ())- data ContainsSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) [a0123456789876543210] Bool)- where- ContainsSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ContainsSym0 arg) (ContainsSym1 arg) =>- ContainsSym0 a0123456789876543210- type instance Apply ContainsSym0 a0123456789876543210 = ContainsSym1 a0123456789876543210- type family Contains (a :: a) (a :: [a]) :: Bool where- Contains _ '[] = FalseSym0- Contains elt ( '(:) h t) = Apply (Apply (||@#@$) (Apply (Apply (==@#@$) elt) h)) (Apply (Apply ContainsSym0 elt) t)- sContains ::- forall a (t :: a) (t :: [a]).- SEq a =>- Sing t -> Sing t -> Sing (Apply (Apply ContainsSym0 t) t :: Bool)- sContains _ SNil = SFalse- sContains (sElt :: Sing elt) (SCons (sH :: Sing h) (sT :: Sing t))- = (applySing- ((applySing ((singFun2 @(||@#@$)) (%||)))- ((applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sElt)) sH)))- ((applySing- ((applySing ((singFun2 @ContainsSym0) sContains)) sElt))- sT)- instance SEq a =>- SingI (ContainsSym0 :: (~>) a ((~>) [a] Bool)) where- sing = (singFun2 @ContainsSym0) sContains- instance (SEq a, SingI d) =>- SingI (ContainsSym1 (d :: a) :: (~>) [a] Bool) where- sing = (singFun1 @(ContainsSym1 (d :: a))) (sContains (sing @d))
+ tests/compile-and-dump/Singletons/Contains.ghc88.template view
@@ -0,0 +1,50 @@+Singletons/Contains.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| contains :: Eq a => a -> [a] -> Bool+ contains _ [] = False+ contains elt (h : t) = (elt == h) || (contains elt t) |]+ ======>+ contains :: Eq a => a -> [a] -> Bool+ contains _ [] = False+ contains elt (h : t) = ((elt == h) || (contains elt) t)+ type ContainsSym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: [a0123456789876543210]) =+ Contains a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ContainsSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ContainsSym1KindInference) ())+ data ContainsSym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) [a0123456789876543210] Bool+ where+ ContainsSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ContainsSym1 a0123456789876543210) arg) (ContainsSym2 a0123456789876543210 arg) =>+ ContainsSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ContainsSym1 a0123456789876543210) a0123456789876543210 = Contains a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ContainsSym0 where+ suppressUnusedWarnings = snd (((,) ContainsSym0KindInference) ())+ data ContainsSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) [a0123456789876543210] Bool)+ where+ ContainsSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ContainsSym0 arg) (ContainsSym1 arg) =>+ ContainsSym0 a0123456789876543210+ type instance Apply ContainsSym0 a0123456789876543210 = ContainsSym1 a0123456789876543210+ type family Contains (a :: a) (a :: [a]) :: Bool where+ Contains _ '[] = FalseSym0+ Contains elt ('(:) h t) = Apply (Apply (||@#@$) (Apply (Apply (==@#@$) elt) h)) (Apply (Apply ContainsSym0 elt) t)+ sContains ::+ forall a (t :: a) (t :: [a]).+ SEq a =>+ Sing t -> Sing t -> Sing (Apply (Apply ContainsSym0 t) t :: Bool)+ sContains _ SNil = SFalse+ sContains (sElt :: Sing elt) (SCons (sH :: Sing h) (sT :: Sing t))+ = (applySing+ ((applySing ((singFun2 @(||@#@$)) (%||)))+ ((applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sElt)) sH)))+ ((applySing+ ((applySing ((singFun2 @ContainsSym0) sContains)) sElt))+ sT)+ instance SEq a =>+ SingI (ContainsSym0 :: (~>) a ((~>) [a] Bool)) where+ sing = (singFun2 @ContainsSym0) sContains+ instance (SEq a, SingI d) =>+ SingI (ContainsSym1 (d :: a) :: (~>) [a] Bool) where+ sing = (singFun1 @(ContainsSym1 (d :: a))) (sContains (sing @d))
− tests/compile-and-dump/Singletons/DataValues.ghc86.template
@@ -1,186 +0,0 @@-Singletons/DataValues.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| pr = Pair (Succ Zero) ([Zero])- complex = Pair (Pair (Just Zero) Zero) False- tuple = (False, Just Zero, True)- aList = [Zero, Succ Zero, Succ (Succ Zero)]- - data Pair a b- = Pair a b- deriving Show |]- ======>- data Pair a b- = Pair a b- deriving Show- pr = (Pair (Succ Zero)) [Zero]- complex = (Pair ((Pair (Just Zero)) Zero)) False- tuple = (False, Just Zero, True)- aList = [Zero, Succ Zero, Succ (Succ Zero)]- type PairSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =- Pair t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (PairSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) PairSym1KindInference) ())- data PairSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210)- where- PairSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (PairSym1 t0123456789876543210) arg) (PairSym2 t0123456789876543210 arg) =>- PairSym1 t0123456789876543210 t0123456789876543210- type instance Apply (PairSym1 t0123456789876543210) t0123456789876543210 = Pair t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings PairSym0 where- suppressUnusedWarnings = snd (((,) PairSym0KindInference) ())- data PairSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210))- where- PairSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply PairSym0 arg) (PairSym1 arg) =>- PairSym0 t0123456789876543210- type instance Apply PairSym0 t0123456789876543210 = PairSym1 t0123456789876543210- type AListSym0 = AList- type TupleSym0 = Tuple- type ComplexSym0 = Complex- type PrSym0 = Pr- type family AList where- AList = Apply (Apply (:@#@$) ZeroSym0) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))) '[]))- type family Tuple where- Tuple = Apply (Apply (Apply Tuple3Sym0 FalseSym0) (Apply JustSym0 ZeroSym0)) TrueSym0- type family Complex where- Complex = Apply (Apply PairSym0 (Apply (Apply PairSym0 (Apply JustSym0 ZeroSym0)) ZeroSym0)) FalseSym0- type family Pr where- Pr = Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) ZeroSym0) '[])- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Pair a b) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 p_0123456789876543210 (Pair arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Pair ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a0123456789876543210 b0123456789876543210) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210- b0123456789876543210.- (~>) (Pair a0123456789876543210 b0123456789876543210) ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) GHC.Types.Nat ((~>) (Pair a0123456789876543210 b0123456789876543210) ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow (Pair a b) where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- sAList :: Sing AListSym0- sTuple :: Sing TupleSym0- sComplex :: Sing ComplexSym0- sPr :: Sing PrSym0- sAList- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @SuccSym0) SSucc))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))))- SNil))- sTuple- = (applySing- ((applySing ((applySing ((singFun3 @Tuple3Sym0) STuple3)) SFalse))- ((applySing ((singFun1 @JustSym0) SJust)) SZero)))- STrue- sComplex- = (applySing- ((applySing ((singFun2 @PairSym0) SPair))- ((applySing- ((applySing ((singFun2 @PairSym0) SPair))- ((applySing ((singFun1 @JustSym0) SJust)) SZero)))- SZero)))- SFalse- sPr- = (applySing- ((applySing ((singFun2 @PairSym0) SPair))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero)) SNil)- data instance Sing :: Pair a b -> GHC.Types.Type- where- SPair :: forall a b (n :: a) (n :: b).- (Sing (n :: a)) -> (Sing (n :: b)) -> Sing (Pair n n)- type SPair = (Sing :: Pair a b -> GHC.Types.Type)- instance (SingKind a, SingKind b) => SingKind (Pair a b) where- type Demote (Pair a b) = Pair (Demote a) (Demote b)- fromSing (SPair b b) = (Pair (fromSing b)) (fromSing b)- toSing (Pair (b :: Demote a) (b :: Demote b))- = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c) }- instance (SShow a, SShow b) => SShow (Pair a b) where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: Pair a b) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Pair a b) ((~>) Symbol Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SPair (sArg_0123456789876543210 :: Sing arg_0123456789876543210)- (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Pair "))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @ShowSpaceSym0) sShowSpace)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))))- sA_0123456789876543210- deriving instance (Data.Singletons.ShowSing.ShowSing a,- Data.Singletons.ShowSing.ShowSing b) =>- Show (Sing (z :: Pair a b))- instance (SingI n, SingI n) => SingI (Pair (n :: a) (n :: b)) where- sing = (SPair sing) sing- instance SingI (PairSym0 :: (~>) a ((~>) b (Pair a b))) where- sing = (singFun2 @PairSym0) SPair- instance SingI (TyCon2 Pair :: (~>) a ((~>) b (Pair a b))) where- sing = (singFun2 @(TyCon2 Pair)) SPair- instance SingI d =>- SingI (PairSym1 (d :: a) :: (~>) b (Pair a b)) where- sing = (singFun1 @(PairSym1 (d :: a))) (SPair (sing @d))- instance SingI d =>- SingI (TyCon1 (Pair (d :: a)) :: (~>) b (Pair a b)) where- sing = (singFun1 @(TyCon1 (Pair (d :: a)))) (SPair (sing @d))
+ tests/compile-and-dump/Singletons/DataValues.ghc88.template view
@@ -0,0 +1,193 @@+Singletons/DataValues.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| pr = Pair (Succ Zero) ([Zero])+ complex = Pair (Pair (Just Zero) Zero) False+ tuple = (False, Just Zero, True)+ aList = [Zero, Succ Zero, Succ (Succ Zero)]+ + data Pair a b+ = Pair a b+ deriving Show |]+ ======>+ data Pair a b+ = Pair a b+ deriving Show+ pr = (Pair (Succ Zero)) [Zero]+ complex = (Pair ((Pair (Just Zero)) Zero)) False+ tuple = (False, Just Zero, True)+ aList = [Zero, Succ Zero, Succ (Succ Zero)]+ type PairSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =+ Pair t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (PairSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) PairSym1KindInference) ())+ data PairSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210)+ where+ PairSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (PairSym1 t0123456789876543210) arg) (PairSym2 t0123456789876543210 arg) =>+ PairSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (PairSym1 t0123456789876543210) t0123456789876543210 = Pair t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings PairSym0 where+ suppressUnusedWarnings = snd (((,) PairSym0KindInference) ())+ data PairSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210))+ where+ PairSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply PairSym0 arg) (PairSym1 arg) =>+ PairSym0 t0123456789876543210+ type instance Apply PairSym0 t0123456789876543210 = PairSym1 t0123456789876543210+ type AListSym0 = AList+ type TupleSym0 = Tuple+ type ComplexSym0 = Complex+ type PrSym0 = Pr+ type family AList where+ AList = Apply (Apply (:@#@$) ZeroSym0) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))) '[]))+ type family Tuple where+ Tuple = Apply (Apply (Apply Tuple3Sym0 FalseSym0) (Apply JustSym0 ZeroSym0)) TrueSym0+ type family Complex where+ Complex = Apply (Apply PairSym0 (Apply (Apply PairSym0 (Apply JustSym0 ZeroSym0)) ZeroSym0)) FalseSym0+ type family Pr where+ Pr = Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) ZeroSym0) '[])+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Pair a b) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 p_0123456789876543210 (Pair arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Pair ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a0123456789876543210 b0123456789876543210) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210+ b0123456789876543210.+ (~>) (Pair a0123456789876543210 b0123456789876543210) ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) GHC.Types.Nat ((~>) (Pair a0123456789876543210 b0123456789876543210) ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow (Pair a b) where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ sAList :: Sing AListSym0+ sTuple :: Sing TupleSym0+ sComplex :: Sing ComplexSym0+ sPr :: Sing PrSym0+ sAList+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))))+ SNil))+ sTuple+ = (applySing+ ((applySing ((applySing ((singFun3 @Tuple3Sym0) STuple3)) SFalse))+ ((applySing ((singFun1 @JustSym0) SJust)) SZero)))+ STrue+ sComplex+ = (applySing+ ((applySing ((singFun2 @PairSym0) SPair))+ ((applySing+ ((applySing ((singFun2 @PairSym0) SPair))+ ((applySing ((singFun1 @JustSym0) SJust)) SZero)))+ SZero)))+ SFalse+ sPr+ = (applySing+ ((applySing ((singFun2 @PairSym0) SPair))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero)) SNil)+ data SPair :: forall a b. Pair a b -> GHC.Types.Type+ where+ SPair :: forall a b (n :: a) (n :: b).+ (Sing (n :: a)) -> (Sing (n :: b)) -> SPair (Pair n n)+ type instance Sing @(Pair a b) = SPair+ instance (SingKind a, SingKind b) => SingKind (Pair a b) where+ type Demote (Pair a b) = Pair (Demote a) (Demote b)+ fromSing (SPair b b) = (Pair (fromSing b)) (fromSing b)+ toSing (Pair (b :: Demote a) (b :: Demote b))+ = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c) }+ instance (SShow a, SShow b) => SShow (Pair a b) where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: Pair a b) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Pair a b) ((~>) Symbol Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SPair (sArg_0123456789876543210 :: Sing arg_0123456789876543210)+ (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Pair "))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @ShowSpaceSym0) sShowSpace)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))))+ sA_0123456789876543210+ instance (Data.Singletons.ShowSing.ShowSing a,+ Data.Singletons.ShowSing.ShowSing b) =>+ Show (SPair (z :: Pair a b)) where+ showsPrec+ p_0123456789876543210+ (SPair (arg_0123456789876543210 :: Sing argTy_0123456789876543210)+ (arg_0123456789876543210 :: Sing argTy_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 10))+ (((.) (showString "SPair "))+ (((.) ((showsPrec 11) arg_0123456789876543210))+ (((.) GHC.Show.showSpace)+ ((showsPrec 11) arg_0123456789876543210)))) ::+ (Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210,+ Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210) =>+ ShowS+ instance (SingI n, SingI n) => SingI (Pair (n :: a) (n :: b)) where+ sing = (SPair sing) sing+ instance SingI (PairSym0 :: (~>) a ((~>) b (Pair a b))) where+ sing = (singFun2 @PairSym0) SPair+ instance SingI d =>+ SingI (PairSym1 (d :: a) :: (~>) b (Pair a b)) where+ sing = (singFun1 @(PairSym1 (d :: a))) (SPair (sing @d))
− tests/compile-and-dump/Singletons/Empty.ghc86.template
@@ -1,10 +0,0 @@-Singletons/Empty.hs:(0,0)-(0,0): Splicing declarations- singletons [d| data Empty |]- ======>- data Empty- data instance Sing :: Empty -> GHC.Types.Type- type SEmpty = (Sing :: Empty -> GHC.Types.Type)- instance SingKind Empty where- type Demote Empty = Empty- fromSing x = case x of- toSing x = SomeSing (case x of)
+ tests/compile-and-dump/Singletons/Empty.ghc88.template view
@@ -0,0 +1,10 @@+Singletons/Empty.hs:(0,0)-(0,0): Splicing declarations+ singletons [d| data Empty |]+ ======>+ data Empty+ data SEmpty :: Empty -> GHC.Types.Type+ type instance Sing @Empty = SEmpty+ instance SingKind Empty where+ type Demote Empty = Empty+ fromSing x = case x of+ toSing x = SomeSing (case x of)
− tests/compile-and-dump/Singletons/EmptyShowDeriving.ghc86.template
@@ -1,68 +0,0 @@-Singletons/EmptyShowDeriving.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Foo- - deriving instance Show Foo |]- ======>- data Foo- deriving instance Show Foo- type family Case_0123456789876543210 v_0123456789876543210 a_0123456789876543210 t where- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where- ShowsPrec_0123456789876543210 _ v_0123456789876543210 a_0123456789876543210 = Apply (Case_0123456789876543210 v_0123456789876543210 a_0123456789876543210 v_0123456789876543210) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo) (a0123456789876543210 :: GHC.Types.Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo) :: (~>) GHC.Types.Symbol GHC.Types.Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow Foo where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- data instance Sing :: Foo -> GHC.Types.Type- type SFoo = (Sing :: Foo -> GHC.Types.Type)- instance SingKind Foo where- type Demote Foo = Foo- fromSing x = case x of- toSing x = SomeSing (case x of)- instance SShow Foo where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: Foo) (t3 :: GHC.Types.Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- _- (sV_0123456789876543210 :: Sing v_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((case sV_0123456789876543210 of) ::- Sing (Case_0123456789876543210 v_0123456789876543210 a_0123456789876543210 v_0123456789876543210)))- sA_0123456789876543210- deriving instance Show (Sing (z :: Foo))
+ tests/compile-and-dump/Singletons/EmptyShowDeriving.ghc88.template view
@@ -0,0 +1,70 @@+Singletons/EmptyShowDeriving.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Foo+ + deriving instance Show Foo |]+ ======>+ data Foo+ deriving instance Show Foo+ type family Case_0123456789876543210 v_0123456789876543210 a_0123456789876543210 t where+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+ ShowsPrec_0123456789876543210 _ v_0123456789876543210 a_0123456789876543210 = Apply (Case_0123456789876543210 v_0123456789876543210 a_0123456789876543210 v_0123456789876543210) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo) (a0123456789876543210 :: GHC.Types.Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow Foo where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ data SFoo :: Foo -> GHC.Types.Type+ type instance Sing @Foo = SFoo+ instance SingKind Foo where+ type Demote Foo = Foo+ fromSing x = case x of+ toSing x = SomeSing (case x of)+ instance SShow Foo where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: Foo) (t3 :: GHC.Types.Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Foo ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ _+ (sV_0123456789876543210 :: Sing v_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((id+ @(Sing (Case_0123456789876543210 v_0123456789876543210 a_0123456789876543210 v_0123456789876543210)))+ (case sV_0123456789876543210 of)))+ sA_0123456789876543210+ instance Show (SFoo (z :: Foo)) where+ showsPrec _ v_0123456789876543210 = case v_0123456789876543210 of
− tests/compile-and-dump/Singletons/EnumDeriving.ghc86.template
@@ -1,199 +0,0 @@-Singletons/EnumDeriving.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Foo- = Bar | Baz | Bum- deriving Enum- data Quux = Q1 | Q2 |]- ======>- data Foo- = Bar | Baz | Bum- deriving Enum- data Quux = Q1 | Q2- type BarSym0 = Bar- type BazSym0 = Baz- type BumSym0 = Bum- type Q1Sym0 = Q1- type Q2Sym0 = Q2- type family Case_0123456789876543210 n t where- Case_0123456789876543210 n 'True = BumSym0- Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"- type family Case_0123456789876543210 n t where- Case_0123456789876543210 n 'True = BazSym0- Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 2))- type family Case_0123456789876543210 n t where- Case_0123456789876543210 n 'True = BarSym0- Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1))- type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: Foo where- ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0))- type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) =- ToEnum_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())- data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat Foo- where- ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>- ToEnum_0123456789876543210Sym0 a0123456789876543210- type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210- type family FromEnum_0123456789876543210 (a :: Foo) :: GHC.Types.Nat where- FromEnum_0123456789876543210 Bar = Data.Singletons.Prelude.Num.FromInteger 0- FromEnum_0123456789876543210 Baz = Data.Singletons.Prelude.Num.FromInteger 1- FromEnum_0123456789876543210 Bum = Data.Singletons.Prelude.Num.FromInteger 2- type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Foo) =- FromEnum_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())- data FromEnum_0123456789876543210Sym0 :: (~>) Foo GHC.Types.Nat- where- FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>- FromEnum_0123456789876543210Sym0 a0123456789876543210- type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210- instance PEnum Foo where- type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a- type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a- data instance Sing :: Foo -> GHC.Types.Type- where- SBar :: Sing Bar- SBaz :: Sing Baz- SBum :: Sing Bum- type SFoo = (Sing :: Foo -> GHC.Types.Type)- instance SingKind Foo where- type Demote Foo = Foo- fromSing SBar = Bar- fromSing SBaz = Baz- fromSing SBum = Bum- toSing Bar = SomeSing SBar- toSing Baz = SomeSing SBaz- toSing Bum = SomeSing SBum- data instance Sing :: Quux -> GHC.Types.Type- where- SQ1 :: Sing Q1- SQ2 :: Sing Q2- type SQuux = (Sing :: Quux -> GHC.Types.Type)- instance SingKind Quux where- type Demote Quux = Quux- fromSing SQ1 = Q1- fromSing SQ2 = Q2- toSing Q1 = SomeSing SQ1- toSing Q2 = SomeSing SQ2- instance SEnum Foo where- sToEnum ::- forall (t :: GHC.Types.Nat).- Sing t- -> Sing (Apply (Data.Singletons.Prelude.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat Foo- -> GHC.Types.Type) t)- sFromEnum ::- forall (t :: Foo).- Sing t- -> Sing (Apply (Data.Singletons.Prelude.Enum.FromEnumSym0 :: TyFun Foo GHC.Types.Nat- -> GHC.Types.Type) t)- sToEnum (sN :: Sing n)- = (case- (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0))- of- STrue -> SBar- SFalse- -> (case- (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1))- of- STrue -> SBaz- SFalse- -> (case- (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 2))- of- STrue -> SBum- SFalse -> sError (sing :: Sing "toEnum: bad argument")) ::- Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 2)))) ::- Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1)))) ::- Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0)))- sFromEnum SBar- = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0)- sFromEnum SBaz- = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1)- sFromEnum SBum- = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 2)- instance SingI Bar where- sing = SBar- instance SingI Baz where- sing = SBaz- instance SingI Bum where- sing = SBum- instance SingI Q1 where- sing = SQ1- instance SingI Q2 where- sing = SQ2-Singletons/EnumDeriving.hs:0:0:: Splicing declarations- singEnumInstance ''Quux- ======>- type family Case_0123456789876543210 n t where- Case_0123456789876543210 n 'True = Q2Sym0- Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"- type family Case_0123456789876543210 n t where- Case_0123456789876543210 n 'True = Q1Sym0- Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1))- type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: Quux where- ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0))- type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) =- ToEnum_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())- data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat Quux- where- ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>- ToEnum_0123456789876543210Sym0 a0123456789876543210- type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210- type family FromEnum_0123456789876543210 (a :: Quux) :: GHC.Types.Nat where- FromEnum_0123456789876543210 'Q1 = Data.Singletons.Prelude.Num.FromInteger 0- FromEnum_0123456789876543210 'Q2 = Data.Singletons.Prelude.Num.FromInteger 1- type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Quux) =- FromEnum_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())- data FromEnum_0123456789876543210Sym0 :: (~>) Quux GHC.Types.Nat- where- FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>- FromEnum_0123456789876543210Sym0 a0123456789876543210- type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210- instance PEnum Quux where- type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a- type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a- instance SEnum Quux where- sToEnum ::- forall (t :: GHC.Types.Nat).- Sing t- -> Sing (Apply (Data.Singletons.Prelude.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat Quux- -> GHC.Types.Type) t)- sFromEnum ::- forall (t :: Quux).- Sing t- -> Sing (Apply (Data.Singletons.Prelude.Enum.FromEnumSym0 :: TyFun Quux GHC.Types.Nat- -> GHC.Types.Type) t)- sToEnum (sN :: Sing n)- = (case- (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0))- of- STrue -> SQ1- SFalse- -> (case- (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1))- of- STrue -> SQ2- SFalse -> sError (sing :: Sing "toEnum: bad argument")) ::- Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1)))) ::- Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0)))- sFromEnum SQ1- = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0)- sFromEnum SQ2- = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1)
+ tests/compile-and-dump/Singletons/EnumDeriving.ghc88.template view
@@ -0,0 +1,204 @@+Singletons/EnumDeriving.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Foo+ = Bar | Baz | Bum+ deriving Enum+ data Quux = Q1 | Q2 |]+ ======>+ data Foo+ = Bar | Baz | Bum+ deriving Enum+ data Quux = Q1 | Q2+ type BarSym0 = Bar+ type BazSym0 = Baz+ type BumSym0 = Bum+ type Q1Sym0 = Q1+ type Q2Sym0 = Q2+ type family Case_0123456789876543210 n t where+ Case_0123456789876543210 n 'True = BumSym0+ Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"+ type family Case_0123456789876543210 n t where+ Case_0123456789876543210 n 'True = BazSym0+ Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 2))+ type family Case_0123456789876543210 n t where+ Case_0123456789876543210 n 'True = BarSym0+ Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1))+ type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: Foo where+ ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0))+ type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) =+ ToEnum_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())+ data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat Foo+ where+ ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>+ ToEnum_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210+ type family FromEnum_0123456789876543210 (a :: Foo) :: GHC.Types.Nat where+ FromEnum_0123456789876543210 Bar = Data.Singletons.Prelude.Num.FromInteger 0+ FromEnum_0123456789876543210 Baz = Data.Singletons.Prelude.Num.FromInteger 1+ FromEnum_0123456789876543210 Bum = Data.Singletons.Prelude.Num.FromInteger 2+ type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Foo) =+ FromEnum_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())+ data FromEnum_0123456789876543210Sym0 :: (~>) Foo GHC.Types.Nat+ where+ FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>+ FromEnum_0123456789876543210Sym0 a0123456789876543210+ type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210+ instance PEnum Foo where+ type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a+ type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a+ data SFoo :: Foo -> GHC.Types.Type+ where+ SBar :: SFoo Bar+ SBaz :: SFoo Baz+ SBum :: SFoo Bum+ type instance Sing @Foo = SFoo+ instance SingKind Foo where+ type Demote Foo = Foo+ fromSing SBar = Bar+ fromSing SBaz = Baz+ fromSing SBum = Bum+ toSing Bar = SomeSing SBar+ toSing Baz = SomeSing SBaz+ toSing Bum = SomeSing SBum+ data SQuux :: Quux -> GHC.Types.Type+ where+ SQ1 :: SQuux Q1+ SQ2 :: SQuux Q2+ type instance Sing @Quux = SQuux+ instance SingKind Quux where+ type Demote Quux = Quux+ fromSing SQ1 = Q1+ fromSing SQ2 = Q2+ toSing Q1 = SomeSing SQ1+ toSing Q2 = SomeSing SQ2+ instance SEnum Foo where+ sToEnum ::+ forall (t :: GHC.Types.Nat).+ Sing t+ -> Sing (Apply (Data.Singletons.Prelude.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat Foo+ -> GHC.Types.Type) t)+ sFromEnum ::+ forall (t :: Foo).+ Sing t+ -> Sing (Apply (Data.Singletons.Prelude.Enum.FromEnumSym0 :: TyFun Foo GHC.Types.Nat+ -> GHC.Types.Type) t)+ sToEnum (sN :: Sing n)+ = (id+ @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0)))))+ (case+ (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0))+ of+ STrue -> SBar+ SFalse+ -> (id+ @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1)))))+ (case+ (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1))+ of+ STrue -> SBaz+ SFalse+ -> (id+ @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 2)))))+ (case+ (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 2))+ of+ STrue -> SBum+ SFalse -> sError (sing :: Sing "toEnum: bad argument"))))+ sFromEnum SBar+ = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0)+ sFromEnum SBaz+ = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1)+ sFromEnum SBum+ = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 2)+ instance SingI Bar where+ sing = SBar+ instance SingI Baz where+ sing = SBaz+ instance SingI Bum where+ sing = SBum+ instance SingI Q1 where+ sing = SQ1+ instance SingI Q2 where+ sing = SQ2+Singletons/EnumDeriving.hs:0:0:: Splicing declarations+ singEnumInstance ''Quux+ ======>+ type family Case_0123456789876543210 n t where+ Case_0123456789876543210 n 'True = Q2Sym0+ Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"+ type family Case_0123456789876543210 n t where+ Case_0123456789876543210 n 'True = Q1Sym0+ Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1))+ type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: Quux where+ ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0))+ type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) =+ ToEnum_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())+ data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat Quux+ where+ ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>+ ToEnum_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210+ type family FromEnum_0123456789876543210 (a :: Quux) :: GHC.Types.Nat where+ FromEnum_0123456789876543210 'Q1 = Data.Singletons.Prelude.Num.FromInteger 0+ FromEnum_0123456789876543210 'Q2 = Data.Singletons.Prelude.Num.FromInteger 1+ type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: Quux) =+ FromEnum_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())+ data FromEnum_0123456789876543210Sym0 :: (~>) Quux GHC.Types.Nat+ where+ FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>+ FromEnum_0123456789876543210Sym0 a0123456789876543210+ type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210+ instance PEnum Quux where+ type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a+ type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a+ instance SEnum Quux where+ sToEnum ::+ forall (t :: GHC.Types.Nat).+ Sing t+ -> Sing (Apply (Data.Singletons.Prelude.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat Quux+ -> GHC.Types.Type) t)+ sFromEnum ::+ forall (t :: Quux).+ Sing t+ -> Sing (Apply (Data.Singletons.Prelude.Enum.FromEnumSym0 :: TyFun Quux GHC.Types.Nat+ -> GHC.Types.Type) t)+ sToEnum (sN :: Sing n)+ = (id+ @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0)))))+ (case+ (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0))+ of+ STrue -> SQ1+ SFalse+ -> (id+ @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 1)))))+ (case+ (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1))+ of+ STrue -> SQ2+ SFalse -> sError (sing :: Sing "toEnum: bad argument")))+ sFromEnum SQ1+ = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0)+ sFromEnum SQ2+ = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 1)
− tests/compile-and-dump/Singletons/EqInstances.ghc86.template
@@ -1,21 +0,0 @@-Singletons/EqInstances.hs:0:0:: Splicing declarations- singEqInstances [''Foo, ''Empty]- ======>- instance SEq Foo => SEq Foo where- (%==) SFLeaf SFLeaf = STrue- (%==) SFLeaf ((:%+:) _ _) = SFalse- (%==) ((:%+:) _ _) SFLeaf = SFalse- (%==) ((:%+:) a a) ((:%+:) b b)- = ((%&&) (((%==) a) b)) (((%==) a) b)- type family Equals_0123456789876543210 (a :: Foo) (b :: Foo) :: Bool where- Equals_0123456789876543210 'FLeaf 'FLeaf = TrueSym0- Equals_0123456789876543210 ( '(:+:) a a) ( '(:+:) b b) = (&&) ((==) a b) ((==) a b)- Equals_0123456789876543210 (_ :: Foo) (_ :: Foo) = FalseSym0- instance PEq Foo where- type (==) a b = Equals_0123456789876543210 a b- instance SEq Empty where- (%==) _ _ = STrue- type family Equals_0123456789876543210 (a :: Empty) (b :: Empty) :: Bool where- Equals_0123456789876543210 (_ :: Empty) (_ :: Empty) = TrueSym0- instance PEq Empty where- type (==) a b = Equals_0123456789876543210 a b
+ tests/compile-and-dump/Singletons/EqInstances.ghc88.template view
@@ -0,0 +1,21 @@+Singletons/EqInstances.hs:0:0:: Splicing declarations+ singEqInstances [''Foo, ''Empty]+ ======>+ instance SEq Foo => SEq Foo where+ (%==) SFLeaf SFLeaf = STrue+ (%==) SFLeaf ((:%+:) _ _) = SFalse+ (%==) ((:%+:) _ _) SFLeaf = SFalse+ (%==) ((:%+:) a a) ((:%+:) b b)+ = ((%&&) (((%==) a) b)) (((%==) a) b)+ type family Equals_0123456789876543210 (a :: Foo) (b :: Foo) :: Bool where+ Equals_0123456789876543210 'FLeaf 'FLeaf = TrueSym0+ Equals_0123456789876543210 ('(:+:) a a) ('(:+:) b b) = (&&) ((==) a b) ((==) a b)+ Equals_0123456789876543210 (_ :: Foo) (_ :: Foo) = FalseSym0+ instance PEq Foo where+ type (==) a b = Equals_0123456789876543210 a b+ instance SEq Empty where+ (%==) _ _ = STrue+ type family Equals_0123456789876543210 (a :: Empty) (b :: Empty) :: Bool where+ Equals_0123456789876543210 (_ :: Empty) (_ :: Empty) = TrueSym0+ instance PEq Empty where+ type (==) a b = Equals_0123456789876543210 a b
− tests/compile-and-dump/Singletons/Error.ghc86.template
@@ -1,30 +0,0 @@-Singletons/Error.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| head :: [a] -> a- head (a : _) = a- head [] = error "Data.Singletons.List.head: empty list" |]- ======>- head :: [a] -> a- head (a : _) = a- head [] = error "Data.Singletons.List.head: empty list"- type HeadSym1 (a0123456789876543210 :: [a0123456789876543210]) =- Head a0123456789876543210- instance SuppressUnusedWarnings HeadSym0 where- suppressUnusedWarnings = snd (((,) HeadSym0KindInference) ())- data HeadSym0 :: forall a0123456789876543210.- (~>) [a0123456789876543210] a0123456789876543210- where- HeadSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply HeadSym0 arg) (HeadSym1 arg) =>- HeadSym0 a0123456789876543210- type instance Apply HeadSym0 a0123456789876543210 = Head a0123456789876543210- type family Head (a :: [a]) :: a where- Head ( '(:) a _) = a- Head '[] = Apply ErrorSym0 "Data.Singletons.List.head: empty list"- sHead ::- forall a (t :: [a]). Sing t -> Sing (Apply HeadSym0 t :: a)- sHead (SCons (sA :: Sing a) _) = sA- sHead SNil- = sError (sing :: Sing "Data.Singletons.List.head: empty list")- instance SingI (HeadSym0 :: (~>) [a] a) where- sing = (singFun1 @HeadSym0) sHead
+ tests/compile-and-dump/Singletons/Error.ghc88.template view
@@ -0,0 +1,30 @@+Singletons/Error.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| head :: [a] -> a+ head (a : _) = a+ head [] = error "Data.Singletons.List.head: empty list" |]+ ======>+ head :: [a] -> a+ head (a : _) = a+ head [] = error "Data.Singletons.List.head: empty list"+ type HeadSym1 (a0123456789876543210 :: [a0123456789876543210]) =+ Head a0123456789876543210+ instance SuppressUnusedWarnings HeadSym0 where+ suppressUnusedWarnings = snd (((,) HeadSym0KindInference) ())+ data HeadSym0 :: forall a0123456789876543210.+ (~>) [a0123456789876543210] a0123456789876543210+ where+ HeadSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply HeadSym0 arg) (HeadSym1 arg) =>+ HeadSym0 a0123456789876543210+ type instance Apply HeadSym0 a0123456789876543210 = Head a0123456789876543210+ type family Head (a :: [a]) :: a where+ Head ('(:) a _) = a+ Head '[] = Apply ErrorSym0 "Data.Singletons.List.head: empty list"+ sHead ::+ forall a (t :: [a]). Sing t -> Sing (Apply HeadSym0 t :: a)+ sHead (SCons (sA :: Sing a) _) = sA+ sHead SNil+ = sError (sing :: Sing "Data.Singletons.List.head: empty list")+ instance SingI (HeadSym0 :: (~>) [a] a) where+ sing = (singFun1 @HeadSym0) sHead
− tests/compile-and-dump/Singletons/Fixity.ghc86.template
@@ -1,86 +0,0 @@-Singletons/Fixity.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| infix 4 ====- infix 4 <=>- - (====) :: a -> a -> a- a ==== _ = a- - class MyOrd a where- (<=>) :: a -> a -> Ordering- infix 4 <=> |]- ======>- class MyOrd a where- (<=>) :: a -> a -> Ordering- infix 4 <=>- (====) :: a -> a -> a- (====) a _ = a- infix 4 ====- type (====@#@$$$) (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: a0123456789876543210) =- (====) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((====@#@$$) a0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:====@#@$$###)) ())- data (====@#@$$) (a0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 a0123456789876543210- where- (:====@#@$$###) :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((====@#@$$) a0123456789876543210) arg) ((====@#@$$$) a0123456789876543210 arg) =>- (====@#@$$) a0123456789876543210 a0123456789876543210- type instance Apply ((====@#@$$) a0123456789876543210) a0123456789876543210 = (====) a0123456789876543210 a0123456789876543210- infix 4 ====@#@$$- instance SuppressUnusedWarnings (====@#@$) where- suppressUnusedWarnings = snd (((,) (:====@#@$###)) ())- data (====@#@$) :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) a0123456789876543210 a0123456789876543210)- where- (:====@#@$###) :: forall a0123456789876543210- arg. SameKind (Apply (====@#@$) arg) ((====@#@$$) arg) =>- (====@#@$) a0123456789876543210- type instance Apply (====@#@$) a0123456789876543210 = (====@#@$$) a0123456789876543210- infix 4 ====@#@$- type family (====) (a :: a) (a :: a) :: a where- (====) a _ = a- type (<=>@#@$$$) (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: a0123456789876543210) =- (<=>) arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings ((<=>@#@$$) arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:<=>@#@$$###)) ())- data (<=>@#@$$) (arg0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 Ordering- where- (:<=>@#@$$###) :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply ((<=>@#@$$) arg0123456789876543210) arg) ((<=>@#@$$$) arg0123456789876543210 arg) =>- (<=>@#@$$) arg0123456789876543210 arg0123456789876543210- type instance Apply ((<=>@#@$$) arg0123456789876543210) arg0123456789876543210 = (<=>) arg0123456789876543210 arg0123456789876543210- infix 4 <=>@#@$$- instance SuppressUnusedWarnings (<=>@#@$) where- suppressUnusedWarnings = snd (((,) (:<=>@#@$###)) ())- data (<=>@#@$) :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) a0123456789876543210 Ordering)- where- (:<=>@#@$###) :: forall arg0123456789876543210- arg. SameKind (Apply (<=>@#@$) arg) ((<=>@#@$$) arg) =>- (<=>@#@$) arg0123456789876543210- type instance Apply (<=>@#@$) arg0123456789876543210 = (<=>@#@$$) arg0123456789876543210- infix 4 <=>@#@$- class PMyOrd (a :: GHC.Types.Type) where- type (<=>) (arg :: a) (arg :: a) :: Ordering- infix 4 %====- infix 4 %<=>- (%====) ::- forall a (t :: a) (t :: a).- Sing t -> Sing t -> Sing (Apply (Apply (====@#@$) t) t :: a)- (%====) (sA :: Sing a) _ = sA- instance SingI ((====@#@$) :: (~>) a ((~>) a a)) where- sing = (singFun2 @(====@#@$)) (%====)- instance SingI d => SingI ((====@#@$$) (d :: a) :: (~>) a a) where- sing = (singFun1 @((====@#@$$) (d :: a))) ((%====) (sing @d))- class SMyOrd a where- (%<=>) ::- forall (t :: a) (t :: a).- Sing t -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)- instance SMyOrd a =>- SingI ((<=>@#@$) :: (~>) a ((~>) a Ordering)) where- sing = (singFun2 @(<=>@#@$)) (%<=>)- instance (SMyOrd a, SingI d) =>- SingI ((<=>@#@$$) (d :: a) :: (~>) a Ordering) where- sing = (singFun1 @((<=>@#@$$) (d :: a))) ((%<=>) (sing @d))
+ tests/compile-and-dump/Singletons/Fixity.ghc88.template view
@@ -0,0 +1,86 @@+Singletons/Fixity.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| infix 4 ====+ infix 4 <=>+ + (====) :: a -> a -> a+ a ==== _ = a+ + class MyOrd a where+ (<=>) :: a -> a -> Ordering+ infix 4 <=> |]+ ======>+ class MyOrd a where+ (<=>) :: a -> a -> Ordering+ infix 4 <=>+ (====) :: a -> a -> a+ (====) a _ = a+ infix 4 ====+ type (====@#@$$$) (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: a0123456789876543210) =+ (====) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((====@#@$$) a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:====@#@$$###)) ())+ data (====@#@$$) (a0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 a0123456789876543210+ where+ (:====@#@$$###) :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((====@#@$$) a0123456789876543210) arg) ((====@#@$$$) a0123456789876543210 arg) =>+ (====@#@$$) a0123456789876543210 a0123456789876543210+ type instance Apply ((====@#@$$) a0123456789876543210) a0123456789876543210 = (====) a0123456789876543210 a0123456789876543210+ infix 4 ====@#@$$+ instance SuppressUnusedWarnings (====@#@$) where+ suppressUnusedWarnings = snd (((,) (:====@#@$###)) ())+ data (====@#@$) :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) a0123456789876543210 a0123456789876543210)+ where+ (:====@#@$###) :: forall a0123456789876543210+ arg. SameKind (Apply (====@#@$) arg) ((====@#@$$) arg) =>+ (====@#@$) a0123456789876543210+ type instance Apply (====@#@$) a0123456789876543210 = (====@#@$$) a0123456789876543210+ infix 4 ====@#@$+ type family (====) (a :: a) (a :: a) :: a where+ (====) a _ = a+ type (<=>@#@$$$) (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: a0123456789876543210) =+ (<=>) arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings ((<=>@#@$$) arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:<=>@#@$$###)) ())+ data (<=>@#@$$) (arg0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 Ordering+ where+ (:<=>@#@$$###) :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply ((<=>@#@$$) arg0123456789876543210) arg) ((<=>@#@$$$) arg0123456789876543210 arg) =>+ (<=>@#@$$) arg0123456789876543210 arg0123456789876543210+ type instance Apply ((<=>@#@$$) arg0123456789876543210) arg0123456789876543210 = (<=>) arg0123456789876543210 arg0123456789876543210+ infix 4 <=>@#@$$+ instance SuppressUnusedWarnings (<=>@#@$) where+ suppressUnusedWarnings = snd (((,) (:<=>@#@$###)) ())+ data (<=>@#@$) :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) a0123456789876543210 Ordering)+ where+ (:<=>@#@$###) :: forall arg0123456789876543210+ arg. SameKind (Apply (<=>@#@$) arg) ((<=>@#@$$) arg) =>+ (<=>@#@$) arg0123456789876543210+ type instance Apply (<=>@#@$) arg0123456789876543210 = (<=>@#@$$) arg0123456789876543210+ infix 4 <=>@#@$+ class PMyOrd (a :: GHC.Types.Type) where+ type (<=>) (arg :: a) (arg :: a) :: Ordering+ infix 4 %====+ infix 4 %<=>+ (%====) ::+ forall a (t :: a) (t :: a).+ Sing t -> Sing t -> Sing (Apply (Apply (====@#@$) t) t :: a)+ (%====) (sA :: Sing a) _ = sA+ instance SingI ((====@#@$) :: (~>) a ((~>) a a)) where+ sing = (singFun2 @(====@#@$)) (%====)+ instance SingI d => SingI ((====@#@$$) (d :: a) :: (~>) a a) where+ sing = (singFun1 @((====@#@$$) (d :: a))) ((%====) (sing @d))+ class SMyOrd a where+ (%<=>) ::+ forall (t :: a) (t :: a).+ Sing t -> Sing t -> Sing (Apply (Apply (<=>@#@$) t) t :: Ordering)+ instance SMyOrd a =>+ SingI ((<=>@#@$) :: (~>) a ((~>) a Ordering)) where+ sing = (singFun2 @(<=>@#@$)) (%<=>)+ instance (SMyOrd a, SingI d) =>+ SingI ((<=>@#@$$) (d :: a) :: (~>) a Ordering) where+ sing = (singFun1 @((<=>@#@$$) (d :: a))) ((%<=>) (sing @d))
− tests/compile-and-dump/Singletons/FunDeps.ghc86.template
@@ -1,96 +0,0 @@-Singletons/FunDeps.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| t1 = meth True- - class FD a b | a -> b where- meth :: a -> a- l2r :: a -> b- - instance FD Bool Nat where- meth = not- l2r False = 0- l2r True = 1 |]- ======>- class FD a b | a -> b where- meth :: a -> a- l2r :: a -> b- instance FD Bool Nat where- meth = not- l2r False = 0- l2r True = 1- t1 = meth True- type T1Sym0 = T1- type family T1 where- T1 = Apply MethSym0 TrueSym0- type MethSym1 (arg0123456789876543210 :: a0123456789876543210) =- Meth arg0123456789876543210- instance SuppressUnusedWarnings MethSym0 where- suppressUnusedWarnings = snd (((,) MethSym0KindInference) ())- data MethSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- MethSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply MethSym0 arg) (MethSym1 arg) =>- MethSym0 arg0123456789876543210- type instance Apply MethSym0 arg0123456789876543210 = Meth arg0123456789876543210- type L2rSym1 (arg0123456789876543210 :: a0123456789876543210) =- L2r arg0123456789876543210- instance SuppressUnusedWarnings L2rSym0 where- suppressUnusedWarnings = snd (((,) L2rSym0KindInference) ())- data L2rSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 b0123456789876543210- where- L2rSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply L2rSym0 arg) (L2rSym1 arg) =>- L2rSym0 arg0123456789876543210- type instance Apply L2rSym0 arg0123456789876543210 = L2r arg0123456789876543210- class PFD (a :: GHC.Types.Type) (b :: GHC.Types.Type) | a -> b where- type Meth (arg :: a) :: a- type L2r (arg :: a) :: b- type family Meth_0123456789876543210 (a :: Bool) :: Bool where- Meth_0123456789876543210 a_0123456789876543210 = Apply NotSym0 a_0123456789876543210- type Meth_0123456789876543210Sym1 (a0123456789876543210 :: Bool) =- Meth_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Meth_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Meth_0123456789876543210Sym0KindInference) ())- data Meth_0123456789876543210Sym0 :: (~>) Bool Bool- where- Meth_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Meth_0123456789876543210Sym0 arg) (Meth_0123456789876543210Sym1 arg) =>- Meth_0123456789876543210Sym0 a0123456789876543210- type instance Apply Meth_0123456789876543210Sym0 a0123456789876543210 = Meth_0123456789876543210 a0123456789876543210- type family L2r_0123456789876543210 (a :: Bool) :: Nat where- L2r_0123456789876543210 'False = FromInteger 0- L2r_0123456789876543210 'True = FromInteger 1- type L2r_0123456789876543210Sym1 (a0123456789876543210 :: Bool) =- L2r_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings L2r_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) L2r_0123456789876543210Sym0KindInference) ())- data L2r_0123456789876543210Sym0 :: (~>) Bool Nat- where- L2r_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply L2r_0123456789876543210Sym0 arg) (L2r_0123456789876543210Sym1 arg) =>- L2r_0123456789876543210Sym0 a0123456789876543210- type instance Apply L2r_0123456789876543210Sym0 a0123456789876543210 = L2r_0123456789876543210 a0123456789876543210- instance PFD Bool Nat where- type Meth a = Apply Meth_0123456789876543210Sym0 a- type L2r a = Apply L2r_0123456789876543210Sym0 a- sT1 :: Sing T1Sym0- sT1 = (applySing ((singFun1 @MethSym0) sMeth)) STrue- class SFD a b | a -> b where- sMeth :: forall (t :: a). Sing t -> Sing (Apply MethSym0 t :: a)- sL2r :: forall (t :: a). Sing t -> Sing (Apply L2rSym0 t :: b)- instance SFD Bool Nat where- sMeth ::- forall (t :: Bool). Sing t -> Sing (Apply MethSym0 t :: Bool)- sL2r :: forall (t :: Bool). Sing t -> Sing (Apply L2rSym0 t :: Nat)- sMeth (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing ((singFun1 @NotSym0) sNot)) sA_0123456789876543210- sL2r SFalse = sFromInteger (sing :: Sing 0)- sL2r STrue = sFromInteger (sing :: Sing 1)- instance SFD a b => SingI (MethSym0 :: (~>) a a) where- sing = (singFun1 @MethSym0) sMeth- instance SFD a b => SingI (L2rSym0 :: (~>) a b) where- sing = (singFun1 @L2rSym0) sL2r
+ tests/compile-and-dump/Singletons/FunDeps.ghc88.template view
@@ -0,0 +1,96 @@+Singletons/FunDeps.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| t1 = meth True+ + class FD a b | a -> b where+ meth :: a -> a+ l2r :: a -> b+ + instance FD Bool Nat where+ meth = not+ l2r False = 0+ l2r True = 1 |]+ ======>+ class FD a b | a -> b where+ meth :: a -> a+ l2r :: a -> b+ instance FD Bool Nat where+ meth = not+ l2r False = 0+ l2r True = 1+ t1 = meth True+ type T1Sym0 = T1+ type family T1 where+ T1 = Apply MethSym0 TrueSym0+ type MethSym1 (arg0123456789876543210 :: a0123456789876543210) =+ Meth arg0123456789876543210+ instance SuppressUnusedWarnings MethSym0 where+ suppressUnusedWarnings = snd (((,) MethSym0KindInference) ())+ data MethSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ MethSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply MethSym0 arg) (MethSym1 arg) =>+ MethSym0 arg0123456789876543210+ type instance Apply MethSym0 arg0123456789876543210 = Meth arg0123456789876543210+ type L2rSym1 (arg0123456789876543210 :: a0123456789876543210) =+ L2r arg0123456789876543210+ instance SuppressUnusedWarnings L2rSym0 where+ suppressUnusedWarnings = snd (((,) L2rSym0KindInference) ())+ data L2rSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 b0123456789876543210+ where+ L2rSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply L2rSym0 arg) (L2rSym1 arg) =>+ L2rSym0 arg0123456789876543210+ type instance Apply L2rSym0 arg0123456789876543210 = L2r arg0123456789876543210+ class PFD (a :: GHC.Types.Type) (b :: GHC.Types.Type) | a -> b where+ type Meth (arg :: a) :: a+ type L2r (arg :: a) :: b+ type family Meth_0123456789876543210 (a :: Bool) :: Bool where+ Meth_0123456789876543210 a_0123456789876543210 = Apply NotSym0 a_0123456789876543210+ type Meth_0123456789876543210Sym1 (a0123456789876543210 :: Bool) =+ Meth_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Meth_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Meth_0123456789876543210Sym0KindInference) ())+ data Meth_0123456789876543210Sym0 :: (~>) Bool Bool+ where+ Meth_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Meth_0123456789876543210Sym0 arg) (Meth_0123456789876543210Sym1 arg) =>+ Meth_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Meth_0123456789876543210Sym0 a0123456789876543210 = Meth_0123456789876543210 a0123456789876543210+ type family L2r_0123456789876543210 (a :: Bool) :: Nat where+ L2r_0123456789876543210 'False = FromInteger 0+ L2r_0123456789876543210 'True = FromInteger 1+ type L2r_0123456789876543210Sym1 (a0123456789876543210 :: Bool) =+ L2r_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings L2r_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) L2r_0123456789876543210Sym0KindInference) ())+ data L2r_0123456789876543210Sym0 :: (~>) Bool Nat+ where+ L2r_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply L2r_0123456789876543210Sym0 arg) (L2r_0123456789876543210Sym1 arg) =>+ L2r_0123456789876543210Sym0 a0123456789876543210+ type instance Apply L2r_0123456789876543210Sym0 a0123456789876543210 = L2r_0123456789876543210 a0123456789876543210+ instance PFD Bool Nat where+ type Meth a = Apply Meth_0123456789876543210Sym0 a+ type L2r a = Apply L2r_0123456789876543210Sym0 a+ sT1 :: Sing T1Sym0+ sT1 = (applySing ((singFun1 @MethSym0) sMeth)) STrue+ class SFD a b | a -> b where+ sMeth :: forall (t :: a). Sing t -> Sing (Apply MethSym0 t :: a)+ sL2r :: forall (t :: a). Sing t -> Sing (Apply L2rSym0 t :: b)+ instance SFD Bool Nat where+ sMeth ::+ forall (t :: Bool). Sing t -> Sing (Apply MethSym0 t :: Bool)+ sL2r :: forall (t :: Bool). Sing t -> Sing (Apply L2rSym0 t :: Nat)+ sMeth (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing ((singFun1 @NotSym0) sNot)) sA_0123456789876543210+ sL2r SFalse = sFromInteger (sing :: Sing 0)+ sL2r STrue = sFromInteger (sing :: Sing 1)+ instance SFD a b => SingI (MethSym0 :: (~>) a a) where+ sing = (singFun1 @MethSym0) sMeth+ instance SFD a b => SingI (L2rSym0 :: (~>) a b) where+ sing = (singFun1 @L2rSym0) sL2r
− tests/compile-and-dump/Singletons/FunctorLikeDeriving.ghc86.template
@@ -1,1646 +0,0 @@-Singletons/FunctorLikeDeriving.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data T x a- = MkT1 x a (Maybe a) (Maybe (Maybe a)) | MkT2 (Maybe x)- deriving (Functor, Foldable, Traversable)- data Empty (a :: Type) deriving (Functor, Foldable, Traversable) |]- ======>- data T x a- = MkT1 x a (Maybe a) (Maybe (Maybe a)) | MkT2 (Maybe x)- deriving (Functor, Foldable, Traversable)- data Empty (a :: Type) deriving (Functor, Foldable, Traversable)- type MkT1Sym4 (t0123456789876543210 :: x0123456789876543210) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: Maybe a0123456789876543210) (t0123456789876543210 :: Maybe (Maybe a0123456789876543210)) =- MkT1 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (MkT1Sym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) MkT1Sym3KindInference) ())- data MkT1Sym3 (t0123456789876543210 :: x0123456789876543210) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: Maybe a0123456789876543210) :: (~>) (Maybe (Maybe a0123456789876543210)) (T x0123456789876543210 a0123456789876543210)- where- MkT1Sym3KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (MkT1Sym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (MkT1Sym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>- MkT1Sym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (MkT1Sym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = MkT1 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (MkT1Sym2 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) MkT1Sym2KindInference) ())- data MkT1Sym2 (t0123456789876543210 :: x0123456789876543210) (t0123456789876543210 :: a0123456789876543210) :: (~>) (Maybe a0123456789876543210) ((~>) (Maybe (Maybe a0123456789876543210)) (T x0123456789876543210 a0123456789876543210))- where- MkT1Sym2KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (MkT1Sym2 t0123456789876543210 t0123456789876543210) arg) (MkT1Sym3 t0123456789876543210 t0123456789876543210 arg) =>- MkT1Sym2 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (MkT1Sym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = MkT1Sym3 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (MkT1Sym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) MkT1Sym1KindInference) ())- data MkT1Sym1 (t0123456789876543210 :: x0123456789876543210) :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) ((~>) (Maybe (Maybe a0123456789876543210)) (T x0123456789876543210 a0123456789876543210)))- where- MkT1Sym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (MkT1Sym1 t0123456789876543210) arg) (MkT1Sym2 t0123456789876543210 arg) =>- MkT1Sym1 t0123456789876543210 t0123456789876543210- type instance Apply (MkT1Sym1 t0123456789876543210) t0123456789876543210 = MkT1Sym2 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings MkT1Sym0 where- suppressUnusedWarnings = snd (((,) MkT1Sym0KindInference) ())- data MkT1Sym0 :: forall a0123456789876543210 x0123456789876543210.- (~>) x0123456789876543210 ((~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) ((~>) (Maybe (Maybe a0123456789876543210)) (T x0123456789876543210 a0123456789876543210))))- where- MkT1Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkT1Sym0 arg) (MkT1Sym1 arg) =>- MkT1Sym0 t0123456789876543210- type instance Apply MkT1Sym0 t0123456789876543210 = MkT1Sym1 t0123456789876543210- type MkT2Sym1 (t0123456789876543210 :: Maybe x0123456789876543210) =- MkT2 t0123456789876543210- instance SuppressUnusedWarnings MkT2Sym0 where- suppressUnusedWarnings = snd (((,) MkT2Sym0KindInference) ())- data MkT2Sym0 :: forall a0123456789876543210 x0123456789876543210.- (~>) (Maybe x0123456789876543210) (T x0123456789876543210 a0123456789876543210)- where- MkT2Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkT2Sym0 arg) (MkT2Sym1 arg) =>- MkT2Sym0 t0123456789876543210- type instance Apply MkT2Sym0 t0123456789876543210 = MkT2 t0123456789876543210- type family Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t where- Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = n_0123456789876543210- type Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())- data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210- type family Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 t where- Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = n_0123456789876543210- type Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210- type family Fmap_0123456789876543210 (a :: (~>) a b) (a :: T x a) :: T x b where- Fmap_0123456789876543210 _f_0123456789876543210 (MkT1 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) = Apply (Apply (Apply (Apply MkT1Sym0 (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210)) (Apply _f_0123456789876543210 a_0123456789876543210)) (Apply (Apply FmapSym0 _f_0123456789876543210) a_0123456789876543210)) (Apply (Apply FmapSym0 (Apply FmapSym0 _f_0123456789876543210)) a_0123456789876543210)- Fmap_0123456789876543210 _f_0123456789876543210 (MkT2 a_0123456789876543210) = Apply MkT2Sym0 (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210)- type Fmap_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: T x0123456789876543210 a0123456789876543210) =- Fmap_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Fmap_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Fmap_0123456789876543210Sym1KindInference) ())- data Fmap_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: forall x0123456789876543210.- (~>) (T x0123456789876543210 a0123456789876543210) (T x0123456789876543210 b0123456789876543210)- where- Fmap_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Fmap_0123456789876543210Sym1 a0123456789876543210) arg) (Fmap_0123456789876543210Sym2 a0123456789876543210 arg) =>- Fmap_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Fmap_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Fmap_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Fmap_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Fmap_0123456789876543210Sym0KindInference) ())- data Fmap_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210- x0123456789876543210.- (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) (T x0123456789876543210 a0123456789876543210) (T x0123456789876543210 b0123456789876543210))- where- Fmap_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Fmap_0123456789876543210Sym0 arg) (Fmap_0123456789876543210Sym1 arg) =>- Fmap_0123456789876543210Sym0 a0123456789876543210- type instance Apply Fmap_0123456789876543210Sym0 a0123456789876543210 = Fmap_0123456789876543210Sym1 a0123456789876543210- type family Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t where- Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = n_0123456789876543210- type Lambda_0123456789876543210Sym6 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())- data Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym5KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _z_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210- type family Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t where- Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = _z_0123456789876543210- type Lambda_0123456789876543210Sym6 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())- data Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym5KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _z_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210- type family Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 t where- Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = n_0123456789876543210- type Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _z_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210- type family TFHelper_0123456789876543210 (a :: a) (a :: T x b) :: T x a where- TFHelper_0123456789876543210 _z_0123456789876543210 (MkT1 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) = Apply (Apply (Apply (Apply MkT1Sym0 (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210)) (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210)) (Apply (Apply (<$@#@$) _z_0123456789876543210) a_0123456789876543210)) (Apply (Apply FmapSym0 (Apply (<$@#@$) _z_0123456789876543210)) a_0123456789876543210)- TFHelper_0123456789876543210 _z_0123456789876543210 (MkT2 a_0123456789876543210) = Apply MkT2Sym0 (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210)- type TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: T x0123456789876543210 b0123456789876543210) =- TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())- data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210- x0123456789876543210.- (~>) (T x0123456789876543210 b0123456789876543210) (T x0123456789876543210 a0123456789876543210)- where- TFHelper_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>- TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())- data TFHelper_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210- x0123456789876543210.- (~>) a0123456789876543210 ((~>) (T x0123456789876543210 b0123456789876543210) (T x0123456789876543210 a0123456789876543210))- where- TFHelper_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>- TFHelper_0123456789876543210Sym0 a0123456789876543210- type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210- instance PFunctor (T x) where- type Fmap a a = Apply (Apply Fmap_0123456789876543210Sym0 a) a- type (<$) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a- type family Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t where- Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = MemptySym0- type Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())- data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210- type family Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 t where- Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = MemptySym0- type Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210- type family FoldMap_0123456789876543210 (a :: (~>) a m) (a :: T x a) :: m where- FoldMap_0123456789876543210 _f_0123456789876543210 (MkT1 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) = Apply (Apply MappendSym0 (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210)) (Apply (Apply MappendSym0 (Apply _f_0123456789876543210 a_0123456789876543210)) (Apply (Apply MappendSym0 (Apply (Apply FoldMapSym0 _f_0123456789876543210) a_0123456789876543210)) (Apply (Apply FoldMapSym0 (Apply FoldMapSym0 _f_0123456789876543210)) a_0123456789876543210)))- FoldMap_0123456789876543210 _f_0123456789876543210 (MkT2 a_0123456789876543210) = Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210- type FoldMap_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a0123456789876543210 m0123456789876543210) (a0123456789876543210 :: T x0123456789876543210 a0123456789876543210) =- FoldMap_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (FoldMap_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) FoldMap_0123456789876543210Sym1KindInference) ())- data FoldMap_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a0123456789876543210 m0123456789876543210) :: forall x0123456789876543210.- (~>) (T x0123456789876543210 a0123456789876543210) m0123456789876543210- where- FoldMap_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (FoldMap_0123456789876543210Sym1 a0123456789876543210) arg) (FoldMap_0123456789876543210Sym2 a0123456789876543210 arg) =>- FoldMap_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (FoldMap_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = FoldMap_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FoldMap_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) FoldMap_0123456789876543210Sym0KindInference) ())- data FoldMap_0123456789876543210Sym0 :: forall a0123456789876543210- m0123456789876543210- x0123456789876543210.- (~>) ((~>) a0123456789876543210 m0123456789876543210) ((~>) (T x0123456789876543210 a0123456789876543210) m0123456789876543210)- where- FoldMap_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FoldMap_0123456789876543210Sym0 arg) (FoldMap_0123456789876543210Sym1 arg) =>- FoldMap_0123456789876543210Sym0 a0123456789876543210- type instance Apply FoldMap_0123456789876543210Sym0 a0123456789876543210 = FoldMap_0123456789876543210Sym1 a0123456789876543210- type family Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where- Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 = n2_0123456789876543210- type Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym7KindInference) ())- data Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym7KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>- Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym6KindInference) ())- data Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym6KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())- data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210- type family Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where- Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 = Apply (Apply (Apply FoldrSym0 _f_0123456789876543210) n2_0123456789876543210) n1_0123456789876543210- type Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym7KindInference) ())- data Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym7KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>- Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym6KindInference) ())- data Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym6KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())- data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210- type family Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where- Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 = Apply (Apply (Apply FoldrSym0 _f_0123456789876543210) n2_0123456789876543210) n1_0123456789876543210- type Lambda_0123456789876543210Sym10 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym9 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym9KindInference) ())- data Lambda_0123456789876543210Sym9 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym9KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- n1_01234567898765432100123456789876543210- n2_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym9 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym10 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>- Lambda_0123456789876543210Sym9 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym9 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym8 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym8KindInference) ())- data Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym8KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- n1_01234567898765432100123456789876543210- n2_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym9 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym8 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym9 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym7KindInference) ())- data Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym7KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- n1_01234567898765432100123456789876543210- n2_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym8 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym6KindInference) ())- data Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym6KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- n1_01234567898765432100123456789876543210- n2_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())- data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- n1_01234567898765432100123456789876543210- n2_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- n1_01234567898765432100123456789876543210- n2_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- n1_01234567898765432100123456789876543210- n2_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) n2_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- n1_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) n1_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210- type family Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where- Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 = Apply (Apply (Apply FoldrSym0 (Apply (Apply (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) n1_0123456789876543210) n2_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210)) n2_0123456789876543210) n1_0123456789876543210- type Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym7KindInference) ())- data Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym7KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>- Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym6KindInference) ())- data Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym6KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())- data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210- type family Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 t t where- Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 = n2_0123456789876543210- type Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 t0123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 t0123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210- _z_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210- type family Foldr_0123456789876543210 (a :: (~>) a ((~>) b b)) (a :: b) (a :: T x a) :: b where- Foldr_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 (MkT1 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) = Apply (Apply (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) (Apply (Apply _f_0123456789876543210 a_0123456789876543210) (Apply (Apply (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) (Apply (Apply (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) _z_0123456789876543210)))- Foldr_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 (MkT2 a_0123456789876543210) = Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) _z_0123456789876543210- type Foldr_0123456789876543210Sym3 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)) (a0123456789876543210 :: b0123456789876543210) (a0123456789876543210 :: T x0123456789876543210 a0123456789876543210) =- Foldr_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foldr_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Foldr_0123456789876543210Sym2KindInference) ())- data Foldr_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)) (a0123456789876543210 :: b0123456789876543210) :: forall x0123456789876543210.- (~>) (T x0123456789876543210 a0123456789876543210) b0123456789876543210- where- Foldr_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foldr_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (Foldr_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- Foldr_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (Foldr_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = Foldr_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foldr_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Foldr_0123456789876543210Sym1KindInference) ())- data Foldr_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)) :: forall x0123456789876543210.- (~>) b0123456789876543210 ((~>) (T x0123456789876543210 a0123456789876543210) b0123456789876543210)- where- Foldr_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foldr_0123456789876543210Sym1 a0123456789876543210) arg) (Foldr_0123456789876543210Sym2 a0123456789876543210 arg) =>- Foldr_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foldr_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Foldr_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foldr_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Foldr_0123456789876543210Sym0KindInference) ())- data Foldr_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210- x0123456789876543210.- (~>) ((~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)) ((~>) b0123456789876543210 ((~>) (T x0123456789876543210 a0123456789876543210) b0123456789876543210))- where- Foldr_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foldr_0123456789876543210Sym0 arg) (Foldr_0123456789876543210Sym1 arg) =>- Foldr_0123456789876543210Sym0 a0123456789876543210- type instance Apply Foldr_0123456789876543210Sym0 a0123456789876543210 = Foldr_0123456789876543210Sym1 a0123456789876543210- instance PFoldable (T x) where- type FoldMap a a = Apply (Apply FoldMap_0123456789876543210Sym0 a) a- type Foldr a a a = Apply (Apply (Apply Foldr_0123456789876543210Sym0 a) a) a- type family Traverse_0123456789876543210 (a :: (~>) a (f b)) (a :: T x a) :: f (T x b) where- Traverse_0123456789876543210 _f_0123456789876543210 (MkT1 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) = Apply (Apply (<*>@#@$) (Apply (Apply (<*>@#@$) (Apply (Apply (Apply LiftA2Sym0 MkT1Sym0) (Apply PureSym0 a_0123456789876543210)) (Apply _f_0123456789876543210 a_0123456789876543210))) (Apply (Apply TraverseSym0 _f_0123456789876543210) a_0123456789876543210))) (Apply (Apply TraverseSym0 (Apply TraverseSym0 _f_0123456789876543210)) a_0123456789876543210)- Traverse_0123456789876543210 _f_0123456789876543210 (MkT2 a_0123456789876543210) = Apply (Apply FmapSym0 MkT2Sym0) (Apply PureSym0 a_0123456789876543210)- type Traverse_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a0123456789876543210 (f0123456789876543210 b0123456789876543210)) (a0123456789876543210 :: T x0123456789876543210 a0123456789876543210) =- Traverse_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Traverse_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Traverse_0123456789876543210Sym1KindInference) ())- data Traverse_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a0123456789876543210 (f0123456789876543210 b0123456789876543210)) :: forall x0123456789876543210.- (~>) (T x0123456789876543210 a0123456789876543210) (f0123456789876543210 (T x0123456789876543210 b0123456789876543210))- where- Traverse_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Traverse_0123456789876543210Sym1 a0123456789876543210) arg) (Traverse_0123456789876543210Sym2 a0123456789876543210 arg) =>- Traverse_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Traverse_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Traverse_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Traverse_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Traverse_0123456789876543210Sym0KindInference) ())- data Traverse_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210- f0123456789876543210- x0123456789876543210.- (~>) ((~>) a0123456789876543210 (f0123456789876543210 b0123456789876543210)) ((~>) (T x0123456789876543210 a0123456789876543210) (f0123456789876543210 (T x0123456789876543210 b0123456789876543210)))- where- Traverse_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Traverse_0123456789876543210Sym0 arg) (Traverse_0123456789876543210Sym1 arg) =>- Traverse_0123456789876543210Sym0 a0123456789876543210- type instance Apply Traverse_0123456789876543210Sym0 a0123456789876543210 = Traverse_0123456789876543210Sym1 a0123456789876543210- instance PTraversable (T x) where- type Traverse a a = Apply (Apply Traverse_0123456789876543210Sym0 a) a- type family Case_0123456789876543210 v_0123456789876543210 t where- type family Fmap_0123456789876543210 (a :: (~>) a b) (a :: Empty a) :: Empty b where- Fmap_0123456789876543210 _ v_0123456789876543210 = Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210- type Fmap_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: Empty a0123456789876543210) =- Fmap_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Fmap_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Fmap_0123456789876543210Sym1KindInference) ())- data Fmap_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) (Empty a0123456789876543210) (Empty b0123456789876543210)- where- Fmap_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Fmap_0123456789876543210Sym1 a0123456789876543210) arg) (Fmap_0123456789876543210Sym2 a0123456789876543210 arg) =>- Fmap_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Fmap_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Fmap_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Fmap_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Fmap_0123456789876543210Sym0KindInference) ())- data Fmap_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) (Empty a0123456789876543210) (Empty b0123456789876543210))- where- Fmap_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Fmap_0123456789876543210Sym0 arg) (Fmap_0123456789876543210Sym1 arg) =>- Fmap_0123456789876543210Sym0 a0123456789876543210- type instance Apply Fmap_0123456789876543210Sym0 a0123456789876543210 = Fmap_0123456789876543210Sym1 a0123456789876543210- type family Case_0123456789876543210 v_0123456789876543210 t where- type family TFHelper_0123456789876543210 (a :: a) (a :: Empty b) :: Empty a where- TFHelper_0123456789876543210 _ v_0123456789876543210 = Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210- type TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: Empty b0123456789876543210) =- TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())- data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) (Empty b0123456789876543210) (Empty a0123456789876543210)- where- TFHelper_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>- TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())- data TFHelper_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) a0123456789876543210 ((~>) (Empty b0123456789876543210) (Empty a0123456789876543210))- where- TFHelper_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>- TFHelper_0123456789876543210Sym0 a0123456789876543210- type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210- instance PFunctor Empty where- type Fmap a a = Apply (Apply Fmap_0123456789876543210Sym0 a) a- type (<$) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a- type family FoldMap_0123456789876543210 (a :: (~>) a m) (a :: Empty a) :: m where- FoldMap_0123456789876543210 _ _ = MemptySym0- type FoldMap_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a0123456789876543210 m0123456789876543210) (a0123456789876543210 :: Empty a0123456789876543210) =- FoldMap_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (FoldMap_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) FoldMap_0123456789876543210Sym1KindInference) ())- data FoldMap_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a0123456789876543210 m0123456789876543210) :: (~>) (Empty a0123456789876543210) m0123456789876543210- where- FoldMap_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (FoldMap_0123456789876543210Sym1 a0123456789876543210) arg) (FoldMap_0123456789876543210Sym2 a0123456789876543210 arg) =>- FoldMap_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (FoldMap_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = FoldMap_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FoldMap_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) FoldMap_0123456789876543210Sym0KindInference) ())- data FoldMap_0123456789876543210Sym0 :: forall a0123456789876543210- m0123456789876543210.- (~>) ((~>) a0123456789876543210 m0123456789876543210) ((~>) (Empty a0123456789876543210) m0123456789876543210)- where- FoldMap_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FoldMap_0123456789876543210Sym0 arg) (FoldMap_0123456789876543210Sym1 arg) =>- FoldMap_0123456789876543210Sym0 a0123456789876543210- type instance Apply FoldMap_0123456789876543210Sym0 a0123456789876543210 = FoldMap_0123456789876543210Sym1 a0123456789876543210- instance PFoldable Empty where- type FoldMap a a = Apply (Apply FoldMap_0123456789876543210Sym0 a) a- type family Case_0123456789876543210 v_0123456789876543210 t where- type family Traverse_0123456789876543210 (a :: (~>) a (f b)) (a :: Empty a) :: f (Empty b) where- Traverse_0123456789876543210 _ v_0123456789876543210 = Apply PureSym0 (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210)- type Traverse_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a0123456789876543210 (f0123456789876543210 b0123456789876543210)) (a0123456789876543210 :: Empty a0123456789876543210) =- Traverse_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Traverse_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Traverse_0123456789876543210Sym1KindInference) ())- data Traverse_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a0123456789876543210 (f0123456789876543210 b0123456789876543210)) :: (~>) (Empty a0123456789876543210) (f0123456789876543210 (Empty b0123456789876543210))- where- Traverse_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Traverse_0123456789876543210Sym1 a0123456789876543210) arg) (Traverse_0123456789876543210Sym2 a0123456789876543210 arg) =>- Traverse_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Traverse_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Traverse_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Traverse_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Traverse_0123456789876543210Sym0KindInference) ())- data Traverse_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210- f0123456789876543210.- (~>) ((~>) a0123456789876543210 (f0123456789876543210 b0123456789876543210)) ((~>) (Empty a0123456789876543210) (f0123456789876543210 (Empty b0123456789876543210)))- where- Traverse_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Traverse_0123456789876543210Sym0 arg) (Traverse_0123456789876543210Sym1 arg) =>- Traverse_0123456789876543210Sym0 a0123456789876543210- type instance Apply Traverse_0123456789876543210Sym0 a0123456789876543210 = Traverse_0123456789876543210Sym1 a0123456789876543210- instance PTraversable Empty where- type Traverse a a = Apply (Apply Traverse_0123456789876543210Sym0 a) a- data instance Sing :: T x a -> Type- where- SMkT1 :: forall x- a- (n :: x)- (n :: a)- (n :: Maybe a)- (n :: Maybe (Maybe a)).- (Sing (n :: x))- -> (Sing (n :: a))- -> (Sing (n :: Maybe a))- -> (Sing (n :: Maybe (Maybe a))) -> Sing (MkT1 n n n n)- SMkT2 :: forall x (n :: Maybe x).- (Sing (n :: Maybe x)) -> Sing (MkT2 n)- type ST = (Sing :: T x a -> Type)- instance (SingKind x, SingKind a) => SingKind (T x a) where- type Demote (T x a) = T (Demote x) (Demote a)- fromSing (SMkT1 b b b b)- = (((MkT1 (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)- fromSing (SMkT2 b) = MkT2 (fromSing b)- toSing- (MkT1 (b :: Demote x)- (b :: Demote a)- (b :: Demote (Maybe a))- (b :: Demote (Maybe (Maybe a))))- = case- ((((,,,) (toSing b :: SomeSing x)) (toSing b :: SomeSing a))- (toSing b :: SomeSing (Maybe a)))- (toSing b :: SomeSing (Maybe (Maybe a)))- of {- (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)- -> SomeSing ((((SMkT1 c) c) c) c) }- toSing (MkT2 (b :: Demote (Maybe x)))- = case toSing b :: SomeSing (Maybe x) of {- SomeSing c -> SomeSing (SMkT2 c) }- data instance Sing :: Empty a -> Type- type SEmpty = (Sing :: Empty a -> Type)- instance SingKind a => SingKind (Empty a) where- type Demote (Empty a) = Empty (Demote a)- fromSing x = case x of- toSing x = SomeSing (case x of)- instance SFunctor (T x) where- sFmap ::- forall (a :: Type) (b :: Type) (t1 :: (~>) a b) (t2 :: T x a).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (FmapSym0 :: TyFun ((~>) a b) ((~>) (T x a) (T x b))- -> Type) t1) t2)- (%<$) ::- forall (a :: Type) (b :: Type) (t1 :: a) (t2 :: T x b).- Sing t1- -> Sing t2- -> Sing (Apply (Apply ((<$@#@$) :: TyFun a ((~>) (T x b) (T x a))- -> Type) t1) t2)- sFmap- (_sf_0123456789876543210 :: Sing _f_0123456789876543210)- (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- = (applySing- ((applySing- ((applySing- ((applySing ((singFun4 @MkT1Sym0) SMkT1))- ((applySing- ((singFun1- @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))- (\ sN_0123456789876543210- -> case sN_0123456789876543210 of {- (_ :: Sing n_0123456789876543210)- -> sN_0123456789876543210 })))- sA_0123456789876543210)))- ((applySing _sf_0123456789876543210) sA_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @FmapSym0) sFmap)) _sf_0123456789876543210))- sA_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @FmapSym0) sFmap))- ((applySing ((singFun2 @FmapSym0) sFmap))- _sf_0123456789876543210)))- sA_0123456789876543210)- sFmap- (_sf_0123456789876543210 :: Sing _f_0123456789876543210)- (SMkT2 (sA_0123456789876543210 :: Sing a_0123456789876543210))- = (applySing ((singFun1 @MkT2Sym0) SMkT2))- ((applySing- ((singFun1- @(Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210))- (\ sN_0123456789876543210- -> case sN_0123456789876543210 of {- (_ :: Sing n_0123456789876543210) -> sN_0123456789876543210 })))- sA_0123456789876543210)- (%<$)- (_sz_0123456789876543210 :: Sing _z_0123456789876543210)- (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- = (applySing- ((applySing- ((applySing- ((applySing ((singFun4 @MkT1Sym0) SMkT1))- ((applySing- ((singFun1- @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))- (\ sN_0123456789876543210- -> case sN_0123456789876543210 of {- (_ :: Sing n_0123456789876543210)- -> sN_0123456789876543210 })))- sA_0123456789876543210)))- ((applySing- ((singFun1- @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))- (\ sN_0123456789876543210- -> case sN_0123456789876543210 of {- (_ :: Sing n_0123456789876543210) -> _sz_0123456789876543210 })))- sA_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(<$@#@$)) (%<$))) _sz_0123456789876543210))- sA_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @FmapSym0) sFmap))- ((applySing ((singFun2 @(<$@#@$)) (%<$)))- _sz_0123456789876543210)))- sA_0123456789876543210)- (%<$)- (_sz_0123456789876543210 :: Sing _z_0123456789876543210)- (SMkT2 (sA_0123456789876543210 :: Sing a_0123456789876543210))- = (applySing ((singFun1 @MkT2Sym0) SMkT2))- ((applySing- ((singFun1- @(Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210))- (\ sN_0123456789876543210- -> case sN_0123456789876543210 of {- (_ :: Sing n_0123456789876543210) -> sN_0123456789876543210 })))- sA_0123456789876543210)- instance SFoldable (T x) where- sFoldMap ::- forall (m :: Type) (a :: Type) (t1 :: (~>) a m) (t2 :: T x a).- SMonoid m =>- Sing t1- -> Sing t2- -> Sing (Apply (Apply (FoldMapSym0 :: TyFun ((~>) a m) ((~>) (T x a) m)- -> Type) t1) t2)- sFoldr ::- forall (a :: Type)- (b :: Type)- (t1 :: (~>) a ((~>) b b))- (t2 :: b)- (t3 :: T x a).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (FoldrSym0 :: TyFun ((~>) a ((~>) b b)) ((~>) b ((~>) (T x a) b))- -> Type) t1) t2) t3)- sFoldMap- (_sf_0123456789876543210 :: Sing _f_0123456789876543210)- (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- = (applySing- ((applySing ((singFun2 @MappendSym0) sMappend))- ((applySing- ((singFun1- @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))- (\ sN_0123456789876543210- -> case sN_0123456789876543210 of {- (_ :: Sing n_0123456789876543210) -> sMempty })))- sA_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @MappendSym0) sMappend))- ((applySing _sf_0123456789876543210) sA_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @MappendSym0) sMappend))- ((applySing- ((applySing ((singFun2 @FoldMapSym0) sFoldMap))- _sf_0123456789876543210))- sA_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @FoldMapSym0) sFoldMap))- ((applySing ((singFun2 @FoldMapSym0) sFoldMap))- _sf_0123456789876543210)))- sA_0123456789876543210)))- sFoldMap- (_sf_0123456789876543210 :: Sing _f_0123456789876543210)- (SMkT2 (sA_0123456789876543210 :: Sing a_0123456789876543210))- = (applySing- ((singFun1- @(Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210))- (\ sN_0123456789876543210- -> case sN_0123456789876543210 of {- (_ :: Sing n_0123456789876543210) -> sMempty })))- sA_0123456789876543210- sFoldr- (_sf_0123456789876543210 :: Sing _f_0123456789876543210)- (_sz_0123456789876543210 :: Sing _z_0123456789876543210)- (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- = (applySing- ((applySing- ((singFun2- @(Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))- (\ sN1_0123456789876543210 sN2_0123456789876543210- -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {- (,) (_ :: Sing n1_0123456789876543210)- (_ :: Sing n2_0123456789876543210)- -> sN2_0123456789876543210 })))- sA_0123456789876543210))- ((applySing- ((applySing _sf_0123456789876543210) sA_0123456789876543210))- ((applySing- ((applySing- ((singFun2- @(Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))- (\ sN1_0123456789876543210 sN2_0123456789876543210- -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {- (,) (_ :: Sing n1_0123456789876543210)- (_ :: Sing n2_0123456789876543210)- -> (applySing- ((applySing- ((applySing ((singFun3 @FoldrSym0) sFoldr))- _sf_0123456789876543210))- sN2_0123456789876543210))- sN1_0123456789876543210 })))- sA_0123456789876543210))- ((applySing- ((applySing- ((singFun2- @(Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))- (\ sN1_0123456789876543210 sN2_0123456789876543210- -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {- (,) (_ :: Sing n1_0123456789876543210)- (_ :: Sing n2_0123456789876543210)- -> (applySing- ((applySing- ((applySing ((singFun3 @FoldrSym0) sFoldr))- ((singFun2- @(Apply (Apply (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) n1_0123456789876543210) n2_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))- (\ sN1_0123456789876543210- sN2_0123456789876543210- -> case- ((,) sN1_0123456789876543210)- sN2_0123456789876543210- of {- (,) (_ :: Sing n1_0123456789876543210)- (_ :: Sing n2_0123456789876543210)- -> (applySing- ((applySing- ((applySing- ((singFun3- @FoldrSym0)- sFoldr))- _sf_0123456789876543210))- sN2_0123456789876543210))- sN1_0123456789876543210 }))))- sN2_0123456789876543210))- sN1_0123456789876543210 })))- sA_0123456789876543210))- _sz_0123456789876543210)))- sFoldr- (_sf_0123456789876543210 :: Sing _f_0123456789876543210)- (_sz_0123456789876543210 :: Sing _z_0123456789876543210)- (SMkT2 (sA_0123456789876543210 :: Sing a_0123456789876543210))- = (applySing- ((applySing- ((singFun2- @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210))- (\ sN1_0123456789876543210 sN2_0123456789876543210- -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {- (,) (_ :: Sing n1_0123456789876543210)- (_ :: Sing n2_0123456789876543210)- -> sN2_0123456789876543210 })))- sA_0123456789876543210))- _sz_0123456789876543210- instance STraversable (T x) where- sTraverse ::- forall (f :: Type -> Type)- (a :: Type)- (b :: Type)- (t1 :: (~>) a (f b))- (t2 :: T x a).- SApplicative f =>- Sing t1- -> Sing t2- -> Sing (Apply (Apply (TraverseSym0 :: TyFun ((~>) a (f b)) ((~>) (T x a) (f (T x b)))- -> Type) t1) t2)- sTraverse- (_sf_0123456789876543210 :: Sing _f_0123456789876543210)- (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- = (applySing- ((applySing ((singFun2 @(<*>@#@$)) (%<*>)))- ((applySing- ((applySing ((singFun2 @(<*>@#@$)) (%<*>)))- ((applySing- ((applySing- ((applySing ((singFun3 @LiftA2Sym0) sLiftA2))- ((singFun4 @MkT1Sym0) SMkT1)))- ((applySing ((singFun1 @PureSym0) sPure)) sA_0123456789876543210)))- ((applySing _sf_0123456789876543210) sA_0123456789876543210))))- ((applySing- ((applySing ((singFun2 @TraverseSym0) sTraverse))- _sf_0123456789876543210))- sA_0123456789876543210))))- ((applySing- ((applySing ((singFun2 @TraverseSym0) sTraverse))- ((applySing ((singFun2 @TraverseSym0) sTraverse))- _sf_0123456789876543210)))- sA_0123456789876543210)- sTraverse- (_sf_0123456789876543210 :: Sing _f_0123456789876543210)- (SMkT2 (sA_0123456789876543210 :: Sing a_0123456789876543210))- = (applySing- ((applySing ((singFun2 @FmapSym0) sFmap))- ((singFun1 @MkT2Sym0) SMkT2)))- ((applySing ((singFun1 @PureSym0) sPure)) sA_0123456789876543210)- instance SFunctor Empty where- sFmap ::- forall (a :: Type) (b :: Type) (t1 :: (~>) a b) (t2 :: Empty a).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (FmapSym0 :: TyFun ((~>) a b) ((~>) (Empty a) (Empty b))- -> Type) t1) t2)- (%<$) ::- forall (a :: Type) (b :: Type) (t1 :: a) (t2 :: Empty b).- Sing t1- -> Sing t2- -> Sing (Apply (Apply ((<$@#@$) :: TyFun a ((~>) (Empty b) (Empty a))- -> Type) t1) t2)- sFmap _ (sV_0123456789876543210 :: Sing v_0123456789876543210)- = (case sV_0123456789876543210 of) ::- Sing (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210)- (%<$) _ (sV_0123456789876543210 :: Sing v_0123456789876543210)- = (case sV_0123456789876543210 of) ::- Sing (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210)- instance SFoldable Empty where- sFoldMap ::- forall (m :: Type) (a :: Type) (t1 :: (~>) a m) (t2 :: Empty a).- SMonoid m =>- Sing t1- -> Sing t2- -> Sing (Apply (Apply (FoldMapSym0 :: TyFun ((~>) a m) ((~>) (Empty a) m)- -> Type) t1) t2)- sFoldMap _ _ = sMempty- instance STraversable Empty where- sTraverse ::- forall (f :: Type -> Type)- (a :: Type)- (b :: Type)- (t1 :: (~>) a (f b))- (t2 :: Empty a).- SApplicative f =>- Sing t1- -> Sing t2- -> Sing (Apply (Apply (TraverseSym0 :: TyFun ((~>) a (f b)) ((~>) (Empty a) (f (Empty b)))- -> Type) t1) t2)- sTraverse _ (sV_0123456789876543210 :: Sing v_0123456789876543210)- = (applySing ((singFun1 @PureSym0) sPure))- ((case sV_0123456789876543210 of) ::- Sing (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210))- instance (SingI n, SingI n, SingI n, SingI n) =>- SingI (MkT1 (n :: x) (n :: a) (n :: Maybe a) (n :: Maybe (Maybe a))) where- sing = (((SMkT1 sing) sing) sing) sing- instance SingI (MkT1Sym0 :: (~>) x ((~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))))) where- sing = (singFun4 @MkT1Sym0) SMkT1- instance SingI (TyCon4 MkT1 :: (~>) x ((~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))))) where- sing = (singFun4 @(TyCon4 MkT1)) SMkT1- instance SingI d =>- SingI (MkT1Sym1 (d :: x) :: (~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a)))) where- sing = (singFun3 @(MkT1Sym1 (d :: x))) (SMkT1 (sing @d))- instance SingI d =>- SingI (TyCon3 (MkT1 (d :: x)) :: (~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a)))) where- sing = (singFun3 @(TyCon3 (MkT1 (d :: x)))) (SMkT1 (sing @d))- instance (SingI d, SingI d) =>- SingI (MkT1Sym2 (d :: x) (d :: a) :: (~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))) where- sing- = (singFun2 @(MkT1Sym2 (d :: x) (d :: a)))- ((SMkT1 (sing @d)) (sing @d))- instance (SingI d, SingI d) =>- SingI (TyCon2 (MkT1 (d :: x) (d :: a)) :: (~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))) where- sing- = (singFun2 @(TyCon2 (MkT1 (d :: x) (d :: a))))- ((SMkT1 (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (MkT1Sym3 (d :: x) (d :: a) (d :: Maybe a) :: (~>) (Maybe (Maybe a)) (T x a)) where- sing- = (singFun1 @(MkT1Sym3 (d :: x) (d :: a) (d :: Maybe a)))- (((SMkT1 (sing @d)) (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (TyCon1 (MkT1 (d :: x) (d :: a) (d :: Maybe a)) :: (~>) (Maybe (Maybe a)) (T x a)) where- sing- = (singFun1 @(TyCon1 (MkT1 (d :: x) (d :: a) (d :: Maybe a))))- (((SMkT1 (sing @d)) (sing @d)) (sing @d))- instance SingI n => SingI (MkT2 (n :: Maybe x)) where- sing = SMkT2 sing- instance SingI (MkT2Sym0 :: (~>) (Maybe x) (T x a)) where- sing = (singFun1 @MkT2Sym0) SMkT2- instance SingI (TyCon1 MkT2 :: (~>) (Maybe x) (T x a)) where- sing = (singFun1 @(TyCon1 MkT2)) SMkT2
+ tests/compile-and-dump/Singletons/FunctorLikeDeriving.ghc88.template view
@@ -0,0 +1,1632 @@+Singletons/FunctorLikeDeriving.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data T x a+ = MkT1 x a (Maybe a) (Maybe (Maybe a)) | MkT2 (Maybe x)+ deriving (Functor, Foldable, Traversable)+ data Empty (a :: Type) deriving (Functor, Foldable, Traversable) |]+ ======>+ data T x a+ = MkT1 x a (Maybe a) (Maybe (Maybe a)) | MkT2 (Maybe x)+ deriving (Functor, Foldable, Traversable)+ data Empty (a :: Type) deriving (Functor, Foldable, Traversable)+ type MkT1Sym4 (t0123456789876543210 :: x0123456789876543210) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: Maybe a0123456789876543210) (t0123456789876543210 :: Maybe (Maybe a0123456789876543210)) =+ MkT1 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (MkT1Sym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MkT1Sym3KindInference) ())+ data MkT1Sym3 (t0123456789876543210 :: x0123456789876543210) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: Maybe a0123456789876543210) :: (~>) (Maybe (Maybe a0123456789876543210)) (T x0123456789876543210 a0123456789876543210)+ where+ MkT1Sym3KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (MkT1Sym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (MkT1Sym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>+ MkT1Sym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (MkT1Sym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = MkT1 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (MkT1Sym2 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MkT1Sym2KindInference) ())+ data MkT1Sym2 (t0123456789876543210 :: x0123456789876543210) (t0123456789876543210 :: a0123456789876543210) :: (~>) (Maybe a0123456789876543210) ((~>) (Maybe (Maybe a0123456789876543210)) (T x0123456789876543210 a0123456789876543210))+ where+ MkT1Sym2KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (MkT1Sym2 t0123456789876543210 t0123456789876543210) arg) (MkT1Sym3 t0123456789876543210 t0123456789876543210 arg) =>+ MkT1Sym2 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (MkT1Sym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = MkT1Sym3 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (MkT1Sym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MkT1Sym1KindInference) ())+ data MkT1Sym1 (t0123456789876543210 :: x0123456789876543210) :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) ((~>) (Maybe (Maybe a0123456789876543210)) (T x0123456789876543210 a0123456789876543210)))+ where+ MkT1Sym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (MkT1Sym1 t0123456789876543210) arg) (MkT1Sym2 t0123456789876543210 arg) =>+ MkT1Sym1 t0123456789876543210 t0123456789876543210+ type instance Apply (MkT1Sym1 t0123456789876543210) t0123456789876543210 = MkT1Sym2 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings MkT1Sym0 where+ suppressUnusedWarnings = snd (((,) MkT1Sym0KindInference) ())+ data MkT1Sym0 :: forall x0123456789876543210 a0123456789876543210.+ (~>) x0123456789876543210 ((~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) ((~>) (Maybe (Maybe a0123456789876543210)) (T x0123456789876543210 a0123456789876543210))))+ where+ MkT1Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkT1Sym0 arg) (MkT1Sym1 arg) =>+ MkT1Sym0 t0123456789876543210+ type instance Apply MkT1Sym0 t0123456789876543210 = MkT1Sym1 t0123456789876543210+ type MkT2Sym1 (t0123456789876543210 :: Maybe x0123456789876543210) =+ MkT2 t0123456789876543210+ instance SuppressUnusedWarnings MkT2Sym0 where+ suppressUnusedWarnings = snd (((,) MkT2Sym0KindInference) ())+ data MkT2Sym0 :: forall x0123456789876543210 a0123456789876543210.+ (~>) (Maybe x0123456789876543210) (T x0123456789876543210 a0123456789876543210)+ where+ MkT2Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkT2Sym0 arg) (MkT2Sym1 arg) =>+ MkT2Sym0 t0123456789876543210+ type instance Apply MkT2Sym0 t0123456789876543210 = MkT2 t0123456789876543210+ type family Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t where+ Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = n_0123456789876543210+ type Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())+ data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210+ type family Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 t where+ Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = n_0123456789876543210+ type Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210+ type family Fmap_0123456789876543210 (a :: (~>) a0 b0) (a :: T x a0) :: T x b0 where+ Fmap_0123456789876543210 _f_0123456789876543210 (MkT1 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) = Apply (Apply (Apply (Apply MkT1Sym0 (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210)) (Apply _f_0123456789876543210 a_0123456789876543210)) (Apply (Apply FmapSym0 _f_0123456789876543210) a_0123456789876543210)) (Apply (Apply FmapSym0 (Apply FmapSym0 _f_0123456789876543210)) a_0123456789876543210)+ Fmap_0123456789876543210 _f_0123456789876543210 (MkT2 a_0123456789876543210) = Apply MkT2Sym0 (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210)+ type Fmap_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a01234567898765432100 b01234567898765432100) (a0123456789876543210 :: T x0123456789876543210 a01234567898765432100) =+ Fmap_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Fmap_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Fmap_0123456789876543210Sym1KindInference) ())+ data Fmap_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a01234567898765432100 b01234567898765432100) :: forall x0123456789876543210.+ (~>) (T x0123456789876543210 a01234567898765432100) (T x0123456789876543210 b01234567898765432100)+ where+ Fmap_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Fmap_0123456789876543210Sym1 a0123456789876543210) arg) (Fmap_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Fmap_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Fmap_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Fmap_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Fmap_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Fmap_0123456789876543210Sym0KindInference) ())+ data Fmap_0123456789876543210Sym0 :: forall a01234567898765432100+ b01234567898765432100+ x0123456789876543210.+ (~>) ((~>) a01234567898765432100 b01234567898765432100) ((~>) (T x0123456789876543210 a01234567898765432100) (T x0123456789876543210 b01234567898765432100))+ where+ Fmap_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Fmap_0123456789876543210Sym0 arg) (Fmap_0123456789876543210Sym1 arg) =>+ Fmap_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Fmap_0123456789876543210Sym0 a0123456789876543210 = Fmap_0123456789876543210Sym1 a0123456789876543210+ type family Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t where+ Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = n_0123456789876543210+ type Lambda_0123456789876543210Sym6 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())+ data Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym5KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _z_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210+ type family Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t where+ Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = _z_0123456789876543210+ type Lambda_0123456789876543210Sym6 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())+ data Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym5KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _z_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210+ type family Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 t where+ Lambda_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = n_0123456789876543210+ type Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _z_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _z_01234567898765432100123456789876543210+ type family TFHelper_0123456789876543210 (a :: a0) (a :: T x b0) :: T x a0 where+ TFHelper_0123456789876543210 _z_0123456789876543210 (MkT1 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) = Apply (Apply (Apply (Apply MkT1Sym0 (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210)) (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210)) (Apply (Apply (<$@#@$) _z_0123456789876543210) a_0123456789876543210)) (Apply (Apply FmapSym0 (Apply (<$@#@$) _z_0123456789876543210)) a_0123456789876543210)+ TFHelper_0123456789876543210 _z_0123456789876543210 (MkT2 a_0123456789876543210) = Apply MkT2Sym0 (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210)+ type TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: a01234567898765432100) (a0123456789876543210 :: T x0123456789876543210 b01234567898765432100) =+ TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())+ data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: a01234567898765432100) :: forall x0123456789876543210+ b01234567898765432100.+ (~>) (T x0123456789876543210 b01234567898765432100) (T x0123456789876543210 a01234567898765432100)+ where+ TFHelper_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>+ TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())+ data TFHelper_0123456789876543210Sym0 :: forall a01234567898765432100+ x0123456789876543210+ b01234567898765432100.+ (~>) a01234567898765432100 ((~>) (T x0123456789876543210 b01234567898765432100) (T x0123456789876543210 a01234567898765432100))+ where+ TFHelper_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>+ TFHelper_0123456789876543210Sym0 a0123456789876543210+ type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210+ instance PFunctor (T x) where+ type Fmap a a = Apply (Apply Fmap_0123456789876543210Sym0 a) a+ type (<$) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a+ type family Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t where+ Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = MemptySym0+ type Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())+ data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210+ type family Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 t where+ Lambda_0123456789876543210 _f_0123456789876543210 a_0123456789876543210 n_0123456789876543210 = MemptySym0+ type Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210+ type family FoldMap_0123456789876543210 (a :: (~>) a0 m0) (a :: T x a0) :: m0 where+ FoldMap_0123456789876543210 _f_0123456789876543210 (MkT1 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) = Apply (Apply MappendSym0 (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210)) (Apply (Apply MappendSym0 (Apply _f_0123456789876543210 a_0123456789876543210)) (Apply (Apply MappendSym0 (Apply (Apply FoldMapSym0 _f_0123456789876543210) a_0123456789876543210)) (Apply (Apply FoldMapSym0 (Apply FoldMapSym0 _f_0123456789876543210)) a_0123456789876543210)))+ FoldMap_0123456789876543210 _f_0123456789876543210 (MkT2 a_0123456789876543210) = Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210+ type FoldMap_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a01234567898765432100 m01234567898765432100) (a0123456789876543210 :: T x0123456789876543210 a01234567898765432100) =+ FoldMap_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (FoldMap_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) FoldMap_0123456789876543210Sym1KindInference) ())+ data FoldMap_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a01234567898765432100 m01234567898765432100) :: forall x0123456789876543210.+ (~>) (T x0123456789876543210 a01234567898765432100) m01234567898765432100+ where+ FoldMap_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (FoldMap_0123456789876543210Sym1 a0123456789876543210) arg) (FoldMap_0123456789876543210Sym2 a0123456789876543210 arg) =>+ FoldMap_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (FoldMap_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = FoldMap_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FoldMap_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) FoldMap_0123456789876543210Sym0KindInference) ())+ data FoldMap_0123456789876543210Sym0 :: forall a01234567898765432100+ m01234567898765432100+ x0123456789876543210.+ (~>) ((~>) a01234567898765432100 m01234567898765432100) ((~>) (T x0123456789876543210 a01234567898765432100) m01234567898765432100)+ where+ FoldMap_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FoldMap_0123456789876543210Sym0 arg) (FoldMap_0123456789876543210Sym1 arg) =>+ FoldMap_0123456789876543210Sym0 a0123456789876543210+ type instance Apply FoldMap_0123456789876543210Sym0 a0123456789876543210 = FoldMap_0123456789876543210Sym1 a0123456789876543210+ type family Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where+ Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 = n2_0123456789876543210+ type Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym7KindInference) ())+ data Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym7KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym6KindInference) ())+ data Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym6KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())+ data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210+ type family Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where+ Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 = Apply (Apply (Apply FoldrSym0 _f_0123456789876543210) n2_0123456789876543210) n1_0123456789876543210+ type Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym7KindInference) ())+ data Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym7KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym6KindInference) ())+ data Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym6KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())+ data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210+ type family Lambda_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where+ Lambda_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 = Apply (Apply (Apply FoldrSym0 _f_0123456789876543210) n2_0123456789876543210) n1_0123456789876543210+ type Lambda_0123456789876543210Sym10 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym9 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym9KindInference) ())+ data Lambda_0123456789876543210Sym9 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym9KindInference :: forall n1_01234567898765432100123456789876543210+ n2_01234567898765432100123456789876543210+ _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym9 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym10 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym9 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym9 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym8 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym8KindInference) ())+ data Lambda_0123456789876543210Sym8 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym8KindInference :: forall n1_01234567898765432100123456789876543210+ n2_01234567898765432100123456789876543210+ _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym8 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym9 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym8 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym8 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym9 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym7KindInference) ())+ data Lambda_0123456789876543210Sym7 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym7KindInference :: forall n1_01234567898765432100123456789876543210+ n2_01234567898765432100123456789876543210+ _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym7 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym8 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym7 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym8 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym6KindInference) ())+ data Lambda_0123456789876543210Sym6 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym6KindInference :: forall n1_01234567898765432100123456789876543210+ n2_01234567898765432100123456789876543210+ _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym6 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym7 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym6 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())+ data Lambda_0123456789876543210Sym5 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym5KindInference :: forall n1_01234567898765432100123456789876543210+ n2_01234567898765432100123456789876543210+ _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym5 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym5 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall n1_01234567898765432100123456789876543210+ n2_01234567898765432100123456789876543210+ _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall n1_01234567898765432100123456789876543210+ n2_01234567898765432100123456789876543210+ _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall n1_01234567898765432100123456789876543210+ n2_01234567898765432100123456789876543210+ _f_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210) _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 n2_01234567898765432100123456789876543210 n1_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 n1_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall n1_01234567898765432100123456789876543210+ n2_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 n1_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 n1_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 n1_01234567898765432100123456789876543210) n2_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 n1_01234567898765432100123456789876543210 n2_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 n1_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall n1_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 n1_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 n1_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 n1_01234567898765432100123456789876543210+ type family Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where+ Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 = Apply (Apply (Apply FoldrSym0 (Apply (Apply (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 n1_0123456789876543210) n2_0123456789876543210) _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210)) n2_0123456789876543210) n1_0123456789876543210+ type Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym7KindInference) ())+ data Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym7KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym8 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym7 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym6KindInference) ())+ data Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym6KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym7 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym7 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym5KindInference) ())+ data Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym5KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym6 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym6 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym5 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210+ type family Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 t t where+ Lambda_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 a_0123456789876543210 n1_0123456789876543210 n2_0123456789876543210 = n2_0123456789876543210+ type Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 t0123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym5 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 t0123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym4 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym3 _z_01234567898765432100123456789876543210 _f_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall _f_01234567898765432100123456789876543210+ _z_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210) _z_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 _f_01234567898765432100123456789876543210 _z_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall _f_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 _f_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 _f_01234567898765432100123456789876543210+ type family Foldr_0123456789876543210 (a :: (~>) a0 ((~>) b0 b0)) (a :: b0) (a :: T x a0) :: b0 where+ Foldr_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 (MkT1 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) = Apply (Apply (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) (Apply (Apply _f_0123456789876543210 a_0123456789876543210) (Apply (Apply (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) (Apply (Apply (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) _z_0123456789876543210)))+ Foldr_0123456789876543210 _f_0123456789876543210 _z_0123456789876543210 (MkT2 a_0123456789876543210) = Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) _z_0123456789876543210+ type Foldr_0123456789876543210Sym3 (a0123456789876543210 :: (~>) a01234567898765432100 ((~>) b01234567898765432100 b01234567898765432100)) (a0123456789876543210 :: b01234567898765432100) (a0123456789876543210 :: T x0123456789876543210 a01234567898765432100) =+ Foldr_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foldr_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Foldr_0123456789876543210Sym2KindInference) ())+ data Foldr_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a01234567898765432100 ((~>) b01234567898765432100 b01234567898765432100)) (a0123456789876543210 :: b01234567898765432100) :: forall x0123456789876543210.+ (~>) (T x0123456789876543210 a01234567898765432100) b01234567898765432100+ where+ Foldr_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foldr_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (Foldr_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ Foldr_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (Foldr_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = Foldr_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foldr_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Foldr_0123456789876543210Sym1KindInference) ())+ data Foldr_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a01234567898765432100 ((~>) b01234567898765432100 b01234567898765432100)) :: forall x0123456789876543210.+ (~>) b01234567898765432100 ((~>) (T x0123456789876543210 a01234567898765432100) b01234567898765432100)+ where+ Foldr_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foldr_0123456789876543210Sym1 a0123456789876543210) arg) (Foldr_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Foldr_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foldr_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Foldr_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foldr_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Foldr_0123456789876543210Sym0KindInference) ())+ data Foldr_0123456789876543210Sym0 :: forall a01234567898765432100+ b01234567898765432100+ x0123456789876543210.+ (~>) ((~>) a01234567898765432100 ((~>) b01234567898765432100 b01234567898765432100)) ((~>) b01234567898765432100 ((~>) (T x0123456789876543210 a01234567898765432100) b01234567898765432100))+ where+ Foldr_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foldr_0123456789876543210Sym0 arg) (Foldr_0123456789876543210Sym1 arg) =>+ Foldr_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Foldr_0123456789876543210Sym0 a0123456789876543210 = Foldr_0123456789876543210Sym1 a0123456789876543210+ instance PFoldable (T x) where+ type FoldMap a a = Apply (Apply FoldMap_0123456789876543210Sym0 a) a+ type Foldr a a a = Apply (Apply (Apply Foldr_0123456789876543210Sym0 a) a) a+ type family Traverse_0123456789876543210 (a :: (~>) a0 (f0 b0)) (a :: T x a0) :: f0 (T x b0) where+ Traverse_0123456789876543210 _f_0123456789876543210 (MkT1 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) = Apply (Apply (<*>@#@$) (Apply (Apply (<*>@#@$) (Apply (Apply (Apply LiftA2Sym0 MkT1Sym0) (Apply PureSym0 a_0123456789876543210)) (Apply _f_0123456789876543210 a_0123456789876543210))) (Apply (Apply TraverseSym0 _f_0123456789876543210) a_0123456789876543210))) (Apply (Apply TraverseSym0 (Apply TraverseSym0 _f_0123456789876543210)) a_0123456789876543210)+ Traverse_0123456789876543210 _f_0123456789876543210 (MkT2 a_0123456789876543210) = Apply (Apply FmapSym0 MkT2Sym0) (Apply PureSym0 a_0123456789876543210)+ type Traverse_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a01234567898765432100 (f01234567898765432100 b01234567898765432100)) (a0123456789876543210 :: T x0123456789876543210 a01234567898765432100) =+ Traverse_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Traverse_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Traverse_0123456789876543210Sym1KindInference) ())+ data Traverse_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a01234567898765432100 (f01234567898765432100 b01234567898765432100)) :: forall x0123456789876543210.+ (~>) (T x0123456789876543210 a01234567898765432100) (f01234567898765432100 (T x0123456789876543210 b01234567898765432100))+ where+ Traverse_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Traverse_0123456789876543210Sym1 a0123456789876543210) arg) (Traverse_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Traverse_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Traverse_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Traverse_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Traverse_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Traverse_0123456789876543210Sym0KindInference) ())+ data Traverse_0123456789876543210Sym0 :: forall a01234567898765432100+ f01234567898765432100+ b01234567898765432100+ x0123456789876543210.+ (~>) ((~>) a01234567898765432100 (f01234567898765432100 b01234567898765432100)) ((~>) (T x0123456789876543210 a01234567898765432100) (f01234567898765432100 (T x0123456789876543210 b01234567898765432100)))+ where+ Traverse_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Traverse_0123456789876543210Sym0 arg) (Traverse_0123456789876543210Sym1 arg) =>+ Traverse_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Traverse_0123456789876543210Sym0 a0123456789876543210 = Traverse_0123456789876543210Sym1 a0123456789876543210+ instance PTraversable (T x) where+ type Traverse a a = Apply (Apply Traverse_0123456789876543210Sym0 a) a+ type family Case_0123456789876543210 v_0123456789876543210 t where+ type family Fmap_0123456789876543210 (a :: (~>) a0 b0) (a :: Empty a0) :: Empty b0 where+ Fmap_0123456789876543210 _ v_0123456789876543210 = Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210+ type Fmap_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a01234567898765432100 b01234567898765432100) (a0123456789876543210 :: Empty a01234567898765432100) =+ Fmap_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Fmap_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Fmap_0123456789876543210Sym1KindInference) ())+ data Fmap_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a01234567898765432100 b01234567898765432100) :: (~>) (Empty a01234567898765432100) (Empty b01234567898765432100)+ where+ Fmap_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Fmap_0123456789876543210Sym1 a0123456789876543210) arg) (Fmap_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Fmap_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Fmap_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Fmap_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Fmap_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Fmap_0123456789876543210Sym0KindInference) ())+ data Fmap_0123456789876543210Sym0 :: forall a01234567898765432100+ b01234567898765432100.+ (~>) ((~>) a01234567898765432100 b01234567898765432100) ((~>) (Empty a01234567898765432100) (Empty b01234567898765432100))+ where+ Fmap_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Fmap_0123456789876543210Sym0 arg) (Fmap_0123456789876543210Sym1 arg) =>+ Fmap_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Fmap_0123456789876543210Sym0 a0123456789876543210 = Fmap_0123456789876543210Sym1 a0123456789876543210+ type family Case_0123456789876543210 v_0123456789876543210 t where+ type family TFHelper_0123456789876543210 (a :: a0) (a :: Empty b0) :: Empty a0 where+ TFHelper_0123456789876543210 _ v_0123456789876543210 = Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210+ type TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: a01234567898765432100) (a0123456789876543210 :: Empty b01234567898765432100) =+ TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())+ data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: a01234567898765432100) :: forall b01234567898765432100.+ (~>) (Empty b01234567898765432100) (Empty a01234567898765432100)+ where+ TFHelper_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>+ TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())+ data TFHelper_0123456789876543210Sym0 :: forall a01234567898765432100+ b01234567898765432100.+ (~>) a01234567898765432100 ((~>) (Empty b01234567898765432100) (Empty a01234567898765432100))+ where+ TFHelper_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>+ TFHelper_0123456789876543210Sym0 a0123456789876543210+ type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210+ instance PFunctor Empty where+ type Fmap a a = Apply (Apply Fmap_0123456789876543210Sym0 a) a+ type (<$) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a+ type family FoldMap_0123456789876543210 (a :: (~>) a0 m0) (a :: Empty a0) :: m0 where+ FoldMap_0123456789876543210 _ _ = MemptySym0+ type FoldMap_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a01234567898765432100 m01234567898765432100) (a0123456789876543210 :: Empty a01234567898765432100) =+ FoldMap_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (FoldMap_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) FoldMap_0123456789876543210Sym1KindInference) ())+ data FoldMap_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a01234567898765432100 m01234567898765432100) :: (~>) (Empty a01234567898765432100) m01234567898765432100+ where+ FoldMap_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (FoldMap_0123456789876543210Sym1 a0123456789876543210) arg) (FoldMap_0123456789876543210Sym2 a0123456789876543210 arg) =>+ FoldMap_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (FoldMap_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = FoldMap_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FoldMap_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) FoldMap_0123456789876543210Sym0KindInference) ())+ data FoldMap_0123456789876543210Sym0 :: forall a01234567898765432100+ m01234567898765432100.+ (~>) ((~>) a01234567898765432100 m01234567898765432100) ((~>) (Empty a01234567898765432100) m01234567898765432100)+ where+ FoldMap_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FoldMap_0123456789876543210Sym0 arg) (FoldMap_0123456789876543210Sym1 arg) =>+ FoldMap_0123456789876543210Sym0 a0123456789876543210+ type instance Apply FoldMap_0123456789876543210Sym0 a0123456789876543210 = FoldMap_0123456789876543210Sym1 a0123456789876543210+ instance PFoldable Empty where+ type FoldMap a a = Apply (Apply FoldMap_0123456789876543210Sym0 a) a+ type family Case_0123456789876543210 v_0123456789876543210 t where+ type family Traverse_0123456789876543210 (a :: (~>) a0 (f0 b0)) (a :: Empty a0) :: f0 (Empty b0) where+ Traverse_0123456789876543210 _ v_0123456789876543210 = Apply PureSym0 (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210)+ type Traverse_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a01234567898765432100 (f01234567898765432100 b01234567898765432100)) (a0123456789876543210 :: Empty a01234567898765432100) =+ Traverse_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Traverse_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Traverse_0123456789876543210Sym1KindInference) ())+ data Traverse_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a01234567898765432100 (f01234567898765432100 b01234567898765432100)) :: (~>) (Empty a01234567898765432100) (f01234567898765432100 (Empty b01234567898765432100))+ where+ Traverse_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Traverse_0123456789876543210Sym1 a0123456789876543210) arg) (Traverse_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Traverse_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Traverse_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Traverse_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Traverse_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Traverse_0123456789876543210Sym0KindInference) ())+ data Traverse_0123456789876543210Sym0 :: forall a01234567898765432100+ f01234567898765432100+ b01234567898765432100.+ (~>) ((~>) a01234567898765432100 (f01234567898765432100 b01234567898765432100)) ((~>) (Empty a01234567898765432100) (f01234567898765432100 (Empty b01234567898765432100)))+ where+ Traverse_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Traverse_0123456789876543210Sym0 arg) (Traverse_0123456789876543210Sym1 arg) =>+ Traverse_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Traverse_0123456789876543210Sym0 a0123456789876543210 = Traverse_0123456789876543210Sym1 a0123456789876543210+ instance PTraversable Empty where+ type Traverse a a = Apply (Apply Traverse_0123456789876543210Sym0 a) a+ data ST :: forall x a. T x a -> Type+ where+ SMkT1 :: forall x+ a+ (n :: x)+ (n :: a)+ (n :: Maybe a)+ (n :: Maybe (Maybe a)).+ (Sing (n :: x))+ -> (Sing (n :: a))+ -> (Sing (n :: Maybe a))+ -> (Sing (n :: Maybe (Maybe a))) -> ST (MkT1 n n n n)+ SMkT2 :: forall x (n :: Maybe x).+ (Sing (n :: Maybe x)) -> ST (MkT2 n)+ type instance Sing @(T x a) = ST+ instance (SingKind x, SingKind a) => SingKind (T x a) where+ type Demote (T x a) = T (Demote x) (Demote a)+ fromSing (SMkT1 b b b b)+ = (((MkT1 (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)+ fromSing (SMkT2 b) = MkT2 (fromSing b)+ toSing+ (MkT1 (b :: Demote x)+ (b :: Demote a)+ (b :: Demote (Maybe a))+ (b :: Demote (Maybe (Maybe a))))+ = case+ ((((,,,) (toSing b :: SomeSing x)) (toSing b :: SomeSing a))+ (toSing b :: SomeSing (Maybe a)))+ (toSing b :: SomeSing (Maybe (Maybe a)))+ of {+ (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)+ -> SomeSing ((((SMkT1 c) c) c) c) }+ toSing (MkT2 (b :: Demote (Maybe x)))+ = case toSing b :: SomeSing (Maybe x) of {+ SomeSing c -> SomeSing (SMkT2 c) }+ data SEmpty :: forall a. Empty a -> Type+ type instance Sing @(Empty a) = SEmpty+ instance SingKind a => SingKind (Empty a) where+ type Demote (Empty a) = Empty (Demote a)+ fromSing x = case x of+ toSing x = SomeSing (case x of)+ instance SFunctor (T x) where+ sFmap ::+ forall (a :: Type) (b :: Type) (t1 :: (~>) a b) (t2 :: T x a).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (FmapSym0 :: TyFun ((~>) a b) ((~>) (T x a) (T x b))+ -> Type) t1) t2)+ (%<$) ::+ forall (a :: Type) (b :: Type) (t1 :: a) (t2 :: T x b).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply ((<$@#@$) :: TyFun a ((~>) (T x b) (T x a))+ -> Type) t1) t2)+ sFmap+ (_sf_0123456789876543210 :: Sing _f_0123456789876543210)+ (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing+ ((applySing ((singFun4 @MkT1Sym0) SMkT1))+ ((applySing+ ((singFun1+ @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))+ (\ sN_0123456789876543210+ -> case sN_0123456789876543210 of {+ (_ :: Sing n_0123456789876543210)+ -> sN_0123456789876543210 })))+ sA_0123456789876543210)))+ ((applySing _sf_0123456789876543210) sA_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @FmapSym0) sFmap)) _sf_0123456789876543210))+ sA_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @FmapSym0) sFmap))+ ((applySing ((singFun2 @FmapSym0) sFmap))+ _sf_0123456789876543210)))+ sA_0123456789876543210)+ sFmap+ (_sf_0123456789876543210 :: Sing _f_0123456789876543210)+ (SMkT2 (sA_0123456789876543210 :: Sing a_0123456789876543210))+ = (applySing ((singFun1 @MkT2Sym0) SMkT2))+ ((applySing+ ((singFun1+ @(Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210))+ (\ sN_0123456789876543210+ -> case sN_0123456789876543210 of {+ (_ :: Sing n_0123456789876543210) -> sN_0123456789876543210 })))+ sA_0123456789876543210)+ (%<$)+ (_sz_0123456789876543210 :: Sing _z_0123456789876543210)+ (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing+ ((applySing ((singFun4 @MkT1Sym0) SMkT1))+ ((applySing+ ((singFun1+ @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))+ (\ sN_0123456789876543210+ -> case sN_0123456789876543210 of {+ (_ :: Sing n_0123456789876543210)+ -> sN_0123456789876543210 })))+ sA_0123456789876543210)))+ ((applySing+ ((singFun1+ @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))+ (\ sN_0123456789876543210+ -> case sN_0123456789876543210 of {+ (_ :: Sing n_0123456789876543210) -> _sz_0123456789876543210 })))+ sA_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(<$@#@$)) (%<$))) _sz_0123456789876543210))+ sA_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @FmapSym0) sFmap))+ ((applySing ((singFun2 @(<$@#@$)) (%<$)))+ _sz_0123456789876543210)))+ sA_0123456789876543210)+ (%<$)+ (_sz_0123456789876543210 :: Sing _z_0123456789876543210)+ (SMkT2 (sA_0123456789876543210 :: Sing a_0123456789876543210))+ = (applySing ((singFun1 @MkT2Sym0) SMkT2))+ ((applySing+ ((singFun1+ @(Apply (Apply Lambda_0123456789876543210Sym0 _z_0123456789876543210) a_0123456789876543210))+ (\ sN_0123456789876543210+ -> case sN_0123456789876543210 of {+ (_ :: Sing n_0123456789876543210) -> sN_0123456789876543210 })))+ sA_0123456789876543210)+ instance SFoldable (T x) where+ sFoldMap ::+ forall (a :: Type) (m :: Type) (t1 :: (~>) a m) (t2 :: T x a).+ SMonoid m =>+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (FoldMapSym0 :: TyFun ((~>) a m) ((~>) (T x a) m)+ -> Type) t1) t2)+ sFoldr ::+ forall (a :: Type)+ (b :: Type)+ (t1 :: (~>) a ((~>) b b))+ (t2 :: b)+ (t3 :: T x a).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (FoldrSym0 :: TyFun ((~>) a ((~>) b b)) ((~>) b ((~>) (T x a) b))+ -> Type) t1) t2) t3)+ sFoldMap+ (_sf_0123456789876543210 :: Sing _f_0123456789876543210)+ (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ = (applySing+ ((applySing ((singFun2 @MappendSym0) sMappend))+ ((applySing+ ((singFun1+ @(Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))+ (\ sN_0123456789876543210+ -> case sN_0123456789876543210 of {+ (_ :: Sing n_0123456789876543210) -> sMempty })))+ sA_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @MappendSym0) sMappend))+ ((applySing _sf_0123456789876543210) sA_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @MappendSym0) sMappend))+ ((applySing+ ((applySing ((singFun2 @FoldMapSym0) sFoldMap))+ _sf_0123456789876543210))+ sA_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @FoldMapSym0) sFoldMap))+ ((applySing ((singFun2 @FoldMapSym0) sFoldMap))+ _sf_0123456789876543210)))+ sA_0123456789876543210)))+ sFoldMap+ (_sf_0123456789876543210 :: Sing _f_0123456789876543210)+ (SMkT2 (sA_0123456789876543210 :: Sing a_0123456789876543210))+ = (applySing+ ((singFun1+ @(Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) a_0123456789876543210))+ (\ sN_0123456789876543210+ -> case sN_0123456789876543210 of {+ (_ :: Sing n_0123456789876543210) -> sMempty })))+ sA_0123456789876543210+ sFoldr+ (_sf_0123456789876543210 :: Sing _f_0123456789876543210)+ (_sz_0123456789876543210 :: Sing _z_0123456789876543210)+ (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ = (applySing+ ((applySing+ ((singFun2+ @(Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))+ (\ sN1_0123456789876543210 sN2_0123456789876543210+ -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {+ (,) (_ :: Sing n1_0123456789876543210)+ (_ :: Sing n2_0123456789876543210)+ -> sN2_0123456789876543210 })))+ sA_0123456789876543210))+ ((applySing+ ((applySing _sf_0123456789876543210) sA_0123456789876543210))+ ((applySing+ ((applySing+ ((singFun2+ @(Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))+ (\ sN1_0123456789876543210 sN2_0123456789876543210+ -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {+ (,) (_ :: Sing n1_0123456789876543210)+ (_ :: Sing n2_0123456789876543210)+ -> (applySing+ ((applySing+ ((applySing ((singFun3 @FoldrSym0) sFoldr))+ _sf_0123456789876543210))+ sN2_0123456789876543210))+ sN1_0123456789876543210 })))+ sA_0123456789876543210))+ ((applySing+ ((applySing+ ((singFun2+ @(Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))+ (\ sN1_0123456789876543210 sN2_0123456789876543210+ -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {+ (,) (_ :: Sing n1_0123456789876543210)+ (_ :: Sing n2_0123456789876543210)+ -> (applySing+ ((applySing+ ((applySing ((singFun3 @FoldrSym0) sFoldr))+ ((singFun2+ @(Apply (Apply (Apply (Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 n1_0123456789876543210) n2_0123456789876543210) _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210))+ (\ sN1_0123456789876543210+ sN2_0123456789876543210+ -> case+ ((,) sN1_0123456789876543210)+ sN2_0123456789876543210+ of {+ (,) (_ :: Sing n1_0123456789876543210)+ (_ :: Sing n2_0123456789876543210)+ -> (applySing+ ((applySing+ ((applySing+ ((singFun3+ @FoldrSym0)+ sFoldr))+ _sf_0123456789876543210))+ sN2_0123456789876543210))+ sN1_0123456789876543210 }))))+ sN2_0123456789876543210))+ sN1_0123456789876543210 })))+ sA_0123456789876543210))+ _sz_0123456789876543210)))+ sFoldr+ (_sf_0123456789876543210 :: Sing _f_0123456789876543210)+ (_sz_0123456789876543210 :: Sing _z_0123456789876543210)+ (SMkT2 (sA_0123456789876543210 :: Sing a_0123456789876543210))+ = (applySing+ ((applySing+ ((singFun2+ @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 _f_0123456789876543210) _z_0123456789876543210) a_0123456789876543210))+ (\ sN1_0123456789876543210 sN2_0123456789876543210+ -> case ((,) sN1_0123456789876543210) sN2_0123456789876543210 of {+ (,) (_ :: Sing n1_0123456789876543210)+ (_ :: Sing n2_0123456789876543210)+ -> sN2_0123456789876543210 })))+ sA_0123456789876543210))+ _sz_0123456789876543210+ instance STraversable (T x) where+ sTraverse ::+ forall (a :: Type)+ (f :: Type -> Type)+ (b :: Type)+ (t1 :: (~>) a (f b))+ (t2 :: T x a).+ SApplicative f =>+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (TraverseSym0 :: TyFun ((~>) a (f b)) ((~>) (T x a) (f (T x b)))+ -> Type) t1) t2)+ sTraverse+ (_sf_0123456789876543210 :: Sing _f_0123456789876543210)+ (SMkT1 (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ = (applySing+ ((applySing ((singFun2 @(<*>@#@$)) (%<*>)))+ ((applySing+ ((applySing ((singFun2 @(<*>@#@$)) (%<*>)))+ ((applySing+ ((applySing+ ((applySing ((singFun3 @LiftA2Sym0) sLiftA2))+ ((singFun4 @MkT1Sym0) SMkT1)))+ ((applySing ((singFun1 @PureSym0) sPure)) sA_0123456789876543210)))+ ((applySing _sf_0123456789876543210) sA_0123456789876543210))))+ ((applySing+ ((applySing ((singFun2 @TraverseSym0) sTraverse))+ _sf_0123456789876543210))+ sA_0123456789876543210))))+ ((applySing+ ((applySing ((singFun2 @TraverseSym0) sTraverse))+ ((applySing ((singFun2 @TraverseSym0) sTraverse))+ _sf_0123456789876543210)))+ sA_0123456789876543210)+ sTraverse+ (_sf_0123456789876543210 :: Sing _f_0123456789876543210)+ (SMkT2 (sA_0123456789876543210 :: Sing a_0123456789876543210))+ = (applySing+ ((applySing ((singFun2 @FmapSym0) sFmap))+ ((singFun1 @MkT2Sym0) SMkT2)))+ ((applySing ((singFun1 @PureSym0) sPure)) sA_0123456789876543210)+ instance SFunctor Empty where+ sFmap ::+ forall (a :: Type) (b :: Type) (t1 :: (~>) a b) (t2 :: Empty a).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (FmapSym0 :: TyFun ((~>) a b) ((~>) (Empty a) (Empty b))+ -> Type) t1) t2)+ (%<$) ::+ forall (a :: Type) (b :: Type) (t1 :: a) (t2 :: Empty b).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply ((<$@#@$) :: TyFun a ((~>) (Empty b) (Empty a))+ -> Type) t1) t2)+ sFmap _ (sV_0123456789876543210 :: Sing v_0123456789876543210)+ = (id+ @(Sing (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210)))+ (case sV_0123456789876543210 of)+ (%<$) _ (sV_0123456789876543210 :: Sing v_0123456789876543210)+ = (id+ @(Sing (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210)))+ (case sV_0123456789876543210 of)+ instance SFoldable Empty where+ sFoldMap ::+ forall (a :: Type) (m :: Type) (t1 :: (~>) a m) (t2 :: Empty a).+ SMonoid m =>+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (FoldMapSym0 :: TyFun ((~>) a m) ((~>) (Empty a) m)+ -> Type) t1) t2)+ sFoldMap _ _ = sMempty+ instance STraversable Empty where+ sTraverse ::+ forall (a :: Type)+ (f :: Type -> Type)+ (b :: Type)+ (t1 :: (~>) a (f b))+ (t2 :: Empty a).+ SApplicative f =>+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (TraverseSym0 :: TyFun ((~>) a (f b)) ((~>) (Empty a) (f (Empty b)))+ -> Type) t1) t2)+ sTraverse _ (sV_0123456789876543210 :: Sing v_0123456789876543210)+ = (applySing ((singFun1 @PureSym0) sPure))+ ((id+ @(Sing (Case_0123456789876543210 v_0123456789876543210 v_0123456789876543210)))+ (case sV_0123456789876543210 of))+ instance (SingI n, SingI n, SingI n, SingI n) =>+ SingI (MkT1 (n :: x) (n :: a) (n :: Maybe a) (n :: Maybe (Maybe a))) where+ sing = (((SMkT1 sing) sing) sing) sing+ instance SingI (MkT1Sym0 :: (~>) x ((~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))))) where+ sing = (singFun4 @MkT1Sym0) SMkT1+ instance SingI d =>+ SingI (MkT1Sym1 (d :: x) :: (~>) a ((~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a)))) where+ sing = (singFun3 @(MkT1Sym1 (d :: x))) (SMkT1 (sing @d))+ instance (SingI d, SingI d) =>+ SingI (MkT1Sym2 (d :: x) (d :: a) :: (~>) (Maybe a) ((~>) (Maybe (Maybe a)) (T x a))) where+ sing+ = (singFun2 @(MkT1Sym2 (d :: x) (d :: a)))+ ((SMkT1 (sing @d)) (sing @d))+ instance (SingI d, SingI d, SingI d) =>+ SingI (MkT1Sym3 (d :: x) (d :: a) (d :: Maybe a) :: (~>) (Maybe (Maybe a)) (T x a)) where+ sing+ = (singFun1 @(MkT1Sym3 (d :: x) (d :: a) (d :: Maybe a)))+ (((SMkT1 (sing @d)) (sing @d)) (sing @d))+ instance SingI n => SingI (MkT2 (n :: Maybe x)) where+ sing = SMkT2 sing+ instance SingI (MkT2Sym0 :: (~>) (Maybe x) (T x a)) where+ sing = (singFun1 @MkT2Sym0) SMkT2
− tests/compile-and-dump/Singletons/HigherOrder.ghc86.template
@@ -1,480 +0,0 @@-Singletons/HigherOrder.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| map :: (a -> b) -> [a] -> [b]- map _ [] = []- map f (h : t) = (f h) : (map f t)- liftMaybe :: (a -> b) -> Maybe a -> Maybe b- liftMaybe f (Just x) = Just (f x)- liftMaybe _ Nothing = Nothing- zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]- zipWith f (x : xs) (y : ys) = f x y : zipWith f xs ys- zipWith _ [] [] = []- zipWith _ (_ : _) [] = []- zipWith _ [] (_ : _) = []- foo :: ((a -> b) -> a -> b) -> (a -> b) -> a -> b- foo f g a = f g a- splunge :: [Nat] -> [Bool] -> [Nat]- splunge ns bs- = zipWith (\ n b -> if b then Succ (Succ n) else n) ns bs- etad :: [Nat] -> [Bool] -> [Nat]- etad = zipWith (\ n b -> if b then Succ (Succ n) else n)- - data Either a b = Left a | Right b |]- ======>- data Either a b = Left a | Right b- map :: (a -> b) -> [a] -> [b]- map _ [] = []- map f (h : t) = (f h : (map f) t)- liftMaybe :: (a -> b) -> Maybe a -> Maybe b- liftMaybe f (Just x) = Just (f x)- liftMaybe _ Nothing = Nothing- zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]- zipWith f (x : xs) (y : ys) = ((f x) y : ((zipWith f) xs) ys)- zipWith _ [] [] = []- zipWith _ (_ : _) [] = []- zipWith _ [] (_ : _) = []- foo :: ((a -> b) -> a -> b) -> (a -> b) -> a -> b- foo f g a = (f g) a- splunge :: [Nat] -> [Bool] -> [Nat]- splunge ns bs- = ((zipWith (\ n b -> if b then Succ (Succ n) else n)) ns) bs- etad :: [Nat] -> [Bool] -> [Nat]- etad = zipWith (\ n b -> if b then Succ (Succ n) else n)- type LeftSym1 (t0123456789876543210 :: a0123456789876543210) =- Left t0123456789876543210- instance SuppressUnusedWarnings LeftSym0 where- suppressUnusedWarnings = snd (((,) LeftSym0KindInference) ())- data LeftSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 (Either a0123456789876543210 b0123456789876543210)- where- LeftSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply LeftSym0 arg) (LeftSym1 arg) =>- LeftSym0 t0123456789876543210- type instance Apply LeftSym0 t0123456789876543210 = Left t0123456789876543210- type RightSym1 (t0123456789876543210 :: b0123456789876543210) =- Right t0123456789876543210- instance SuppressUnusedWarnings RightSym0 where- suppressUnusedWarnings = snd (((,) RightSym0KindInference) ())- data RightSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) b0123456789876543210 (Either a0123456789876543210 b0123456789876543210)- where- RightSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply RightSym0 arg) (RightSym1 arg) =>- RightSym0 t0123456789876543210- type instance Apply RightSym0 t0123456789876543210 = Right t0123456789876543210- type family Case_0123456789876543210 ns bs n b t where- Case_0123456789876543210 ns bs n b 'True = Apply SuccSym0 (Apply SuccSym0 n)- Case_0123456789876543210 ns bs n b 'False = n- type family Lambda_0123456789876543210 ns bs t t where- Lambda_0123456789876543210 ns bs n b = Case_0123456789876543210 ns bs n b b- type Lambda_0123456789876543210Sym4 ns0123456789876543210 bs0123456789876543210 t0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 ns0123456789876543210 bs0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 t0123456789876543210 bs0123456789876543210 ns0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 ns0123456789876543210 bs0123456789876543210 t0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall ns0123456789876543210- bs0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 ns0123456789876543210 bs0123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym4 ns0123456789876543210 bs0123456789876543210 t0123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 ns0123456789876543210 bs0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 t0123456789876543210 bs0123456789876543210 ns0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 bs0123456789876543210 ns0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 bs0123456789876543210 ns0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 ns0123456789876543210 bs0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall ns0123456789876543210- bs0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 ns0123456789876543210 bs0123456789876543210) arg) (Lambda_0123456789876543210Sym3 ns0123456789876543210 bs0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 ns0123456789876543210 bs0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 bs0123456789876543210 ns0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym3 bs0123456789876543210 ns0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 ns0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 ns0123456789876543210 bs0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall ns0123456789876543210- bs0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 ns0123456789876543210) arg) (Lambda_0123456789876543210Sym2 ns0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 ns0123456789876543210 bs0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 ns0123456789876543210) bs0123456789876543210 = Lambda_0123456789876543210Sym2 ns0123456789876543210 bs0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 ns0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall ns0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 ns0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 ns0123456789876543210 = Lambda_0123456789876543210Sym1 ns0123456789876543210- type family Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 t where- Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 'True = Apply SuccSym0 (Apply SuccSym0 n)- Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 'False = n- type family Lambda_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where- Lambda_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n b = Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 b- type Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall a_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210- type FooSym3 (a0123456789876543210 :: (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)) (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: a0123456789876543210) =- Foo a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (FooSym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) FooSym2KindInference) ())- data FooSym2 (a0123456789876543210 :: (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)) (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) a0123456789876543210 b0123456789876543210- where- FooSym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (FooSym2 a0123456789876543210 a0123456789876543210) arg) (FooSym3 a0123456789876543210 a0123456789876543210 arg) =>- FooSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (FooSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = Foo a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (FooSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) FooSym1KindInference) ())- data FooSym1 (a0123456789876543210 :: (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)) :: (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)- where- FooSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (FooSym1 a0123456789876543210) arg) (FooSym2 a0123456789876543210 arg) =>- FooSym1 a0123456789876543210 a0123456789876543210- type instance Apply (FooSym1 a0123456789876543210) a0123456789876543210 = FooSym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) ((~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)) ((~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210))- where- FooSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 a0123456789876543210- type instance Apply FooSym0 a0123456789876543210 = FooSym1 a0123456789876543210- type ZipWithSym3 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) b0123456789876543210 c0123456789876543210)) (a0123456789876543210 :: [a0123456789876543210]) (a0123456789876543210 :: [b0123456789876543210]) =- ZipWith a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ZipWithSym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) ZipWithSym2KindInference) ())- data ZipWithSym2 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) b0123456789876543210 c0123456789876543210)) (a0123456789876543210 :: [a0123456789876543210]) :: (~>) [b0123456789876543210] [c0123456789876543210]- where- ZipWithSym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ZipWithSym2 a0123456789876543210 a0123456789876543210) arg) (ZipWithSym3 a0123456789876543210 a0123456789876543210 arg) =>- ZipWithSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ZipWithSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ZipWith a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ZipWithSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) ZipWithSym1KindInference) ())- data ZipWithSym1 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) b0123456789876543210 c0123456789876543210)) :: (~>) [a0123456789876543210] ((~>) [b0123456789876543210] [c0123456789876543210])- where- ZipWithSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ZipWithSym1 a0123456789876543210) arg) (ZipWithSym2 a0123456789876543210 arg) =>- ZipWithSym1 a0123456789876543210 a0123456789876543210- type instance Apply (ZipWithSym1 a0123456789876543210) a0123456789876543210 = ZipWithSym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ZipWithSym0 where- suppressUnusedWarnings = snd (((,) ZipWithSym0KindInference) ())- data ZipWithSym0 :: forall a0123456789876543210- b0123456789876543210- c0123456789876543210.- (~>) ((~>) a0123456789876543210 ((~>) b0123456789876543210 c0123456789876543210)) ((~>) [a0123456789876543210] ((~>) [b0123456789876543210] [c0123456789876543210]))- where- ZipWithSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ZipWithSym0 arg) (ZipWithSym1 arg) =>- ZipWithSym0 a0123456789876543210- type instance Apply ZipWithSym0 a0123456789876543210 = ZipWithSym1 a0123456789876543210- type SplungeSym2 (a0123456789876543210 :: [Nat]) (a0123456789876543210 :: [Bool]) =- Splunge a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (SplungeSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) SplungeSym1KindInference) ())- data SplungeSym1 (a0123456789876543210 :: [Nat]) :: (~>) [Bool] [Nat]- where- SplungeSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (SplungeSym1 a0123456789876543210) arg) (SplungeSym2 a0123456789876543210 arg) =>- SplungeSym1 a0123456789876543210 a0123456789876543210- type instance Apply (SplungeSym1 a0123456789876543210) a0123456789876543210 = Splunge a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings SplungeSym0 where- suppressUnusedWarnings = snd (((,) SplungeSym0KindInference) ())- data SplungeSym0 :: (~>) [Nat] ((~>) [Bool] [Nat])- where- SplungeSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply SplungeSym0 arg) (SplungeSym1 arg) =>- SplungeSym0 a0123456789876543210- type instance Apply SplungeSym0 a0123456789876543210 = SplungeSym1 a0123456789876543210- type EtadSym2 (a0123456789876543210 :: [Nat]) (a0123456789876543210 :: [Bool]) =- Etad a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (EtadSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) EtadSym1KindInference) ())- data EtadSym1 (a0123456789876543210 :: [Nat]) :: (~>) [Bool] [Nat]- where- EtadSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (EtadSym1 a0123456789876543210) arg) (EtadSym2 a0123456789876543210 arg) =>- EtadSym1 a0123456789876543210 a0123456789876543210- type instance Apply (EtadSym1 a0123456789876543210) a0123456789876543210 = Etad a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings EtadSym0 where- suppressUnusedWarnings = snd (((,) EtadSym0KindInference) ())- data EtadSym0 :: (~>) [Nat] ((~>) [Bool] [Nat])- where- EtadSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply EtadSym0 arg) (EtadSym1 arg) =>- EtadSym0 a0123456789876543210- type instance Apply EtadSym0 a0123456789876543210 = EtadSym1 a0123456789876543210- type LiftMaybeSym2 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: Maybe a0123456789876543210) =- LiftMaybe a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (LiftMaybeSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) LiftMaybeSym1KindInference) ())- data LiftMaybeSym1 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) (Maybe a0123456789876543210) (Maybe b0123456789876543210)- where- LiftMaybeSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (LiftMaybeSym1 a0123456789876543210) arg) (LiftMaybeSym2 a0123456789876543210 arg) =>- LiftMaybeSym1 a0123456789876543210 a0123456789876543210- type instance Apply (LiftMaybeSym1 a0123456789876543210) a0123456789876543210 = LiftMaybe a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings LiftMaybeSym0 where- suppressUnusedWarnings = snd (((,) LiftMaybeSym0KindInference) ())- data LiftMaybeSym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) (Maybe a0123456789876543210) (Maybe b0123456789876543210))- where- LiftMaybeSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply LiftMaybeSym0 arg) (LiftMaybeSym1 arg) =>- LiftMaybeSym0 a0123456789876543210- type instance Apply LiftMaybeSym0 a0123456789876543210 = LiftMaybeSym1 a0123456789876543210- type MapSym2 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: [a0123456789876543210]) =- Map a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (MapSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) MapSym1KindInference) ())- data MapSym1 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) [a0123456789876543210] [b0123456789876543210]- where- MapSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (MapSym1 a0123456789876543210) arg) (MapSym2 a0123456789876543210 arg) =>- MapSym1 a0123456789876543210 a0123456789876543210- type instance Apply (MapSym1 a0123456789876543210) a0123456789876543210 = Map a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings MapSym0 where- suppressUnusedWarnings = snd (((,) MapSym0KindInference) ())- data MapSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) [a0123456789876543210] [b0123456789876543210])- where- MapSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply MapSym0 arg) (MapSym1 arg) =>- MapSym0 a0123456789876543210- type instance Apply MapSym0 a0123456789876543210 = MapSym1 a0123456789876543210- type family Foo (a :: (~>) ((~>) a b) ((~>) a b)) (a :: (~>) a b) (a :: a) :: b where- Foo f g a = Apply (Apply f g) a- type family ZipWith (a :: (~>) a ((~>) b c)) (a :: [a]) (a :: [b]) :: [c] where- ZipWith f ( '(:) x xs) ( '(:) y ys) = Apply (Apply (:@#@$) (Apply (Apply f x) y)) (Apply (Apply (Apply ZipWithSym0 f) xs) ys)- ZipWith _ '[] '[] = '[]- ZipWith _ ( '(:) _ _) '[] = '[]- ZipWith _ '[] ( '(:) _ _) = '[]- type family Splunge (a :: [Nat]) (a :: [Bool]) :: [Nat] where- Splunge ns bs = Apply (Apply (Apply ZipWithSym0 (Apply (Apply Lambda_0123456789876543210Sym0 ns) bs)) ns) bs- type family Etad (a :: [Nat]) (a :: [Bool]) :: [Nat] where- Etad a_0123456789876543210 a_0123456789876543210 = Apply (Apply (Apply ZipWithSym0 (Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210)) a_0123456789876543210) a_0123456789876543210- type family LiftMaybe (a :: (~>) a b) (a :: Maybe a) :: Maybe b where- LiftMaybe f ( 'Just x) = Apply JustSym0 (Apply f x)- LiftMaybe _ 'Nothing = NothingSym0- type family Map (a :: (~>) a b) (a :: [a]) :: [b] where- Map _ '[] = '[]- Map f ( '(:) h t) = Apply (Apply (:@#@$) (Apply f h)) (Apply (Apply MapSym0 f) t)- sFoo ::- forall a- b- (t :: (~>) ((~>) a b) ((~>) a b))- (t :: (~>) a b)- (t :: a).- Sing t- -> Sing t- -> Sing t -> Sing (Apply (Apply (Apply FooSym0 t) t) t :: b)- sZipWith ::- forall a b c (t :: (~>) a ((~>) b c)) (t :: [a]) (t :: [b]).- Sing t- -> Sing t- -> Sing t -> Sing (Apply (Apply (Apply ZipWithSym0 t) t) t :: [c])- sSplunge ::- forall (t :: [Nat]) (t :: [Bool]).- Sing t -> Sing t -> Sing (Apply (Apply SplungeSym0 t) t :: [Nat])- sEtad ::- forall (t :: [Nat]) (t :: [Bool]).- Sing t -> Sing t -> Sing (Apply (Apply EtadSym0 t) t :: [Nat])- sLiftMaybe ::- forall a b (t :: (~>) a b) (t :: Maybe a).- Sing t- -> Sing t -> Sing (Apply (Apply LiftMaybeSym0 t) t :: Maybe b)- sMap ::- forall a b (t :: (~>) a b) (t :: [a]).- Sing t -> Sing t -> Sing (Apply (Apply MapSym0 t) t :: [b])- sFoo (sF :: Sing f) (sG :: Sing g) (sA :: Sing a)- = (applySing ((applySing sF) sG)) sA- sZipWith- (sF :: Sing f)- (SCons (sX :: Sing x) (sXs :: Sing xs))- (SCons (sY :: Sing y) (sYs :: Sing ys))- = (applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((applySing sF) sX)) sY)))- ((applySing- ((applySing ((applySing ((singFun3 @ZipWithSym0) sZipWith)) sF))- sXs))- sYs)- sZipWith _ SNil SNil = SNil- sZipWith _ (SCons _ _) SNil = SNil- sZipWith _ SNil (SCons _ _) = SNil- sSplunge (sNs :: Sing ns) (sBs :: Sing bs)- = (applySing- ((applySing- ((applySing ((singFun3 @ZipWithSym0) sZipWith))- ((singFun2 @(Apply (Apply Lambda_0123456789876543210Sym0 ns) bs))- (\ sN sB- -> case ((,) sN) sB of {- (,) (_ :: Sing n) (_ :: Sing b)- -> (case sB of- STrue- -> (applySing ((singFun1 @SuccSym0) SSucc))- ((applySing ((singFun1 @SuccSym0) SSucc)) sN)- SFalse -> sN) ::- Sing (Case_0123456789876543210 ns bs n b b) }))))- sNs))- sBs- sEtad- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ZipWithSym0) sZipWith))- ((singFun2- @(Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210))- (\ sN sB- -> case ((,) sN) sB of {- (,) (_ :: Sing n) (_ :: Sing b)- -> (case sB of- STrue- -> (applySing ((singFun1 @SuccSym0) SSucc))- ((applySing ((singFun1 @SuccSym0) SSucc)) sN)- SFalse -> sN) ::- Sing (Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 b) }))))- sA_0123456789876543210))- sA_0123456789876543210- sLiftMaybe (sF :: Sing f) (SJust (sX :: Sing x))- = (applySing ((singFun1 @JustSym0) SJust)) ((applySing sF) sX)- sLiftMaybe _ SNothing = SNothing- sMap _ SNil = SNil- sMap (sF :: Sing f) (SCons (sH :: Sing h) (sT :: Sing t))- = (applySing- ((applySing ((singFun2 @(:@#@$)) SCons)) ((applySing sF) sH)))- ((applySing ((applySing ((singFun2 @MapSym0) sMap)) sF)) sT)- instance SingI (FooSym0 :: (~>) ((~>) ((~>) a b) ((~>) a b)) ((~>) ((~>) a b) ((~>) a b))) where- sing = (singFun3 @FooSym0) sFoo- instance SingI d =>- SingI (FooSym1 (d :: (~>) ((~>) a b) ((~>) a b)) :: (~>) ((~>) a b) ((~>) a b)) where- sing- = (singFun2 @(FooSym1 (d :: (~>) ((~>) a b) ((~>) a b))))- (sFoo (sing @d))- instance (SingI d, SingI d) =>- SingI (FooSym2 (d :: (~>) ((~>) a b) ((~>) a b)) (d :: (~>) a b) :: (~>) a b) where- sing- = (singFun1- @(FooSym2 (d :: (~>) ((~>) a b) ((~>) a b)) (d :: (~>) a b)))- ((sFoo (sing @d)) (sing @d))- instance SingI (ZipWithSym0 :: (~>) ((~>) a ((~>) b c)) ((~>) [a] ((~>) [b] [c]))) where- sing = (singFun3 @ZipWithSym0) sZipWith- instance SingI d =>- SingI (ZipWithSym1 (d :: (~>) a ((~>) b c)) :: (~>) [a] ((~>) [b] [c])) where- sing- = (singFun2 @(ZipWithSym1 (d :: (~>) a ((~>) b c))))- (sZipWith (sing @d))- instance (SingI d, SingI d) =>- SingI (ZipWithSym2 (d :: (~>) a ((~>) b c)) (d :: [a]) :: (~>) [b] [c]) where- sing- = (singFun1 @(ZipWithSym2 (d :: (~>) a ((~>) b c)) (d :: [a])))- ((sZipWith (sing @d)) (sing @d))- instance SingI (SplungeSym0 :: (~>) [Nat] ((~>) [Bool] [Nat])) where- sing = (singFun2 @SplungeSym0) sSplunge- instance SingI d =>- SingI (SplungeSym1 (d :: [Nat]) :: (~>) [Bool] [Nat]) where- sing = (singFun1 @(SplungeSym1 (d :: [Nat]))) (sSplunge (sing @d))- instance SingI (EtadSym0 :: (~>) [Nat] ((~>) [Bool] [Nat])) where- sing = (singFun2 @EtadSym0) sEtad- instance SingI d =>- SingI (EtadSym1 (d :: [Nat]) :: (~>) [Bool] [Nat]) where- sing = (singFun1 @(EtadSym1 (d :: [Nat]))) (sEtad (sing @d))- instance SingI (LiftMaybeSym0 :: (~>) ((~>) a b) ((~>) (Maybe a) (Maybe b))) where- sing = (singFun2 @LiftMaybeSym0) sLiftMaybe- instance SingI d =>- SingI (LiftMaybeSym1 (d :: (~>) a b) :: (~>) (Maybe a) (Maybe b)) where- sing- = (singFun1 @(LiftMaybeSym1 (d :: (~>) a b)))- (sLiftMaybe (sing @d))- instance SingI (MapSym0 :: (~>) ((~>) a b) ((~>) [a] [b])) where- sing = (singFun2 @MapSym0) sMap- instance SingI d =>- SingI (MapSym1 (d :: (~>) a b) :: (~>) [a] [b]) where- sing = (singFun1 @(MapSym1 (d :: (~>) a b))) (sMap (sing @d))- data instance Sing :: Either a b -> GHC.Types.Type- where- SLeft :: forall a (n :: a). (Sing (n :: a)) -> Sing (Left n)- SRight :: forall b (n :: b). (Sing (n :: b)) -> Sing (Right n)- type SEither = (Sing :: Either a b -> GHC.Types.Type)- instance (SingKind a, SingKind b) => SingKind (Either a b) where- type Demote (Either a b) = Either (Demote a) (Demote b)- fromSing (SLeft b) = Left (fromSing b)- fromSing (SRight b) = Right (fromSing b)- toSing (Left (b :: Demote a))- = case toSing b :: SomeSing a of {- SomeSing c -> SomeSing (SLeft c) }- toSing (Right (b :: Demote b))- = case toSing b :: SomeSing b of {- SomeSing c -> SomeSing (SRight c) }- instance SingI n => SingI (Left (n :: a)) where- sing = SLeft sing- instance SingI (LeftSym0 :: (~>) a (Either a b)) where- sing = (singFun1 @LeftSym0) SLeft- instance SingI (TyCon1 Left :: (~>) a (Either a b)) where- sing = (singFun1 @(TyCon1 Left)) SLeft- instance SingI n => SingI (Right (n :: b)) where- sing = SRight sing- instance SingI (RightSym0 :: (~>) b (Either a b)) where- sing = (singFun1 @RightSym0) SRight- instance SingI (TyCon1 Right :: (~>) b (Either a b)) where- sing = (singFun1 @(TyCon1 Right)) SRight
+ tests/compile-and-dump/Singletons/HigherOrder.ghc88.template view
@@ -0,0 +1,477 @@+Singletons/HigherOrder.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| map :: (a -> b) -> [a] -> [b]+ map _ [] = []+ map f (h : t) = (f h) : (map f t)+ liftMaybe :: (a -> b) -> Maybe a -> Maybe b+ liftMaybe f (Just x) = Just (f x)+ liftMaybe _ Nothing = Nothing+ zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]+ zipWith f (x : xs) (y : ys) = f x y : zipWith f xs ys+ zipWith _ [] [] = []+ zipWith _ (_ : _) [] = []+ zipWith _ [] (_ : _) = []+ foo :: ((a -> b) -> a -> b) -> (a -> b) -> a -> b+ foo f g a = f g a+ splunge :: [Nat] -> [Bool] -> [Nat]+ splunge ns bs+ = zipWith (\ n b -> if b then Succ (Succ n) else n) ns bs+ etad :: [Nat] -> [Bool] -> [Nat]+ etad = zipWith (\ n b -> if b then Succ (Succ n) else n)+ + data Either a b = Left a | Right b |]+ ======>+ data Either a b = Left a | Right b+ map :: (a -> b) -> [a] -> [b]+ map _ [] = []+ map f (h : t) = (f h : (map f) t)+ liftMaybe :: (a -> b) -> Maybe a -> Maybe b+ liftMaybe f (Just x) = Just (f x)+ liftMaybe _ Nothing = Nothing+ zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]+ zipWith f (x : xs) (y : ys) = ((f x) y : ((zipWith f) xs) ys)+ zipWith _ [] [] = []+ zipWith _ (_ : _) [] = []+ zipWith _ [] (_ : _) = []+ foo :: ((a -> b) -> a -> b) -> (a -> b) -> a -> b+ foo f g a = (f g) a+ splunge :: [Nat] -> [Bool] -> [Nat]+ splunge ns bs+ = ((zipWith (\ n b -> if b then Succ (Succ n) else n)) ns) bs+ etad :: [Nat] -> [Bool] -> [Nat]+ etad = zipWith (\ n b -> if b then Succ (Succ n) else n)+ type LeftSym1 (t0123456789876543210 :: a0123456789876543210) =+ Left t0123456789876543210+ instance SuppressUnusedWarnings LeftSym0 where+ suppressUnusedWarnings = snd (((,) LeftSym0KindInference) ())+ data LeftSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 (Either a0123456789876543210 b0123456789876543210)+ where+ LeftSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply LeftSym0 arg) (LeftSym1 arg) =>+ LeftSym0 t0123456789876543210+ type instance Apply LeftSym0 t0123456789876543210 = Left t0123456789876543210+ type RightSym1 (t0123456789876543210 :: b0123456789876543210) =+ Right t0123456789876543210+ instance SuppressUnusedWarnings RightSym0 where+ suppressUnusedWarnings = snd (((,) RightSym0KindInference) ())+ data RightSym0 :: forall b0123456789876543210 a0123456789876543210.+ (~>) b0123456789876543210 (Either a0123456789876543210 b0123456789876543210)+ where+ RightSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply RightSym0 arg) (RightSym1 arg) =>+ RightSym0 t0123456789876543210+ type instance Apply RightSym0 t0123456789876543210 = Right t0123456789876543210+ type family Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 t where+ Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 'True = Apply SuccSym0 (Apply SuccSym0 n)+ Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 'False = n+ type family Lambda_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where+ Lambda_0123456789876543210 a_0123456789876543210 a_0123456789876543210 n b = Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 b+ type Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall a_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210+ type family Case_0123456789876543210 n b ns bs t where+ Case_0123456789876543210 n b ns bs 'True = Apply SuccSym0 (Apply SuccSym0 n)+ Case_0123456789876543210 n b ns bs 'False = n+ type family Lambda_0123456789876543210 ns bs t t where+ Lambda_0123456789876543210 ns bs n b = Case_0123456789876543210 n b ns bs b+ type Lambda_0123456789876543210Sym4 ns0123456789876543210 bs0123456789876543210 t0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 ns0123456789876543210 bs0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 t0123456789876543210 bs0123456789876543210 ns0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 ns0123456789876543210 bs0123456789876543210 t0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall ns0123456789876543210+ bs0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 ns0123456789876543210 bs0123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym4 ns0123456789876543210 bs0123456789876543210 t0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 ns0123456789876543210 bs0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 t0123456789876543210 bs0123456789876543210 ns0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 bs0123456789876543210 ns0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 bs0123456789876543210 ns0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 ns0123456789876543210 bs0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall ns0123456789876543210+ bs0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 ns0123456789876543210 bs0123456789876543210) arg) (Lambda_0123456789876543210Sym3 ns0123456789876543210 bs0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 ns0123456789876543210 bs0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 bs0123456789876543210 ns0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym3 bs0123456789876543210 ns0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 ns0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 ns0123456789876543210 bs0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall ns0123456789876543210+ bs0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 ns0123456789876543210) arg) (Lambda_0123456789876543210Sym2 ns0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 ns0123456789876543210 bs0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 ns0123456789876543210) bs0123456789876543210 = Lambda_0123456789876543210Sym2 ns0123456789876543210 bs0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 ns0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall ns0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 ns0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 ns0123456789876543210 = Lambda_0123456789876543210Sym1 ns0123456789876543210+ type EtadSym2 (a0123456789876543210 :: [Nat]) (a0123456789876543210 :: [Bool]) =+ Etad a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (EtadSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) EtadSym1KindInference) ())+ data EtadSym1 (a0123456789876543210 :: [Nat]) :: (~>) [Bool] [Nat]+ where+ EtadSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (EtadSym1 a0123456789876543210) arg) (EtadSym2 a0123456789876543210 arg) =>+ EtadSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (EtadSym1 a0123456789876543210) a0123456789876543210 = Etad a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings EtadSym0 where+ suppressUnusedWarnings = snd (((,) EtadSym0KindInference) ())+ data EtadSym0 :: (~>) [Nat] ((~>) [Bool] [Nat])+ where+ EtadSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply EtadSym0 arg) (EtadSym1 arg) =>+ EtadSym0 a0123456789876543210+ type instance Apply EtadSym0 a0123456789876543210 = EtadSym1 a0123456789876543210+ type SplungeSym2 (a0123456789876543210 :: [Nat]) (a0123456789876543210 :: [Bool]) =+ Splunge a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (SplungeSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) SplungeSym1KindInference) ())+ data SplungeSym1 (a0123456789876543210 :: [Nat]) :: (~>) [Bool] [Nat]+ where+ SplungeSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (SplungeSym1 a0123456789876543210) arg) (SplungeSym2 a0123456789876543210 arg) =>+ SplungeSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (SplungeSym1 a0123456789876543210) a0123456789876543210 = Splunge a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings SplungeSym0 where+ suppressUnusedWarnings = snd (((,) SplungeSym0KindInference) ())+ data SplungeSym0 :: (~>) [Nat] ((~>) [Bool] [Nat])+ where+ SplungeSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply SplungeSym0 arg) (SplungeSym1 arg) =>+ SplungeSym0 a0123456789876543210+ type instance Apply SplungeSym0 a0123456789876543210 = SplungeSym1 a0123456789876543210+ type FooSym3 (a0123456789876543210 :: (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)) (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: a0123456789876543210) =+ Foo a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (FooSym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FooSym2KindInference) ())+ data FooSym2 (a0123456789876543210 :: (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)) (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) a0123456789876543210 b0123456789876543210+ where+ FooSym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (FooSym2 a0123456789876543210 a0123456789876543210) arg) (FooSym3 a0123456789876543210 a0123456789876543210 arg) =>+ FooSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (FooSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = Foo a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (FooSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FooSym1KindInference) ())+ data FooSym1 (a0123456789876543210 :: (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)) :: (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)+ where+ FooSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (FooSym1 a0123456789876543210) arg) (FooSym2 a0123456789876543210 arg) =>+ FooSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (FooSym1 a0123456789876543210) a0123456789876543210 = FooSym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) ((~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)) ((~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210))+ where+ FooSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 a0123456789876543210+ type instance Apply FooSym0 a0123456789876543210 = FooSym1 a0123456789876543210+ type ZipWithSym3 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) b0123456789876543210 c0123456789876543210)) (a0123456789876543210 :: [a0123456789876543210]) (a0123456789876543210 :: [b0123456789876543210]) =+ ZipWith a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ZipWithSym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ZipWithSym2KindInference) ())+ data ZipWithSym2 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) b0123456789876543210 c0123456789876543210)) (a0123456789876543210 :: [a0123456789876543210]) :: (~>) [b0123456789876543210] [c0123456789876543210]+ where+ ZipWithSym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ZipWithSym2 a0123456789876543210 a0123456789876543210) arg) (ZipWithSym3 a0123456789876543210 a0123456789876543210 arg) =>+ ZipWithSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ZipWithSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ZipWith a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ZipWithSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ZipWithSym1KindInference) ())+ data ZipWithSym1 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) b0123456789876543210 c0123456789876543210)) :: (~>) [a0123456789876543210] ((~>) [b0123456789876543210] [c0123456789876543210])+ where+ ZipWithSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ZipWithSym1 a0123456789876543210) arg) (ZipWithSym2 a0123456789876543210 arg) =>+ ZipWithSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ZipWithSym1 a0123456789876543210) a0123456789876543210 = ZipWithSym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ZipWithSym0 where+ suppressUnusedWarnings = snd (((,) ZipWithSym0KindInference) ())+ data ZipWithSym0 :: forall a0123456789876543210+ b0123456789876543210+ c0123456789876543210.+ (~>) ((~>) a0123456789876543210 ((~>) b0123456789876543210 c0123456789876543210)) ((~>) [a0123456789876543210] ((~>) [b0123456789876543210] [c0123456789876543210]))+ where+ ZipWithSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ZipWithSym0 arg) (ZipWithSym1 arg) =>+ ZipWithSym0 a0123456789876543210+ type instance Apply ZipWithSym0 a0123456789876543210 = ZipWithSym1 a0123456789876543210+ type LiftMaybeSym2 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: Maybe a0123456789876543210) =+ LiftMaybe a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (LiftMaybeSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) LiftMaybeSym1KindInference) ())+ data LiftMaybeSym1 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) (Maybe a0123456789876543210) (Maybe b0123456789876543210)+ where+ LiftMaybeSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (LiftMaybeSym1 a0123456789876543210) arg) (LiftMaybeSym2 a0123456789876543210 arg) =>+ LiftMaybeSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (LiftMaybeSym1 a0123456789876543210) a0123456789876543210 = LiftMaybe a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings LiftMaybeSym0 where+ suppressUnusedWarnings = snd (((,) LiftMaybeSym0KindInference) ())+ data LiftMaybeSym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) (Maybe a0123456789876543210) (Maybe b0123456789876543210))+ where+ LiftMaybeSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply LiftMaybeSym0 arg) (LiftMaybeSym1 arg) =>+ LiftMaybeSym0 a0123456789876543210+ type instance Apply LiftMaybeSym0 a0123456789876543210 = LiftMaybeSym1 a0123456789876543210+ type MapSym2 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: [a0123456789876543210]) =+ Map a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (MapSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MapSym1KindInference) ())+ data MapSym1 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) [a0123456789876543210] [b0123456789876543210]+ where+ MapSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (MapSym1 a0123456789876543210) arg) (MapSym2 a0123456789876543210 arg) =>+ MapSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (MapSym1 a0123456789876543210) a0123456789876543210 = Map a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings MapSym0 where+ suppressUnusedWarnings = snd (((,) MapSym0KindInference) ())+ data MapSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) [a0123456789876543210] [b0123456789876543210])+ where+ MapSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply MapSym0 arg) (MapSym1 arg) =>+ MapSym0 a0123456789876543210+ type instance Apply MapSym0 a0123456789876543210 = MapSym1 a0123456789876543210+ type family Etad (a :: [Nat]) (a :: [Bool]) :: [Nat] where+ Etad a_0123456789876543210 a_0123456789876543210 = Apply (Apply (Apply ZipWithSym0 (Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210)) a_0123456789876543210) a_0123456789876543210+ type family Splunge (a :: [Nat]) (a :: [Bool]) :: [Nat] where+ Splunge ns bs = Apply (Apply (Apply ZipWithSym0 (Apply (Apply Lambda_0123456789876543210Sym0 ns) bs)) ns) bs+ type family Foo (a :: (~>) ((~>) a b) ((~>) a b)) (a :: (~>) a b) (a :: a) :: b where+ Foo f g a = Apply (Apply f g) a+ type family ZipWith (a :: (~>) a ((~>) b c)) (a :: [a]) (a :: [b]) :: [c] where+ ZipWith f ('(:) x xs) ('(:) y ys) = Apply (Apply (:@#@$) (Apply (Apply f x) y)) (Apply (Apply (Apply ZipWithSym0 f) xs) ys)+ ZipWith _ '[] '[] = '[]+ ZipWith _ ('(:) _ _) '[] = '[]+ ZipWith _ '[] ('(:) _ _) = '[]+ type family LiftMaybe (a :: (~>) a b) (a :: Maybe a) :: Maybe b where+ LiftMaybe f ('Just x) = Apply JustSym0 (Apply f x)+ LiftMaybe _ 'Nothing = NothingSym0+ type family Map (a :: (~>) a b) (a :: [a]) :: [b] where+ Map _ '[] = '[]+ Map f ('(:) h t) = Apply (Apply (:@#@$) (Apply f h)) (Apply (Apply MapSym0 f) t)+ sEtad ::+ forall (t :: [Nat]) (t :: [Bool]).+ Sing t -> Sing t -> Sing (Apply (Apply EtadSym0 t) t :: [Nat])+ sSplunge ::+ forall (t :: [Nat]) (t :: [Bool]).+ Sing t -> Sing t -> Sing (Apply (Apply SplungeSym0 t) t :: [Nat])+ sFoo ::+ forall a+ b+ (t :: (~>) ((~>) a b) ((~>) a b))+ (t :: (~>) a b)+ (t :: a).+ Sing t+ -> Sing t+ -> Sing t -> Sing (Apply (Apply (Apply FooSym0 t) t) t :: b)+ sZipWith ::+ forall a b c (t :: (~>) a ((~>) b c)) (t :: [a]) (t :: [b]).+ Sing t+ -> Sing t+ -> Sing t -> Sing (Apply (Apply (Apply ZipWithSym0 t) t) t :: [c])+ sLiftMaybe ::+ forall a b (t :: (~>) a b) (t :: Maybe a).+ Sing t+ -> Sing t -> Sing (Apply (Apply LiftMaybeSym0 t) t :: Maybe b)+ sMap ::+ forall a b (t :: (~>) a b) (t :: [a]).+ Sing t -> Sing t -> Sing (Apply (Apply MapSym0 t) t :: [b])+ sEtad+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ZipWithSym0) sZipWith))+ ((singFun2+ @(Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210))+ (\ sN sB+ -> case ((,) sN) sB of {+ (,) (_ :: Sing n) (_ :: Sing b)+ -> (id+ @(Sing (Case_0123456789876543210 n b a_0123456789876543210 a_0123456789876543210 b)))+ (case sB of+ STrue+ -> (applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing ((singFun1 @SuccSym0) SSucc)) sN)+ SFalse -> sN) }))))+ sA_0123456789876543210))+ sA_0123456789876543210+ sSplunge (sNs :: Sing ns) (sBs :: Sing bs)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ZipWithSym0) sZipWith))+ ((singFun2 @(Apply (Apply Lambda_0123456789876543210Sym0 ns) bs))+ (\ sN sB+ -> case ((,) sN) sB of {+ (,) (_ :: Sing n) (_ :: Sing b)+ -> (id @(Sing (Case_0123456789876543210 n b ns bs b)))+ (case sB of+ STrue+ -> (applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing ((singFun1 @SuccSym0) SSucc)) sN)+ SFalse -> sN) }))))+ sNs))+ sBs+ sFoo (sF :: Sing f) (sG :: Sing g) (sA :: Sing a)+ = (applySing ((applySing sF) sG)) sA+ sZipWith+ (sF :: Sing f)+ (SCons (sX :: Sing x) (sXs :: Sing xs))+ (SCons (sY :: Sing y) (sYs :: Sing ys))+ = (applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((applySing sF) sX)) sY)))+ ((applySing+ ((applySing ((applySing ((singFun3 @ZipWithSym0) sZipWith)) sF))+ sXs))+ sYs)+ sZipWith _ SNil SNil = SNil+ sZipWith _ (SCons _ _) SNil = SNil+ sZipWith _ SNil (SCons _ _) = SNil+ sLiftMaybe (sF :: Sing f) (SJust (sX :: Sing x))+ = (applySing ((singFun1 @JustSym0) SJust)) ((applySing sF) sX)+ sLiftMaybe _ SNothing = SNothing+ sMap _ SNil = SNil+ sMap (sF :: Sing f) (SCons (sH :: Sing h) (sT :: Sing t))+ = (applySing+ ((applySing ((singFun2 @(:@#@$)) SCons)) ((applySing sF) sH)))+ ((applySing ((applySing ((singFun2 @MapSym0) sMap)) sF)) sT)+ instance SingI (EtadSym0 :: (~>) [Nat] ((~>) [Bool] [Nat])) where+ sing = (singFun2 @EtadSym0) sEtad+ instance SingI d =>+ SingI (EtadSym1 (d :: [Nat]) :: (~>) [Bool] [Nat]) where+ sing = (singFun1 @(EtadSym1 (d :: [Nat]))) (sEtad (sing @d))+ instance SingI (SplungeSym0 :: (~>) [Nat] ((~>) [Bool] [Nat])) where+ sing = (singFun2 @SplungeSym0) sSplunge+ instance SingI d =>+ SingI (SplungeSym1 (d :: [Nat]) :: (~>) [Bool] [Nat]) where+ sing = (singFun1 @(SplungeSym1 (d :: [Nat]))) (sSplunge (sing @d))+ instance SingI (FooSym0 :: (~>) ((~>) ((~>) a b) ((~>) a b)) ((~>) ((~>) a b) ((~>) a b))) where+ sing = (singFun3 @FooSym0) sFoo+ instance SingI d =>+ SingI (FooSym1 (d :: (~>) ((~>) a b) ((~>) a b)) :: (~>) ((~>) a b) ((~>) a b)) where+ sing+ = (singFun2 @(FooSym1 (d :: (~>) ((~>) a b) ((~>) a b))))+ (sFoo (sing @d))+ instance (SingI d, SingI d) =>+ SingI (FooSym2 (d :: (~>) ((~>) a b) ((~>) a b)) (d :: (~>) a b) :: (~>) a b) where+ sing+ = (singFun1+ @(FooSym2 (d :: (~>) ((~>) a b) ((~>) a b)) (d :: (~>) a b)))+ ((sFoo (sing @d)) (sing @d))+ instance SingI (ZipWithSym0 :: (~>) ((~>) a ((~>) b c)) ((~>) [a] ((~>) [b] [c]))) where+ sing = (singFun3 @ZipWithSym0) sZipWith+ instance SingI d =>+ SingI (ZipWithSym1 (d :: (~>) a ((~>) b c)) :: (~>) [a] ((~>) [b] [c])) where+ sing+ = (singFun2 @(ZipWithSym1 (d :: (~>) a ((~>) b c))))+ (sZipWith (sing @d))+ instance (SingI d, SingI d) =>+ SingI (ZipWithSym2 (d :: (~>) a ((~>) b c)) (d :: [a]) :: (~>) [b] [c]) where+ sing+ = (singFun1 @(ZipWithSym2 (d :: (~>) a ((~>) b c)) (d :: [a])))+ ((sZipWith (sing @d)) (sing @d))+ instance SingI (LiftMaybeSym0 :: (~>) ((~>) a b) ((~>) (Maybe a) (Maybe b))) where+ sing = (singFun2 @LiftMaybeSym0) sLiftMaybe+ instance SingI d =>+ SingI (LiftMaybeSym1 (d :: (~>) a b) :: (~>) (Maybe a) (Maybe b)) where+ sing+ = (singFun1 @(LiftMaybeSym1 (d :: (~>) a b)))+ (sLiftMaybe (sing @d))+ instance SingI (MapSym0 :: (~>) ((~>) a b) ((~>) [a] [b])) where+ sing = (singFun2 @MapSym0) sMap+ instance SingI d =>+ SingI (MapSym1 (d :: (~>) a b) :: (~>) [a] [b]) where+ sing = (singFun1 @(MapSym1 (d :: (~>) a b))) (sMap (sing @d))+ data SEither :: forall a b. Either a b -> GHC.Types.Type+ where+ SLeft :: forall a (n :: a). (Sing (n :: a)) -> SEither (Left n)+ SRight :: forall b (n :: b). (Sing (n :: b)) -> SEither (Right n)+ type instance Sing @(Either a b) = SEither+ instance (SingKind a, SingKind b) => SingKind (Either a b) where+ type Demote (Either a b) = Either (Demote a) (Demote b)+ fromSing (SLeft b) = Left (fromSing b)+ fromSing (SRight b) = Right (fromSing b)+ toSing (Left (b :: Demote a))+ = case toSing b :: SomeSing a of {+ SomeSing c -> SomeSing (SLeft c) }+ toSing (Right (b :: Demote b))+ = case toSing b :: SomeSing b of {+ SomeSing c -> SomeSing (SRight c) }+ instance SingI n => SingI (Left (n :: a)) where+ sing = SLeft sing+ instance SingI (LeftSym0 :: (~>) a (Either a b)) where+ sing = (singFun1 @LeftSym0) SLeft+ instance SingI n => SingI (Right (n :: b)) where+ sing = SRight sing+ instance SingI (RightSym0 :: (~>) b (Either a b)) where+ sing = (singFun1 @RightSym0) SRight
− tests/compile-and-dump/Singletons/LambdaCase.ghc86.template
@@ -1,252 +0,0 @@-Singletons/LambdaCase.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo1 :: a -> Maybe a -> a- foo1 d x- = (\case- Just y -> y- Nothing -> d)- x- foo2 :: a -> Maybe a -> a- foo2 d _- = (\case- Just y -> y- Nothing -> d)- (Just d)- foo3 :: a -> b -> a- foo3 a b = (\case (p, _) -> p) (a, b) |]- ======>- foo1 :: a -> Maybe a -> a- foo1 d x- = (\case- Just y -> y- Nothing -> d)- x- foo2 :: a -> Maybe a -> a- foo2 d _- = (\case- Just y -> y- Nothing -> d)- (Just d)- foo3 :: a -> b -> a- foo3 a b = (\case (p, _) -> p) (a, b)- type family Case_0123456789876543210 a b x_0123456789876543210 t where- Case_0123456789876543210 a b x_0123456789876543210 '(p, _) = p- type family Lambda_0123456789876543210 a b t where- Lambda_0123456789876543210 a b x_0123456789876543210 = Case_0123456789876543210 a b x_0123456789876543210 x_0123456789876543210- type Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall a0123456789876543210- b0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210) arg) (Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 b0123456789876543210 a0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall a0123456789876543210- b0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) arg) (Lambda_0123456789876543210Sym2 a0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) b0123456789876543210 = Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 a0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 a0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 a0123456789876543210 = Lambda_0123456789876543210Sym1 a0123456789876543210- type family Case_0123456789876543210 d x_0123456789876543210 t where- Case_0123456789876543210 d x_0123456789876543210 ( 'Just y) = y- Case_0123456789876543210 d x_0123456789876543210 'Nothing = d- type family Lambda_0123456789876543210 d t where- Lambda_0123456789876543210 d x_0123456789876543210 = Case_0123456789876543210 d x_0123456789876543210 x_0123456789876543210- type Lambda_0123456789876543210Sym2 d0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 d0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 d0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 d0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall d0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 d0123456789876543210) arg) (Lambda_0123456789876543210Sym2 d0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 d0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 d0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 d0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 d0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall d0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 d0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 d0123456789876543210 = Lambda_0123456789876543210Sym1 d0123456789876543210- type family Case_0123456789876543210 d x x_0123456789876543210 t where- Case_0123456789876543210 d x x_0123456789876543210 ( 'Just y) = y- Case_0123456789876543210 d x x_0123456789876543210 'Nothing = d- type family Lambda_0123456789876543210 d x t where- Lambda_0123456789876543210 d x x_0123456789876543210 = Case_0123456789876543210 d x x_0123456789876543210 x_0123456789876543210- type Lambda_0123456789876543210Sym3 d0123456789876543210 x0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 d0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 x0123456789876543210 d0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 d0123456789876543210 x0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall d0123456789876543210- x0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 d0123456789876543210 x0123456789876543210) arg) (Lambda_0123456789876543210Sym3 d0123456789876543210 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 d0123456789876543210 x0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 d0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 d0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 d0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 d0123456789876543210 x0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall d0123456789876543210- x0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 d0123456789876543210) arg) (Lambda_0123456789876543210Sym2 d0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 d0123456789876543210 x0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 d0123456789876543210) x0123456789876543210 = Lambda_0123456789876543210Sym2 d0123456789876543210 x0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 d0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall d0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 d0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 d0123456789876543210 = Lambda_0123456789876543210Sym1 d0123456789876543210- type Foo3Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Foo3 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo3Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo3Sym1KindInference) ())- data Foo3Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 a0123456789876543210- where- Foo3Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo3Sym1 a0123456789876543210) arg) (Foo3Sym2 a0123456789876543210 arg) =>- Foo3Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo3Sym1 a0123456789876543210) a0123456789876543210 = Foo3 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo3Sym0 where- suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())- data Foo3Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)- where- Foo3Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>- Foo3Sym0 a0123456789876543210- type instance Apply Foo3Sym0 a0123456789876543210 = Foo3Sym1 a0123456789876543210- type Foo2Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: Maybe a0123456789876543210) =- Foo2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo2Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo2Sym1KindInference) ())- data Foo2Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) (Maybe a0123456789876543210) a0123456789876543210- where- Foo2Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo2Sym1 a0123456789876543210) arg) (Foo2Sym2 a0123456789876543210 arg) =>- Foo2Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo2Sym1 a0123456789876543210) a0123456789876543210 = Foo2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo2Sym0 where- suppressUnusedWarnings = snd (((,) Foo2Sym0KindInference) ())- data Foo2Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) a0123456789876543210)- where- Foo2Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo2Sym0 arg) (Foo2Sym1 arg) =>- Foo2Sym0 a0123456789876543210- type instance Apply Foo2Sym0 a0123456789876543210 = Foo2Sym1 a0123456789876543210- type Foo1Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: Maybe a0123456789876543210) =- Foo1 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo1Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo1Sym1KindInference) ())- data Foo1Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) (Maybe a0123456789876543210) a0123456789876543210- where- Foo1Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo1Sym1 a0123456789876543210) arg) (Foo1Sym2 a0123456789876543210 arg) =>- Foo1Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo1Sym1 a0123456789876543210) a0123456789876543210 = Foo1 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo1Sym0 where- suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())- data Foo1Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) a0123456789876543210)- where- Foo1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>- Foo1Sym0 a0123456789876543210- type instance Apply Foo1Sym0 a0123456789876543210 = Foo1Sym1 a0123456789876543210- type family Foo3 (a :: a) (a :: b) :: a where- Foo3 a b = Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) b) (Apply (Apply Tuple2Sym0 a) b)- type family Foo2 (a :: a) (a :: Maybe a) :: a where- Foo2 d _ = Apply (Apply Lambda_0123456789876543210Sym0 d) (Apply JustSym0 d)- type family Foo1 (a :: a) (a :: Maybe a) :: a where- Foo1 d x = Apply (Apply (Apply Lambda_0123456789876543210Sym0 d) x) x- sFoo3 ::- forall a b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply Foo3Sym0 t) t :: a)- sFoo2 ::- forall a (t :: a) (t :: Maybe a).- Sing t -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)- sFoo1 ::- forall a (t :: a) (t :: Maybe a).- Sing t -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)- sFoo3 (sA :: Sing a) (sB :: Sing b)- = (applySing- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 a) b))- (\ sX_0123456789876543210- -> case sX_0123456789876543210 of {- (_ :: Sing x_0123456789876543210)- -> (case sX_0123456789876543210 of {- STuple2 (sP :: Sing p) _ -> sP }) ::- Sing (Case_0123456789876543210 a b x_0123456789876543210 x_0123456789876543210) })))- ((applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sA)) sB)- sFoo2 (sD :: Sing d) _- = (applySing- ((singFun1 @(Apply Lambda_0123456789876543210Sym0 d))- (\ sX_0123456789876543210- -> case sX_0123456789876543210 of {- (_ :: Sing x_0123456789876543210)- -> (case sX_0123456789876543210 of- SJust (sY :: Sing y) -> sY- SNothing -> sD) ::- Sing (Case_0123456789876543210 d x_0123456789876543210 x_0123456789876543210) })))- ((applySing ((singFun1 @JustSym0) SJust)) sD)- sFoo1 (sD :: Sing d) (sX :: Sing x)- = (applySing- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 d) x))- (\ sX_0123456789876543210- -> case sX_0123456789876543210 of {- (_ :: Sing x_0123456789876543210)- -> (case sX_0123456789876543210 of- SJust (sY :: Sing y) -> sY- SNothing -> sD) ::- Sing (Case_0123456789876543210 d x x_0123456789876543210 x_0123456789876543210) })))- sX- instance SingI (Foo3Sym0 :: (~>) a ((~>) b a)) where- sing = (singFun2 @Foo3Sym0) sFoo3- instance SingI d => SingI (Foo3Sym1 (d :: a) :: (~>) b a) where- sing = (singFun1 @(Foo3Sym1 (d :: a))) (sFoo3 (sing @d))- instance SingI (Foo2Sym0 :: (~>) a ((~>) (Maybe a) a)) where- sing = (singFun2 @Foo2Sym0) sFoo2- instance SingI d =>- SingI (Foo2Sym1 (d :: a) :: (~>) (Maybe a) a) where- sing = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 (sing @d))- instance SingI (Foo1Sym0 :: (~>) a ((~>) (Maybe a) a)) where- sing = (singFun2 @Foo1Sym0) sFoo1- instance SingI d =>- SingI (Foo1Sym1 (d :: a) :: (~>) (Maybe a) a) where- sing = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 (sing @d))
+ tests/compile-and-dump/Singletons/LambdaCase.ghc88.template view
@@ -0,0 +1,255 @@+Singletons/LambdaCase.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo1 :: a -> Maybe a -> a+ foo1 d x+ = (\case+ Just y -> y+ Nothing -> d)+ x+ foo2 :: a -> Maybe a -> a+ foo2 d _+ = (\case+ Just y -> y+ Nothing -> d)+ (Just d)+ foo3 :: a -> b -> a+ foo3 a b = (\case (p, _) -> p) (a, b) |]+ ======>+ foo1 :: a -> Maybe a -> a+ foo1 d x+ = (\case+ Just y -> y+ Nothing -> d)+ x+ foo2 :: a -> Maybe a -> a+ foo2 d _+ = (\case+ Just y -> y+ Nothing -> d)+ (Just d)+ foo3 :: a -> b -> a+ foo3 a b = (\case (p, _) -> p) (a, b)+ type family Case_0123456789876543210 x_0123456789876543210 a b t where+ Case_0123456789876543210 x_0123456789876543210 a b '(p, _) = p+ type family Lambda_0123456789876543210 a b t where+ Lambda_0123456789876543210 a b x_0123456789876543210 = Case_0123456789876543210 x_0123456789876543210 a b x_0123456789876543210+ type Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ b0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210) arg) (Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 b0123456789876543210 a0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ b0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) arg) (Lambda_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) b0123456789876543210 = Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 a0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 a0123456789876543210 = Lambda_0123456789876543210Sym1 a0123456789876543210+ type family Case_0123456789876543210 x_0123456789876543210 d t where+ Case_0123456789876543210 x_0123456789876543210 d ('Just y) = y+ Case_0123456789876543210 x_0123456789876543210 d 'Nothing = d+ type family Lambda_0123456789876543210 d t where+ Lambda_0123456789876543210 d x_0123456789876543210 = Case_0123456789876543210 x_0123456789876543210 d x_0123456789876543210+ type Lambda_0123456789876543210Sym2 d0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 d0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 d0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 d0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall d0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 d0123456789876543210) arg) (Lambda_0123456789876543210Sym2 d0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 d0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 d0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 d0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 d0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall d0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 d0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 d0123456789876543210 = Lambda_0123456789876543210Sym1 d0123456789876543210+ type family Case_0123456789876543210 x_0123456789876543210 d x t where+ Case_0123456789876543210 x_0123456789876543210 d x ('Just y) = y+ Case_0123456789876543210 x_0123456789876543210 d x 'Nothing = d+ type family Lambda_0123456789876543210 d x t where+ Lambda_0123456789876543210 d x x_0123456789876543210 = Case_0123456789876543210 x_0123456789876543210 d x x_0123456789876543210+ type Lambda_0123456789876543210Sym3 d0123456789876543210 x0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 d0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 x0123456789876543210 d0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 d0123456789876543210 x0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall d0123456789876543210+ x0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 d0123456789876543210 x0123456789876543210) arg) (Lambda_0123456789876543210Sym3 d0123456789876543210 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 d0123456789876543210 x0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 d0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 d0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 d0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 d0123456789876543210 x0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall d0123456789876543210+ x0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 d0123456789876543210) arg) (Lambda_0123456789876543210Sym2 d0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 d0123456789876543210 x0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 d0123456789876543210) x0123456789876543210 = Lambda_0123456789876543210Sym2 d0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 d0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall d0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 d0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 d0123456789876543210 = Lambda_0123456789876543210Sym1 d0123456789876543210+ type Foo3Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Foo3 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo3Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo3Sym1KindInference) ())+ data Foo3Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ Foo3Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo3Sym1 a0123456789876543210) arg) (Foo3Sym2 a0123456789876543210 arg) =>+ Foo3Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo3Sym1 a0123456789876543210) a0123456789876543210 = Foo3 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo3Sym0 where+ suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())+ data Foo3Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)+ where+ Foo3Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>+ Foo3Sym0 a0123456789876543210+ type instance Apply Foo3Sym0 a0123456789876543210 = Foo3Sym1 a0123456789876543210+ type Foo2Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: Maybe a0123456789876543210) =+ Foo2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo2Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo2Sym1KindInference) ())+ data Foo2Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) (Maybe a0123456789876543210) a0123456789876543210+ where+ Foo2Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo2Sym1 a0123456789876543210) arg) (Foo2Sym2 a0123456789876543210 arg) =>+ Foo2Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo2Sym1 a0123456789876543210) a0123456789876543210 = Foo2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo2Sym0 where+ suppressUnusedWarnings = snd (((,) Foo2Sym0KindInference) ())+ data Foo2Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) a0123456789876543210)+ where+ Foo2Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo2Sym0 arg) (Foo2Sym1 arg) =>+ Foo2Sym0 a0123456789876543210+ type instance Apply Foo2Sym0 a0123456789876543210 = Foo2Sym1 a0123456789876543210+ type Foo1Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: Maybe a0123456789876543210) =+ Foo1 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo1Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo1Sym1KindInference) ())+ data Foo1Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) (Maybe a0123456789876543210) a0123456789876543210+ where+ Foo1Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo1Sym1 a0123456789876543210) arg) (Foo1Sym2 a0123456789876543210 arg) =>+ Foo1Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo1Sym1 a0123456789876543210) a0123456789876543210 = Foo1 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo1Sym0 where+ suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())+ data Foo1Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) (Maybe a0123456789876543210) a0123456789876543210)+ where+ Foo1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>+ Foo1Sym0 a0123456789876543210+ type instance Apply Foo1Sym0 a0123456789876543210 = Foo1Sym1 a0123456789876543210+ type family Foo3 (a :: a) (a :: b) :: a where+ Foo3 a b = Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) b) (Apply (Apply Tuple2Sym0 a) b)+ type family Foo2 (a :: a) (a :: Maybe a) :: a where+ Foo2 d _ = Apply (Apply Lambda_0123456789876543210Sym0 d) (Apply JustSym0 d)+ type family Foo1 (a :: a) (a :: Maybe a) :: a where+ Foo1 d x = Apply (Apply (Apply Lambda_0123456789876543210Sym0 d) x) x+ sFoo3 ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Foo3Sym0 t) t :: a)+ sFoo2 ::+ forall a (t :: a) (t :: Maybe a).+ Sing t -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)+ sFoo1 ::+ forall a (t :: a) (t :: Maybe a).+ Sing t -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)+ sFoo3 (sA :: Sing a) (sB :: Sing b)+ = (applySing+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 a) b))+ (\ sX_0123456789876543210+ -> case sX_0123456789876543210 of {+ (_ :: Sing x_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 x_0123456789876543210 a b x_0123456789876543210)))+ (case sX_0123456789876543210 of {+ STuple2 (sP :: Sing p) _ -> sP }) })))+ ((applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sA)) sB)+ sFoo2 (sD :: Sing d) _+ = (applySing+ ((singFun1 @(Apply Lambda_0123456789876543210Sym0 d))+ (\ sX_0123456789876543210+ -> case sX_0123456789876543210 of {+ (_ :: Sing x_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 x_0123456789876543210 d x_0123456789876543210)))+ (case sX_0123456789876543210 of+ SJust (sY :: Sing y) -> sY+ SNothing -> sD) })))+ ((applySing ((singFun1 @JustSym0) SJust)) sD)+ sFoo1 (sD :: Sing d) (sX :: Sing x)+ = (applySing+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 d) x))+ (\ sX_0123456789876543210+ -> case sX_0123456789876543210 of {+ (_ :: Sing x_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 x_0123456789876543210 d x x_0123456789876543210)))+ (case sX_0123456789876543210 of+ SJust (sY :: Sing y) -> sY+ SNothing -> sD) })))+ sX+ instance SingI (Foo3Sym0 :: (~>) a ((~>) b a)) where+ sing = (singFun2 @Foo3Sym0) sFoo3+ instance SingI d => SingI (Foo3Sym1 (d :: a) :: (~>) b a) where+ sing = (singFun1 @(Foo3Sym1 (d :: a))) (sFoo3 (sing @d))+ instance SingI (Foo2Sym0 :: (~>) a ((~>) (Maybe a) a)) where+ sing = (singFun2 @Foo2Sym0) sFoo2+ instance SingI d =>+ SingI (Foo2Sym1 (d :: a) :: (~>) (Maybe a) a) where+ sing = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 (sing @d))+ instance SingI (Foo1Sym0 :: (~>) a ((~>) (Maybe a) a)) where+ sing = (singFun2 @Foo1Sym0) sFoo1+ instance SingI d =>+ SingI (Foo1Sym1 (d :: a) :: (~>) (Maybe a) a) where+ sing = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 (sing @d))
− tests/compile-and-dump/Singletons/Lambdas.ghc86.template
@@ -1,830 +0,0 @@-Singletons/Lambdas.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo0 :: a -> b -> a- foo0 = (\ x y -> x)- foo1 :: a -> b -> a- foo1 x = (\ _ -> x)- foo2 :: a -> b -> a- foo2 x y = (\ _ -> x) y- foo3 :: a -> a- foo3 x = (\ y -> y) x- foo4 :: a -> b -> c -> a- foo4 x y z = (\ _ _ -> x) y z- foo5 :: a -> b -> b- foo5 x y = (\ x -> x) y- foo6 :: a -> b -> a- foo6 a b = (\ x -> \ _ -> x) a b- foo7 :: a -> b -> b- foo7 x y = (\ (_, b) -> b) (x, y)- foo8 :: Foo a b -> a- foo8 x = (\ (Foo a _) -> a) x- - data Foo a b = Foo a b |]- ======>- foo0 :: a -> b -> a- foo0 = \ x y -> x- foo1 :: a -> b -> a- foo1 x = \ _ -> x- foo2 :: a -> b -> a- foo2 x y = (\ _ -> x) y- foo3 :: a -> a- foo3 x = (\ y -> y) x- foo4 :: a -> b -> c -> a- foo4 x y z = ((\ _ _ -> x) y) z- foo5 :: a -> b -> b- foo5 x y = (\ x -> x) y- foo6 :: a -> b -> a- foo6 a b = ((\ x -> \ _ -> x) a) b- foo7 :: a -> b -> b- foo7 x y = (\ (_, b) -> b) (x, y)- data Foo a b = Foo a b- foo8 :: Foo a b -> a- foo8 x = (\ (Foo a _) -> a) x- type FooSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =- Foo t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (FooSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) FooSym1KindInference) ())- data FooSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 (Foo a0123456789876543210 b0123456789876543210)- where- FooSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (FooSym1 t0123456789876543210) arg) (FooSym2 t0123456789876543210 arg) =>- FooSym1 t0123456789876543210 t0123456789876543210- type instance Apply (FooSym1 t0123456789876543210) t0123456789876543210 = Foo t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 (Foo a0123456789876543210 b0123456789876543210))- where- FooSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 t0123456789876543210- type instance Apply FooSym0 t0123456789876543210 = FooSym1 t0123456789876543210- type family Case_0123456789876543210 x arg_0123456789876543210 t where- Case_0123456789876543210 x arg_0123456789876543210 (Foo a _) = a- type family Lambda_0123456789876543210 x t where- Lambda_0123456789876543210 x arg_0123456789876543210 = Case_0123456789876543210 x arg_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym2 x0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Case_0123456789876543210 x y arg_0123456789876543210 t where- Case_0123456789876543210 x y arg_0123456789876543210 '(_, b) = b- type family Lambda_0123456789876543210 x y t where- Lambda_0123456789876543210 x y arg_0123456789876543210 = Case_0123456789876543210 x y arg_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210- y0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- y0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Case_0123456789876543210 a b x arg_0123456789876543210 t where- Case_0123456789876543210 a b x arg_0123456789876543210 _ = x- type family Lambda_0123456789876543210 a b x t where- Lambda_0123456789876543210 a b x arg_0123456789876543210 = Case_0123456789876543210 a b x arg_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym4 a0123456789876543210 b0123456789876543210 x0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 a0123456789876543210 b0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 x0123456789876543210 b0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 x0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall a0123456789876543210- b0123456789876543210- x0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 x0123456789876543210) arg) (Lambda_0123456789876543210Sym4 a0123456789876543210 b0123456789876543210 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 x0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 x0123456789876543210 b0123456789876543210 a0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 b0123456789876543210 a0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 x0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall a0123456789876543210- b0123456789876543210- x0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210) arg) (Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 x0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) x0123456789876543210 = Lambda_0123456789876543210Sym3 b0123456789876543210 a0123456789876543210 x0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall a0123456789876543210- b0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) arg) (Lambda_0123456789876543210Sym2 a0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) b0123456789876543210 = Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 a0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 a0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 a0123456789876543210 = Lambda_0123456789876543210Sym1 a0123456789876543210- type family Lambda_0123456789876543210 a b t where- Lambda_0123456789876543210 a b x = Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) b) x- type Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall a0123456789876543210- b0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210) arg) (Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 b0123456789876543210 a0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall a0123456789876543210- b0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) arg) (Lambda_0123456789876543210Sym2 a0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) b0123456789876543210 = Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 a0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 a0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 a0123456789876543210 = Lambda_0123456789876543210Sym1 a0123456789876543210- type family Lambda_0123456789876543210 x y t where- Lambda_0123456789876543210 x y x = x- type Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210- y0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- y0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Case_0123456789876543210 x y z arg_0123456789876543210 arg_0123456789876543210 t where- Case_0123456789876543210 x y z arg_0123456789876543210 arg_0123456789876543210 '(_,- _) = x- type family Lambda_0123456789876543210 x y z t t where- Lambda_0123456789876543210 x y z arg_0123456789876543210 arg_0123456789876543210 = Case_0123456789876543210 x y z arg_0123456789876543210 arg_0123456789876543210 (Apply (Apply Tuple2Sym0 arg_0123456789876543210) arg_0123456789876543210)- type Lambda_0123456789876543210Sym5 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 t0123456789876543210 z0123456789876543210 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall x0123456789876543210- y0123456789876543210- z0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym5 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 t0123456789876543210 z0123456789876543210 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 z0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 z0123456789876543210 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall x0123456789876543210- y0123456789876543210- z0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 z0123456789876543210) arg) (Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 z0123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 z0123456789876543210 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym4 z0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 z0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210- y0123456789876543210- z0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 z0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) z0123456789876543210 = Lambda_0123456789876543210Sym3 y0123456789876543210 x0123456789876543210 z0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- y0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Lambda_0123456789876543210 x t where- Lambda_0123456789876543210 x y = y- type Lambda_0123456789876543210Sym2 x0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Case_0123456789876543210 x y arg_0123456789876543210 t where- Case_0123456789876543210 x y arg_0123456789876543210 _ = x- type family Lambda_0123456789876543210 x y t where- Lambda_0123456789876543210 x y arg_0123456789876543210 = Case_0123456789876543210 x y arg_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210- y0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- y0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Case_0123456789876543210 x arg_0123456789876543210 a_0123456789876543210 t where- Case_0123456789876543210 x arg_0123456789876543210 a_0123456789876543210 _ = x- type family Lambda_0123456789876543210 x a_0123456789876543210 t where- Lambda_0123456789876543210 x a_0123456789876543210 arg_0123456789876543210 = Case_0123456789876543210 x arg_0123456789876543210 a_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym3 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Lambda_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where- Lambda_0123456789876543210 a_0123456789876543210 a_0123456789876543210 x y = x- type Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall a_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210- type Foo8Sym1 (a0123456789876543210 :: Foo a0123456789876543210 b0123456789876543210) =- Foo8 a0123456789876543210- instance SuppressUnusedWarnings Foo8Sym0 where- suppressUnusedWarnings = snd (((,) Foo8Sym0KindInference) ())- data Foo8Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) (Foo a0123456789876543210 b0123456789876543210) a0123456789876543210- where- Foo8Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo8Sym0 arg) (Foo8Sym1 arg) =>- Foo8Sym0 a0123456789876543210- type instance Apply Foo8Sym0 a0123456789876543210 = Foo8 a0123456789876543210- type Foo7Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Foo7 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo7Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo7Sym1KindInference) ())- data Foo7Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 b0123456789876543210- where- Foo7Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo7Sym1 a0123456789876543210) arg) (Foo7Sym2 a0123456789876543210 arg) =>- Foo7Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo7Sym1 a0123456789876543210) a0123456789876543210 = Foo7 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo7Sym0 where- suppressUnusedWarnings = snd (((,) Foo7Sym0KindInference) ())- data Foo7Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)- where- Foo7Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo7Sym0 arg) (Foo7Sym1 arg) =>- Foo7Sym0 a0123456789876543210- type instance Apply Foo7Sym0 a0123456789876543210 = Foo7Sym1 a0123456789876543210- type Foo6Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Foo6 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo6Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo6Sym1KindInference) ())- data Foo6Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 a0123456789876543210- where- Foo6Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo6Sym1 a0123456789876543210) arg) (Foo6Sym2 a0123456789876543210 arg) =>- Foo6Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo6Sym1 a0123456789876543210) a0123456789876543210 = Foo6 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo6Sym0 where- suppressUnusedWarnings = snd (((,) Foo6Sym0KindInference) ())- data Foo6Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)- where- Foo6Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo6Sym0 arg) (Foo6Sym1 arg) =>- Foo6Sym0 a0123456789876543210- type instance Apply Foo6Sym0 a0123456789876543210 = Foo6Sym1 a0123456789876543210- type Foo5Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Foo5 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo5Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo5Sym1KindInference) ())- data Foo5Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 b0123456789876543210- where- Foo5Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo5Sym1 a0123456789876543210) arg) (Foo5Sym2 a0123456789876543210 arg) =>- Foo5Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo5Sym1 a0123456789876543210) a0123456789876543210 = Foo5 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo5Sym0 where- suppressUnusedWarnings = snd (((,) Foo5Sym0KindInference) ())- data Foo5Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)- where- Foo5Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo5Sym0 arg) (Foo5Sym1 arg) =>- Foo5Sym0 a0123456789876543210- type instance Apply Foo5Sym0 a0123456789876543210 = Foo5Sym1 a0123456789876543210- type Foo4Sym3 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) (a0123456789876543210 :: c0123456789876543210) =- Foo4 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo4Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo4Sym2KindInference) ())- data Foo4Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210.- (~>) c0123456789876543210 a0123456789876543210- where- Foo4Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo4Sym2 a0123456789876543210 a0123456789876543210) arg) (Foo4Sym3 a0123456789876543210 a0123456789876543210 arg) =>- Foo4Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (Foo4Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = Foo4 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo4Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo4Sym1KindInference) ())- data Foo4Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210- c0123456789876543210.- (~>) b0123456789876543210 ((~>) c0123456789876543210 a0123456789876543210)- where- Foo4Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo4Sym1 a0123456789876543210) arg) (Foo4Sym2 a0123456789876543210 arg) =>- Foo4Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo4Sym1 a0123456789876543210) a0123456789876543210 = Foo4Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo4Sym0 where- suppressUnusedWarnings = snd (((,) Foo4Sym0KindInference) ())- data Foo4Sym0 :: forall a0123456789876543210- b0123456789876543210- c0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 a0123456789876543210))- where- Foo4Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo4Sym0 arg) (Foo4Sym1 arg) =>- Foo4Sym0 a0123456789876543210- type instance Apply Foo4Sym0 a0123456789876543210 = Foo4Sym1 a0123456789876543210- type Foo3Sym1 (a0123456789876543210 :: a0123456789876543210) =- Foo3 a0123456789876543210- instance SuppressUnusedWarnings Foo3Sym0 where- suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())- data Foo3Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- Foo3Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>- Foo3Sym0 a0123456789876543210- type instance Apply Foo3Sym0 a0123456789876543210 = Foo3 a0123456789876543210- type Foo2Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Foo2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo2Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo2Sym1KindInference) ())- data Foo2Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 a0123456789876543210- where- Foo2Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo2Sym1 a0123456789876543210) arg) (Foo2Sym2 a0123456789876543210 arg) =>- Foo2Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo2Sym1 a0123456789876543210) a0123456789876543210 = Foo2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo2Sym0 where- suppressUnusedWarnings = snd (((,) Foo2Sym0KindInference) ())- data Foo2Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)- where- Foo2Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo2Sym0 arg) (Foo2Sym1 arg) =>- Foo2Sym0 a0123456789876543210- type instance Apply Foo2Sym0 a0123456789876543210 = Foo2Sym1 a0123456789876543210- type Foo1Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Foo1 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo1Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo1Sym1KindInference) ())- data Foo1Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 a0123456789876543210- where- Foo1Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo1Sym1 a0123456789876543210) arg) (Foo1Sym2 a0123456789876543210 arg) =>- Foo1Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo1Sym1 a0123456789876543210) a0123456789876543210 = Foo1 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo1Sym0 where- suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())- data Foo1Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)- where- Foo1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>- Foo1Sym0 a0123456789876543210- type instance Apply Foo1Sym0 a0123456789876543210 = Foo1Sym1 a0123456789876543210- type Foo0Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Foo0 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo0Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo0Sym1KindInference) ())- data Foo0Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 a0123456789876543210- where- Foo0Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo0Sym1 a0123456789876543210) arg) (Foo0Sym2 a0123456789876543210 arg) =>- Foo0Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo0Sym1 a0123456789876543210) a0123456789876543210 = Foo0 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo0Sym0 where- suppressUnusedWarnings = snd (((,) Foo0Sym0KindInference) ())- data Foo0Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)- where- Foo0Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo0Sym0 arg) (Foo0Sym1 arg) =>- Foo0Sym0 a0123456789876543210- type instance Apply Foo0Sym0 a0123456789876543210 = Foo0Sym1 a0123456789876543210- type family Foo8 (a :: Foo a b) :: a where- Foo8 x = Apply (Apply Lambda_0123456789876543210Sym0 x) x- type family Foo7 (a :: a) (a :: b) :: b where- Foo7 x y = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) (Apply (Apply Tuple2Sym0 x) y)- type family Foo6 (a :: a) (a :: b) :: a where- Foo6 a b = Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) b) a) b- type family Foo5 (a :: a) (a :: b) :: b where- Foo5 x y = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) y- type family Foo4 (a :: a) (a :: b) (a :: c) :: a where- Foo4 x y z = Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) z) y) z- type family Foo3 (a :: a) :: a where- Foo3 x = Apply (Apply Lambda_0123456789876543210Sym0 x) x- type family Foo2 (a :: a) (a :: b) :: a where- Foo2 x y = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) y- type family Foo1 (a :: a) (a :: b) :: a where- Foo1 x a_0123456789876543210 = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) a_0123456789876543210) a_0123456789876543210- type family Foo0 (a :: a) (a :: b) :: a where- Foo0 a_0123456789876543210 a_0123456789876543210 = Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210- sFoo8 ::- forall a b (t :: Foo a b). Sing t -> Sing (Apply Foo8Sym0 t :: a)- sFoo7 ::- forall a b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply Foo7Sym0 t) t :: b)- sFoo6 ::- forall a b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply Foo6Sym0 t) t :: a)- sFoo5 ::- forall a b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply Foo5Sym0 t) t :: b)- sFoo4 ::- forall a b c (t :: a) (t :: b) (t :: c).- Sing t- -> Sing t- -> Sing t -> Sing (Apply (Apply (Apply Foo4Sym0 t) t) t :: a)- sFoo3 :: forall a (t :: a). Sing t -> Sing (Apply Foo3Sym0 t :: a)- sFoo2 ::- forall a b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)- sFoo1 ::- forall a b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)- sFoo0 ::- forall a b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply Foo0Sym0 t) t :: a)- sFoo8 (sX :: Sing x)- = (applySing- ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of {- SFoo (sA :: Sing a) _ -> sA }) ::- Sing (Case_0123456789876543210 x arg_0123456789876543210 arg_0123456789876543210) })))- sX- sFoo7 (sX :: Sing x) (sY :: Sing y)- = (applySing- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of {- STuple2 _ (sB :: Sing b) -> sB }) ::- Sing (Case_0123456789876543210 x y arg_0123456789876543210 arg_0123456789876543210) })))- ((applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX)) sY)- sFoo6 (sA :: Sing a) (sB :: Sing b)- = (applySing- ((applySing- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 a) b))- (\ sX- -> case sX of {- (_ :: Sing x)- -> (singFun1- @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) b) x))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of { _ -> sX }) ::- Sing (Case_0123456789876543210 a b x arg_0123456789876543210 arg_0123456789876543210) }) })))- sA))- sB- sFoo5 (sX :: Sing x) (sY :: Sing y)- = (applySing- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))- (\ sX -> case sX of { (_ :: Sing x) -> sX })))- sY- sFoo4 (sX :: Sing x) (sY :: Sing y) (sZ :: Sing z)- = (applySing- ((applySing- ((singFun2- @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) z))- (\ sArg_0123456789876543210 sArg_0123456789876543210- -> case- ((,) sArg_0123456789876543210) sArg_0123456789876543210- of {- (,) (_ :: Sing arg_0123456789876543210)- (_ :: Sing arg_0123456789876543210)- -> (case- (applySing- ((applySing ((singFun2 @Tuple2Sym0) STuple2))- sArg_0123456789876543210))- sArg_0123456789876543210- of {- STuple2 _ _ -> sX }) ::- Sing (Case_0123456789876543210 x y z arg_0123456789876543210 arg_0123456789876543210 (Apply (Apply Tuple2Sym0 arg_0123456789876543210) arg_0123456789876543210)) })))- sY))- sZ- sFoo3 (sX :: Sing x)- = (applySing- ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))- (\ sY -> case sY of { (_ :: Sing y) -> sY })))- sX- sFoo2 (sX :: Sing x) (sY :: Sing y)- = (applySing- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of { _ -> sX }) ::- Sing (Case_0123456789876543210 x y arg_0123456789876543210 arg_0123456789876543210) })))- sY- sFoo1- (sX :: Sing x)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((singFun1- @(Apply (Apply Lambda_0123456789876543210Sym0 x) a_0123456789876543210))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of { _ -> sX }) ::- Sing (Case_0123456789876543210 x arg_0123456789876543210 a_0123456789876543210 arg_0123456789876543210) })))- sA_0123456789876543210- sFoo0- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((singFun2- @(Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210))- (\ sX sY- -> case ((,) sX) sY of { (,) (_ :: Sing x) (_ :: Sing y) -> sX })))- sA_0123456789876543210))- sA_0123456789876543210- instance SingI (Foo8Sym0 :: (~>) (Foo a b) a) where- sing = (singFun1 @Foo8Sym0) sFoo8- instance SingI (Foo7Sym0 :: (~>) a ((~>) b b)) where- sing = (singFun2 @Foo7Sym0) sFoo7- instance SingI d => SingI (Foo7Sym1 (d :: a) :: (~>) b b) where- sing = (singFun1 @(Foo7Sym1 (d :: a))) (sFoo7 (sing @d))- instance SingI (Foo6Sym0 :: (~>) a ((~>) b a)) where- sing = (singFun2 @Foo6Sym0) sFoo6- instance SingI d => SingI (Foo6Sym1 (d :: a) :: (~>) b a) where- sing = (singFun1 @(Foo6Sym1 (d :: a))) (sFoo6 (sing @d))- instance SingI (Foo5Sym0 :: (~>) a ((~>) b b)) where- sing = (singFun2 @Foo5Sym0) sFoo5- instance SingI d => SingI (Foo5Sym1 (d :: a) :: (~>) b b) where- sing = (singFun1 @(Foo5Sym1 (d :: a))) (sFoo5 (sing @d))- instance SingI (Foo4Sym0 :: (~>) a ((~>) b ((~>) c a))) where- sing = (singFun3 @Foo4Sym0) sFoo4- instance SingI d =>- SingI (Foo4Sym1 (d :: a) :: (~>) b ((~>) c a)) where- sing = (singFun2 @(Foo4Sym1 (d :: a))) (sFoo4 (sing @d))- instance (SingI d, SingI d) =>- SingI (Foo4Sym2 (d :: a) (d :: b) :: (~>) c a) where- sing- = (singFun1 @(Foo4Sym2 (d :: a) (d :: b)))- ((sFoo4 (sing @d)) (sing @d))- instance SingI (Foo3Sym0 :: (~>) a a) where- sing = (singFun1 @Foo3Sym0) sFoo3- instance SingI (Foo2Sym0 :: (~>) a ((~>) b a)) where- sing = (singFun2 @Foo2Sym0) sFoo2- instance SingI d => SingI (Foo2Sym1 (d :: a) :: (~>) b a) where- sing = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 (sing @d))- instance SingI (Foo1Sym0 :: (~>) a ((~>) b a)) where- sing = (singFun2 @Foo1Sym0) sFoo1- instance SingI d => SingI (Foo1Sym1 (d :: a) :: (~>) b a) where- sing = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 (sing @d))- instance SingI (Foo0Sym0 :: (~>) a ((~>) b a)) where- sing = (singFun2 @Foo0Sym0) sFoo0- instance SingI d => SingI (Foo0Sym1 (d :: a) :: (~>) b a) where- sing = (singFun1 @(Foo0Sym1 (d :: a))) (sFoo0 (sing @d))- data instance Sing :: Foo a b -> GHC.Types.Type- where- SFoo :: forall a b (n :: a) (n :: b).- (Sing (n :: a)) -> (Sing (n :: b)) -> Sing (Foo n n)- type SFoo = (Sing :: Foo a b -> GHC.Types.Type)- instance (SingKind a, SingKind b) => SingKind (Foo a b) where- type Demote (Foo a b) = Foo (Demote a) (Demote b)- fromSing (SFoo b b) = (Foo (fromSing b)) (fromSing b)- toSing (Foo (b :: Demote a) (b :: Demote b))- = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SFoo c) c) }- instance (SingI n, SingI n) => SingI (Foo (n :: a) (n :: b)) where- sing = (SFoo sing) sing- instance SingI (FooSym0 :: (~>) a ((~>) b (Foo a b))) where- sing = (singFun2 @FooSym0) SFoo- instance SingI (TyCon2 Foo :: (~>) a ((~>) b (Foo a b))) where- sing = (singFun2 @(TyCon2 Foo)) SFoo- instance SingI d =>- SingI (FooSym1 (d :: a) :: (~>) b (Foo a b)) where- sing = (singFun1 @(FooSym1 (d :: a))) (SFoo (sing @d))- instance SingI d =>- SingI (TyCon1 (Foo (d :: a)) :: (~>) b (Foo a b)) where- sing = (singFun1 @(TyCon1 (Foo (d :: a)))) (SFoo (sing @d))
+ tests/compile-and-dump/Singletons/Lambdas.ghc88.template view
@@ -0,0 +1,832 @@+Singletons/Lambdas.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo0 :: a -> b -> a+ foo0 = (\ x y -> x)+ foo1 :: a -> b -> a+ foo1 x = (\ _ -> x)+ foo2 :: a -> b -> a+ foo2 x y = (\ _ -> x) y+ foo3 :: a -> a+ foo3 x = (\ y -> y) x+ foo4 :: a -> b -> c -> a+ foo4 x y z = (\ _ _ -> x) y z+ foo5 :: a -> b -> b+ foo5 x y = (\ x -> x) y+ foo6 :: a -> b -> a+ foo6 a b = (\ x -> \ _ -> x) a b+ foo7 :: a -> b -> b+ foo7 x y = (\ (_, b) -> b) (x, y)+ foo8 :: Foo a b -> a+ foo8 x = (\ (Foo a _) -> a) x+ + data Foo a b = Foo a b |]+ ======>+ foo0 :: a -> b -> a+ foo0 = \ x y -> x+ foo1 :: a -> b -> a+ foo1 x = \ _ -> x+ foo2 :: a -> b -> a+ foo2 x y = (\ _ -> x) y+ foo3 :: a -> a+ foo3 x = (\ y -> y) x+ foo4 :: a -> b -> c -> a+ foo4 x y z = ((\ _ _ -> x) y) z+ foo5 :: a -> b -> b+ foo5 x y = (\ x -> x) y+ foo6 :: a -> b -> a+ foo6 a b = ((\ x -> \ _ -> x) a) b+ foo7 :: a -> b -> b+ foo7 x y = (\ (_, b) -> b) (x, y)+ data Foo a b = Foo a b+ foo8 :: Foo a b -> a+ foo8 x = (\ (Foo a _) -> a) x+ type FooSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =+ Foo t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (FooSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FooSym1KindInference) ())+ data FooSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 (Foo a0123456789876543210 b0123456789876543210)+ where+ FooSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (FooSym1 t0123456789876543210) arg) (FooSym2 t0123456789876543210 arg) =>+ FooSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (FooSym1 t0123456789876543210) t0123456789876543210 = Foo t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 (Foo a0123456789876543210 b0123456789876543210))+ where+ FooSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 t0123456789876543210+ type instance Apply FooSym0 t0123456789876543210 = FooSym1 t0123456789876543210+ type family Case_0123456789876543210 arg_0123456789876543210 x t where+ Case_0123456789876543210 arg_0123456789876543210 x (Foo a _) = a+ type family Lambda_0123456789876543210 x t where+ Lambda_0123456789876543210 x arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 x arg_0123456789876543210+ type Lambda_0123456789876543210Sym2 x0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Case_0123456789876543210 arg_0123456789876543210 x y t where+ Case_0123456789876543210 arg_0123456789876543210 x y '(_, b) = b+ type family Lambda_0123456789876543210 x y t where+ Lambda_0123456789876543210 x y arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 x y arg_0123456789876543210+ type Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210+ y0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ y0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Case_0123456789876543210 arg_0123456789876543210 x a b t where+ Case_0123456789876543210 arg_0123456789876543210 x a b _ = x+ type family Lambda_0123456789876543210 x a b t where+ Lambda_0123456789876543210 x a b arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 x a b arg_0123456789876543210+ type Lambda_0123456789876543210Sym4 x0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 b0123456789876543210 a0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 x0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall x0123456789876543210+ a0123456789876543210+ b0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 x0123456789876543210 a0123456789876543210 b0123456789876543210) arg) (Lambda_0123456789876543210Sym4 x0123456789876543210 a0123456789876543210 b0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 x0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 b0123456789876543210 a0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 b0123456789876543210 a0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 x0123456789876543210 a0123456789876543210 b0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210+ a0123456789876543210+ b0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 a0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 a0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 x0123456789876543210 a0123456789876543210 b0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a0123456789876543210 x0123456789876543210) b0123456789876543210 = Lambda_0123456789876543210Sym3 a0123456789876543210 x0123456789876543210 b0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 a0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 a0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) a0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Lambda_0123456789876543210 a b t where+ Lambda_0123456789876543210 a b x = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) a) b+ type Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ b0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210) arg) (Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 b0123456789876543210 a0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ b0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) arg) (Lambda_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) b0123456789876543210 = Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 a0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 a0123456789876543210 = Lambda_0123456789876543210Sym1 a0123456789876543210+ type family Lambda_0123456789876543210 x y t where+ Lambda_0123456789876543210 x y x = x+ type Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210+ y0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ y0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Case_0123456789876543210 arg_0123456789876543210 arg_0123456789876543210 x y z t where+ Case_0123456789876543210 arg_0123456789876543210 arg_0123456789876543210 x y z '(_,+ _) = x+ type family Lambda_0123456789876543210 x y z t t where+ Lambda_0123456789876543210 x y z arg_0123456789876543210 arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 arg_0123456789876543210 x y z (Apply (Apply Tuple2Sym0 arg_0123456789876543210) arg_0123456789876543210)+ type Lambda_0123456789876543210Sym5 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 t0123456789876543210 z0123456789876543210 y0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall x0123456789876543210+ y0123456789876543210+ z0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym5 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 t0123456789876543210 z0123456789876543210 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 z0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 z0123456789876543210 y0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall x0123456789876543210+ y0123456789876543210+ z0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 z0123456789876543210) arg) (Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 z0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 z0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 z0123456789876543210 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym4 z0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 z0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210+ y0123456789876543210+ z0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 z0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) z0123456789876543210 = Lambda_0123456789876543210Sym3 y0123456789876543210 x0123456789876543210 z0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ y0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Lambda_0123456789876543210 x t where+ Lambda_0123456789876543210 x y = y+ type Lambda_0123456789876543210Sym2 x0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Case_0123456789876543210 arg_0123456789876543210 x y t where+ Case_0123456789876543210 arg_0123456789876543210 x y _ = x+ type family Lambda_0123456789876543210 x y t where+ Lambda_0123456789876543210 x y arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 x y arg_0123456789876543210+ type Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210+ y0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ y0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Case_0123456789876543210 arg_0123456789876543210 x a_0123456789876543210 t where+ Case_0123456789876543210 arg_0123456789876543210 x a_0123456789876543210 _ = x+ type family Lambda_0123456789876543210 x a_0123456789876543210 t where+ Lambda_0123456789876543210 x a_0123456789876543210 arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 x a_0123456789876543210 arg_0123456789876543210+ type Lambda_0123456789876543210Sym3 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Lambda_0123456789876543210 a_0123456789876543210 a_0123456789876543210 t t where+ Lambda_0123456789876543210 a_0123456789876543210 a_0123456789876543210 x y = x+ type Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210) arg) (Lambda_0123456789876543210Sym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall a_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210+ type Foo8Sym1 (a0123456789876543210 :: Foo a0123456789876543210 b0123456789876543210) =+ Foo8 a0123456789876543210+ instance SuppressUnusedWarnings Foo8Sym0 where+ suppressUnusedWarnings = snd (((,) Foo8Sym0KindInference) ())+ data Foo8Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) (Foo a0123456789876543210 b0123456789876543210) a0123456789876543210+ where+ Foo8Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo8Sym0 arg) (Foo8Sym1 arg) =>+ Foo8Sym0 a0123456789876543210+ type instance Apply Foo8Sym0 a0123456789876543210 = Foo8 a0123456789876543210+ type Foo7Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Foo7 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo7Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo7Sym1KindInference) ())+ data Foo7Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 b0123456789876543210+ where+ Foo7Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo7Sym1 a0123456789876543210) arg) (Foo7Sym2 a0123456789876543210 arg) =>+ Foo7Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo7Sym1 a0123456789876543210) a0123456789876543210 = Foo7 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo7Sym0 where+ suppressUnusedWarnings = snd (((,) Foo7Sym0KindInference) ())+ data Foo7Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)+ where+ Foo7Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo7Sym0 arg) (Foo7Sym1 arg) =>+ Foo7Sym0 a0123456789876543210+ type instance Apply Foo7Sym0 a0123456789876543210 = Foo7Sym1 a0123456789876543210+ type Foo6Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Foo6 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo6Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo6Sym1KindInference) ())+ data Foo6Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ Foo6Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo6Sym1 a0123456789876543210) arg) (Foo6Sym2 a0123456789876543210 arg) =>+ Foo6Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo6Sym1 a0123456789876543210) a0123456789876543210 = Foo6 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo6Sym0 where+ suppressUnusedWarnings = snd (((,) Foo6Sym0KindInference) ())+ data Foo6Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)+ where+ Foo6Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo6Sym0 arg) (Foo6Sym1 arg) =>+ Foo6Sym0 a0123456789876543210+ type instance Apply Foo6Sym0 a0123456789876543210 = Foo6Sym1 a0123456789876543210+ type Foo5Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Foo5 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo5Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo5Sym1KindInference) ())+ data Foo5Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 b0123456789876543210+ where+ Foo5Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo5Sym1 a0123456789876543210) arg) (Foo5Sym2 a0123456789876543210 arg) =>+ Foo5Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo5Sym1 a0123456789876543210) a0123456789876543210 = Foo5 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo5Sym0 where+ suppressUnusedWarnings = snd (((,) Foo5Sym0KindInference) ())+ data Foo5Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)+ where+ Foo5Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo5Sym0 arg) (Foo5Sym1 arg) =>+ Foo5Sym0 a0123456789876543210+ type instance Apply Foo5Sym0 a0123456789876543210 = Foo5Sym1 a0123456789876543210+ type Foo4Sym3 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) (a0123456789876543210 :: c0123456789876543210) =+ Foo4 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo4Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo4Sym2KindInference) ())+ data Foo4Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210.+ (~>) c0123456789876543210 a0123456789876543210+ where+ Foo4Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo4Sym2 a0123456789876543210 a0123456789876543210) arg) (Foo4Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ Foo4Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo4Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = Foo4 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo4Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo4Sym1KindInference) ())+ data Foo4Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210+ c0123456789876543210.+ (~>) b0123456789876543210 ((~>) c0123456789876543210 a0123456789876543210)+ where+ Foo4Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo4Sym1 a0123456789876543210) arg) (Foo4Sym2 a0123456789876543210 arg) =>+ Foo4Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo4Sym1 a0123456789876543210) a0123456789876543210 = Foo4Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo4Sym0 where+ suppressUnusedWarnings = snd (((,) Foo4Sym0KindInference) ())+ data Foo4Sym0 :: forall a0123456789876543210+ b0123456789876543210+ c0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 a0123456789876543210))+ where+ Foo4Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo4Sym0 arg) (Foo4Sym1 arg) =>+ Foo4Sym0 a0123456789876543210+ type instance Apply Foo4Sym0 a0123456789876543210 = Foo4Sym1 a0123456789876543210+ type Foo3Sym1 (a0123456789876543210 :: a0123456789876543210) =+ Foo3 a0123456789876543210+ instance SuppressUnusedWarnings Foo3Sym0 where+ suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())+ data Foo3Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ Foo3Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>+ Foo3Sym0 a0123456789876543210+ type instance Apply Foo3Sym0 a0123456789876543210 = Foo3 a0123456789876543210+ type Foo2Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Foo2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo2Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo2Sym1KindInference) ())+ data Foo2Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ Foo2Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo2Sym1 a0123456789876543210) arg) (Foo2Sym2 a0123456789876543210 arg) =>+ Foo2Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo2Sym1 a0123456789876543210) a0123456789876543210 = Foo2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo2Sym0 where+ suppressUnusedWarnings = snd (((,) Foo2Sym0KindInference) ())+ data Foo2Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)+ where+ Foo2Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo2Sym0 arg) (Foo2Sym1 arg) =>+ Foo2Sym0 a0123456789876543210+ type instance Apply Foo2Sym0 a0123456789876543210 = Foo2Sym1 a0123456789876543210+ type Foo1Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Foo1 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo1Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo1Sym1KindInference) ())+ data Foo1Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ Foo1Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo1Sym1 a0123456789876543210) arg) (Foo1Sym2 a0123456789876543210 arg) =>+ Foo1Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo1Sym1 a0123456789876543210) a0123456789876543210 = Foo1 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo1Sym0 where+ suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())+ data Foo1Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)+ where+ Foo1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>+ Foo1Sym0 a0123456789876543210+ type instance Apply Foo1Sym0 a0123456789876543210 = Foo1Sym1 a0123456789876543210+ type Foo0Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Foo0 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo0Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo0Sym1KindInference) ())+ data Foo0Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ Foo0Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo0Sym1 a0123456789876543210) arg) (Foo0Sym2 a0123456789876543210 arg) =>+ Foo0Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo0Sym1 a0123456789876543210) a0123456789876543210 = Foo0 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo0Sym0 where+ suppressUnusedWarnings = snd (((,) Foo0Sym0KindInference) ())+ data Foo0Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)+ where+ Foo0Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo0Sym0 arg) (Foo0Sym1 arg) =>+ Foo0Sym0 a0123456789876543210+ type instance Apply Foo0Sym0 a0123456789876543210 = Foo0Sym1 a0123456789876543210+ type family Foo8 (a :: Foo a b) :: a where+ Foo8 x = Apply (Apply Lambda_0123456789876543210Sym0 x) x+ type family Foo7 (a :: a) (a :: b) :: b where+ Foo7 x y = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) (Apply (Apply Tuple2Sym0 x) y)+ type family Foo6 (a :: a) (a :: b) :: a where+ Foo6 a b = Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) b) a) b+ type family Foo5 (a :: a) (a :: b) :: b where+ Foo5 x y = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) y+ type family Foo4 (a :: a) (a :: b) (a :: c) :: a where+ Foo4 x y z = Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) z) y) z+ type family Foo3 (a :: a) :: a where+ Foo3 x = Apply (Apply Lambda_0123456789876543210Sym0 x) x+ type family Foo2 (a :: a) (a :: b) :: a where+ Foo2 x y = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) y+ type family Foo1 (a :: a) (a :: b) :: a where+ Foo1 x a_0123456789876543210 = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) a_0123456789876543210) a_0123456789876543210+ type family Foo0 (a :: a) (a :: b) :: a where+ Foo0 a_0123456789876543210 a_0123456789876543210 = Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210) a_0123456789876543210) a_0123456789876543210+ sFoo8 ::+ forall a b (t :: Foo a b). Sing t -> Sing (Apply Foo8Sym0 t :: a)+ sFoo7 ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Foo7Sym0 t) t :: b)+ sFoo6 ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Foo6Sym0 t) t :: a)+ sFoo5 ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Foo5Sym0 t) t :: b)+ sFoo4 ::+ forall a b c (t :: a) (t :: b) (t :: c).+ Sing t+ -> Sing t+ -> Sing t -> Sing (Apply (Apply (Apply Foo4Sym0 t) t) t :: a)+ sFoo3 :: forall a (t :: a). Sing t -> Sing (Apply Foo3Sym0 t :: a)+ sFoo2 ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Foo2Sym0 t) t :: a)+ sFoo1 ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Foo1Sym0 t) t :: a)+ sFoo0 ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Foo0Sym0 t) t :: a)+ sFoo8 (sX :: Sing x)+ = (applySing+ ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 x arg_0123456789876543210)))+ (case sArg_0123456789876543210 of {+ SFoo (sA :: Sing a) _ -> sA }) })))+ sX+ sFoo7 (sX :: Sing x) (sY :: Sing y)+ = (applySing+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 x y arg_0123456789876543210)))+ (case sArg_0123456789876543210 of {+ STuple2 _ (sB :: Sing b) -> sB }) })))+ ((applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX)) sY)+ sFoo6 (sA :: Sing a) (sB :: Sing b)+ = (applySing+ ((applySing+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 a) b))+ (\ sX+ -> case sX of {+ (_ :: Sing x)+ -> (singFun1+ @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) a) b))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 x a b arg_0123456789876543210)))+ (case sArg_0123456789876543210 of {+ _ -> sX }) }) })))+ sA))+ sB+ sFoo5 (sX :: Sing x) (sY :: Sing y)+ = (applySing+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))+ (\ sX -> case sX of { (_ :: Sing x) -> sX })))+ sY+ sFoo4 (sX :: Sing x) (sY :: Sing y) (sZ :: Sing z)+ = (applySing+ ((applySing+ ((singFun2+ @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) z))+ (\ sArg_0123456789876543210 sArg_0123456789876543210+ -> case+ ((,) sArg_0123456789876543210) sArg_0123456789876543210+ of {+ (,) (_ :: Sing arg_0123456789876543210)+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 arg_0123456789876543210 x y z (Apply (Apply Tuple2Sym0 arg_0123456789876543210) arg_0123456789876543210))))+ (case+ (applySing+ ((applySing ((singFun2 @Tuple2Sym0) STuple2))+ sArg_0123456789876543210))+ sArg_0123456789876543210+ of {+ STuple2 _ _ -> sX }) })))+ sY))+ sZ+ sFoo3 (sX :: Sing x)+ = (applySing+ ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))+ (\ sY -> case sY of { (_ :: Sing y) -> sY })))+ sX+ sFoo2 (sX :: Sing x) (sY :: Sing y)+ = (applySing+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 x y arg_0123456789876543210)))+ (case sArg_0123456789876543210 of { _ -> sX }) })))+ sY+ sFoo1+ (sX :: Sing x)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((singFun1+ @(Apply (Apply Lambda_0123456789876543210Sym0 x) a_0123456789876543210))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 x a_0123456789876543210 arg_0123456789876543210)))+ (case sArg_0123456789876543210 of { _ -> sX }) })))+ sA_0123456789876543210+ sFoo0+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((singFun2+ @(Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210))+ (\ sX sY+ -> case ((,) sX) sY of { (,) (_ :: Sing x) (_ :: Sing y) -> sX })))+ sA_0123456789876543210))+ sA_0123456789876543210+ instance SingI (Foo8Sym0 :: (~>) (Foo a b) a) where+ sing = (singFun1 @Foo8Sym0) sFoo8+ instance SingI (Foo7Sym0 :: (~>) a ((~>) b b)) where+ sing = (singFun2 @Foo7Sym0) sFoo7+ instance SingI d => SingI (Foo7Sym1 (d :: a) :: (~>) b b) where+ sing = (singFun1 @(Foo7Sym1 (d :: a))) (sFoo7 (sing @d))+ instance SingI (Foo6Sym0 :: (~>) a ((~>) b a)) where+ sing = (singFun2 @Foo6Sym0) sFoo6+ instance SingI d => SingI (Foo6Sym1 (d :: a) :: (~>) b a) where+ sing = (singFun1 @(Foo6Sym1 (d :: a))) (sFoo6 (sing @d))+ instance SingI (Foo5Sym0 :: (~>) a ((~>) b b)) where+ sing = (singFun2 @Foo5Sym0) sFoo5+ instance SingI d => SingI (Foo5Sym1 (d :: a) :: (~>) b b) where+ sing = (singFun1 @(Foo5Sym1 (d :: a))) (sFoo5 (sing @d))+ instance SingI (Foo4Sym0 :: (~>) a ((~>) b ((~>) c a))) where+ sing = (singFun3 @Foo4Sym0) sFoo4+ instance SingI d =>+ SingI (Foo4Sym1 (d :: a) :: (~>) b ((~>) c a)) where+ sing = (singFun2 @(Foo4Sym1 (d :: a))) (sFoo4 (sing @d))+ instance (SingI d, SingI d) =>+ SingI (Foo4Sym2 (d :: a) (d :: b) :: (~>) c a) where+ sing+ = (singFun1 @(Foo4Sym2 (d :: a) (d :: b)))+ ((sFoo4 (sing @d)) (sing @d))+ instance SingI (Foo3Sym0 :: (~>) a a) where+ sing = (singFun1 @Foo3Sym0) sFoo3+ instance SingI (Foo2Sym0 :: (~>) a ((~>) b a)) where+ sing = (singFun2 @Foo2Sym0) sFoo2+ instance SingI d => SingI (Foo2Sym1 (d :: a) :: (~>) b a) where+ sing = (singFun1 @(Foo2Sym1 (d :: a))) (sFoo2 (sing @d))+ instance SingI (Foo1Sym0 :: (~>) a ((~>) b a)) where+ sing = (singFun2 @Foo1Sym0) sFoo1+ instance SingI d => SingI (Foo1Sym1 (d :: a) :: (~>) b a) where+ sing = (singFun1 @(Foo1Sym1 (d :: a))) (sFoo1 (sing @d))+ instance SingI (Foo0Sym0 :: (~>) a ((~>) b a)) where+ sing = (singFun2 @Foo0Sym0) sFoo0+ instance SingI d => SingI (Foo0Sym1 (d :: a) :: (~>) b a) where+ sing = (singFun1 @(Foo0Sym1 (d :: a))) (sFoo0 (sing @d))+ data SFoo :: forall a b. Foo a b -> GHC.Types.Type+ where+ SFoo :: forall a b (n :: a) (n :: b).+ (Sing (n :: a)) -> (Sing (n :: b)) -> SFoo (Foo n n)+ type instance Sing @(Foo a b) = SFoo+ instance (SingKind a, SingKind b) => SingKind (Foo a b) where+ type Demote (Foo a b) = Foo (Demote a) (Demote b)+ fromSing (SFoo b b) = (Foo (fromSing b)) (fromSing b)+ toSing (Foo (b :: Demote a) (b :: Demote b))+ = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SFoo c) c) }+ instance (SingI n, SingI n) => SingI (Foo (n :: a) (n :: b)) where+ sing = (SFoo sing) sing+ instance SingI (FooSym0 :: (~>) a ((~>) b (Foo a b))) where+ sing = (singFun2 @FooSym0) SFoo+ instance SingI d =>+ SingI (FooSym1 (d :: a) :: (~>) b (Foo a b)) where+ sing = (singFun1 @(FooSym1 (d :: a))) (SFoo (sing @d))
− tests/compile-and-dump/Singletons/LambdasComprehensive.ghc86.template
@@ -1,71 +0,0 @@-Singletons/LambdasComprehensive.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo :: [Nat]- foo- = map (\ x -> either_ pred Succ x) [Left Zero, Right (Succ Zero)]- bar :: [Nat]- bar = map (either_ pred Succ) [Left Zero, Right (Succ Zero)] |]- ======>- foo :: [Nat]- foo- = (map (\ x -> ((either_ pred) Succ) x))- [Left Zero, Right (Succ Zero)]- bar :: [Nat]- bar = (map ((either_ pred) Succ)) [Left Zero, Right (Succ Zero)]- type family Lambda_0123456789876543210 t where- Lambda_0123456789876543210 x = Apply (Apply (Apply Either_Sym0 PredSym0) SuccSym0) x- type Lambda_0123456789876543210Sym1 t0123456789876543210 =- Lambda_0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 t0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 t0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210- type BarSym0 = Bar- type FooSym0 = Foo- type family Bar :: [Nat] where- Bar = Apply (Apply MapSym0 (Apply (Apply Either_Sym0 PredSym0) SuccSym0)) (Apply (Apply (:@#@$) (Apply LeftSym0 ZeroSym0)) (Apply (Apply (:@#@$) (Apply RightSym0 (Apply SuccSym0 ZeroSym0))) '[]))- type family Foo :: [Nat] where- Foo = Apply (Apply MapSym0 Lambda_0123456789876543210Sym0) (Apply (Apply (:@#@$) (Apply LeftSym0 ZeroSym0)) (Apply (Apply (:@#@$) (Apply RightSym0 (Apply SuccSym0 ZeroSym0))) '[]))- sBar :: Sing (BarSym0 :: [Nat])- sFoo :: Sing (FooSym0 :: [Nat])- sBar- = (applySing- ((applySing ((singFun2 @MapSym0) sMap))- ((applySing- ((applySing ((singFun3 @Either_Sym0) sEither_))- ((singFun1 @PredSym0) sPred)))- ((singFun1 @SuccSym0) SSucc))))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @LeftSym0) SLeft)) SZero)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @RightSym0) SRight))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))))- SNil))- sFoo- = (applySing- ((applySing ((singFun2 @MapSym0) sMap))- ((singFun1 @Lambda_0123456789876543210Sym0)- (\ sX- -> case sX of {- (_ :: Sing x)- -> (applySing- ((applySing- ((applySing ((singFun3 @Either_Sym0) sEither_))- ((singFun1 @PredSym0) sPred)))- ((singFun1 @SuccSym0) SSucc)))- sX }))))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @LeftSym0) SLeft)) SZero)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @RightSym0) SRight))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))))- SNil))
+ tests/compile-and-dump/Singletons/LambdasComprehensive.ghc88.template view
@@ -0,0 +1,71 @@+Singletons/LambdasComprehensive.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo :: [Nat]+ foo+ = map (\ x -> either_ pred Succ x) [Left Zero, Right (Succ Zero)]+ bar :: [Nat]+ bar = map (either_ pred Succ) [Left Zero, Right (Succ Zero)] |]+ ======>+ foo :: [Nat]+ foo+ = (map (\ x -> ((either_ pred) Succ) x))+ [Left Zero, Right (Succ Zero)]+ bar :: [Nat]+ bar = (map ((either_ pred) Succ)) [Left Zero, Right (Succ Zero)]+ type family Lambda_0123456789876543210 t where+ Lambda_0123456789876543210 x = Apply (Apply (Apply Either_Sym0 PredSym0) SuccSym0) x+ type Lambda_0123456789876543210Sym1 t0123456789876543210 =+ Lambda_0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 t0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 t0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210+ type BarSym0 = Bar+ type FooSym0 = Foo+ type family Bar :: [Nat] where+ Bar = Apply (Apply MapSym0 (Apply (Apply Either_Sym0 PredSym0) SuccSym0)) (Apply (Apply (:@#@$) (Apply LeftSym0 ZeroSym0)) (Apply (Apply (:@#@$) (Apply RightSym0 (Apply SuccSym0 ZeroSym0))) '[]))+ type family Foo :: [Nat] where+ Foo = Apply (Apply MapSym0 Lambda_0123456789876543210Sym0) (Apply (Apply (:@#@$) (Apply LeftSym0 ZeroSym0)) (Apply (Apply (:@#@$) (Apply RightSym0 (Apply SuccSym0 ZeroSym0))) '[]))+ sBar :: Sing (BarSym0 :: [Nat])+ sFoo :: Sing (FooSym0 :: [Nat])+ sBar+ = (applySing+ ((applySing ((singFun2 @MapSym0) sMap))+ ((applySing+ ((applySing ((singFun3 @Either_Sym0) sEither_))+ ((singFun1 @PredSym0) sPred)))+ ((singFun1 @SuccSym0) SSucc))))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @LeftSym0) SLeft)) SZero)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @RightSym0) SRight))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))))+ SNil))+ sFoo+ = (applySing+ ((applySing ((singFun2 @MapSym0) sMap))+ ((singFun1 @Lambda_0123456789876543210Sym0)+ (\ sX+ -> case sX of {+ (_ :: Sing x)+ -> (applySing+ ((applySing+ ((applySing ((singFun3 @Either_Sym0) sEither_))+ ((singFun1 @PredSym0) sPred)))+ ((singFun1 @SuccSym0) SSucc)))+ sX }))))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @LeftSym0) SLeft)) SZero)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @RightSym0) SRight))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))))+ SNil))
− tests/compile-and-dump/Singletons/LetStatements.ghc86.template
@@ -1,1002 +0,0 @@-Singletons/LetStatements.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo1 :: Nat -> Nat- foo1 x- = let- y :: Nat- y = Succ Zero- in y- foo2 :: Nat- foo2- = let- y = Succ Zero- z = Succ y- in z- foo3 :: Nat -> Nat- foo3 x- = let- y :: Nat- y = Succ x- in y- foo4 :: Nat -> Nat- foo4 x- = let- f :: Nat -> Nat- f y = Succ y- in f x- foo5 :: Nat -> Nat- foo5 x- = let- f :: Nat -> Nat- f y- = let- z :: Nat- z = Succ y- in Succ z- in f x- foo6 :: Nat -> Nat- foo6 x- = let- f :: Nat -> Nat- f y = Succ y in- let- z :: Nat- z = f x- in z- foo7 :: Nat -> Nat- foo7 x- = let- x :: Nat- x = Zero- in x- foo8 :: Nat -> Nat- foo8 x- = let- z :: Nat- z = (\ x -> x) Zero- in z- foo9 :: Nat -> Nat- foo9 x- = let- z :: Nat -> Nat- z = (\ x -> x)- in z x- foo10 :: Nat -> Nat- foo10 x- = let- (+) :: Nat -> Nat -> Nat- Zero + m = m- (Succ n) + m = Succ (n + m)- in (Succ Zero) + x- foo11 :: Nat -> Nat- foo11 x- = let- (+) :: Nat -> Nat -> Nat- Zero + m = m- (Succ n) + m = Succ (n + m)- z :: Nat- z = x- in (Succ Zero) + z- foo12 :: Nat -> Nat- foo12 x- = let- (+) :: Nat -> Nat -> Nat- Zero + m = m- (Succ n) + m = Succ (n + x)- in x + (Succ (Succ Zero))- foo13 :: forall a. a -> a- foo13 x- = let- bar :: a- bar = x- in foo13_ bar- foo13_ :: a -> a- foo13_ y = y- foo14 :: Nat -> (Nat, Nat)- foo14 x = let (y, z) = (Succ x, x) in (z, y) |]- ======>- foo1 :: Nat -> Nat- foo1 x- = let- y :: Nat- y = Succ Zero- in y- foo2 :: Nat- foo2- = let- y = Succ Zero- z = Succ y- in z- foo3 :: Nat -> Nat- foo3 x- = let- y :: Nat- y = Succ x- in y- foo4 :: Nat -> Nat- foo4 x- = let- f :: Nat -> Nat- f y = Succ y- in f x- foo5 :: Nat -> Nat- foo5 x- = let- f :: Nat -> Nat- f y- = let- z :: Nat- z = Succ y- in Succ z- in f x- foo6 :: Nat -> Nat- foo6 x- = let- f :: Nat -> Nat- f y = Succ y in- let- z :: Nat- z = f x- in z- foo7 :: Nat -> Nat- foo7 x- = let- x :: Nat- x = Zero- in x- foo8 :: Nat -> Nat- foo8 x- = let- z :: Nat- z = (\ x -> x) Zero- in z- foo9 :: Nat -> Nat- foo9 x- = let- z :: Nat -> Nat- z = \ x -> x- in z x- foo10 :: Nat -> Nat- foo10 x- = let- (+) :: Nat -> Nat -> Nat- (+) Zero m = m- (+) (Succ n) m = Succ (n + m)- in (Succ Zero + x)- foo11 :: Nat -> Nat- foo11 x- = let- (+) :: Nat -> Nat -> Nat- z :: Nat- (+) Zero m = m- (+) (Succ n) m = Succ (n + m)- z = x- in (Succ Zero + z)- foo12 :: Nat -> Nat- foo12 x- = let- (+) :: Nat -> Nat -> Nat- (+) Zero m = m- (+) (Succ n) m = Succ (n + x)- in (x + Succ (Succ Zero))- foo13 :: forall a. a -> a- foo13 x- = let- bar :: a- bar = x- in foo13_ bar- foo13_ :: a -> a- foo13_ y = y- foo14 :: Nat -> (Nat, Nat)- foo14 x = let (y, z) = (Succ x, x) in (z, y)- type family Case_0123456789876543210 x t where- Case_0123456789876543210 x '(y_0123456789876543210,- _) = y_0123456789876543210- type family Case_0123456789876543210 x t where- Case_0123456789876543210 x '(_,- y_0123456789876543210) = y_0123456789876543210- type Let0123456789876543210YSym1 x0123456789876543210 =- Let0123456789876543210Y x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210YSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210YSym0KindInference) ())- data Let0123456789876543210YSym0 x0123456789876543210- where- Let0123456789876543210YSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210YSym0 arg) (Let0123456789876543210YSym1 arg) =>- Let0123456789876543210YSym0 x0123456789876543210- type instance Apply Let0123456789876543210YSym0 x0123456789876543210 = Let0123456789876543210Y x0123456789876543210- type Let0123456789876543210ZSym1 x0123456789876543210 =- Let0123456789876543210Z x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210ZSym0KindInference) ())- data Let0123456789876543210ZSym0 x0123456789876543210- where- Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>- Let0123456789876543210ZSym0 x0123456789876543210- type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210Z x0123456789876543210- type Let0123456789876543210X_0123456789876543210Sym1 x0123456789876543210 =- Let0123456789876543210X_0123456789876543210 x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210X_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd- (((,) Let0123456789876543210X_0123456789876543210Sym0KindInference)- ())- data Let0123456789876543210X_0123456789876543210Sym0 x0123456789876543210- where- Let0123456789876543210X_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210X_0123456789876543210Sym0 arg) (Let0123456789876543210X_0123456789876543210Sym1 arg) =>- Let0123456789876543210X_0123456789876543210Sym0 x0123456789876543210- type instance Apply Let0123456789876543210X_0123456789876543210Sym0 x0123456789876543210 = Let0123456789876543210X_0123456789876543210 x0123456789876543210- type family Let0123456789876543210Y x where- Let0123456789876543210Y x = Case_0123456789876543210 x (Let0123456789876543210X_0123456789876543210Sym1 x)- type family Let0123456789876543210Z x where- Let0123456789876543210Z x = Case_0123456789876543210 x (Let0123456789876543210X_0123456789876543210Sym1 x)- type family Let0123456789876543210X_0123456789876543210 x where- Let0123456789876543210X_0123456789876543210 x = Apply (Apply Tuple2Sym0 (Apply SuccSym0 x)) x- type Let0123456789876543210BarSym1 x0123456789876543210 =- Let0123456789876543210Bar x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210BarSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210BarSym0KindInference) ())- data Let0123456789876543210BarSym0 x0123456789876543210- where- Let0123456789876543210BarSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210BarSym0 arg) (Let0123456789876543210BarSym1 arg) =>- Let0123456789876543210BarSym0 x0123456789876543210- type instance Apply Let0123456789876543210BarSym0 x0123456789876543210 = Let0123456789876543210Bar x0123456789876543210- type family Let0123456789876543210Bar x :: a where- Let0123456789876543210Bar x = x- type (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- (<<<%%%%%%%%%%%%%%%%%%%%) x0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###)) ())- data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 (a0123456789876543210 :: Nat) :: (~>) Nat Nat- where- (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###) :: forall x0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 a0123456789876543210 arg) =>- (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%) a0123456789876543210 x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###)) ())- data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 :: (~>) Nat ((~>) Nat Nat)- where- (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###) :: forall x0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 arg) =>- (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 a0123456789876543210- type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (<<<%%%%%%%%%%%%%%%%%%%%@#@$) where- suppressUnusedWarnings- = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###)) ())- data (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210- where- (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###) :: forall x0123456789876543210- arg. SameKind (Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) arg) =>- (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210- type instance Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210- type family (<<<%%%%%%%%%%%%%%%%%%%%) x (a :: Nat) (a :: Nat) :: Nat where- (<<<%%%%%%%%%%%%%%%%%%%%) x 'Zero m = m- (<<<%%%%%%%%%%%%%%%%%%%%) x ( 'Succ n) m = Apply SuccSym0 (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) n) x)- type Let0123456789876543210ZSym1 x0123456789876543210 =- Let0123456789876543210Z x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210ZSym0KindInference) ())- data Let0123456789876543210ZSym0 x0123456789876543210- where- Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>- Let0123456789876543210ZSym0 x0123456789876543210- type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210Z x0123456789876543210- type (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- (<<<%%%%%%%%%%%%%%%%%%%%) x0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###)) ())- data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 (a0123456789876543210 :: Nat) :: (~>) Nat Nat- where- (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###) :: forall x0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 a0123456789876543210 arg) =>- (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%) a0123456789876543210 x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###)) ())- data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 :: (~>) Nat ((~>) Nat Nat)- where- (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###) :: forall x0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 arg) =>- (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 a0123456789876543210- type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (<<<%%%%%%%%%%%%%%%%%%%%@#@$) where- suppressUnusedWarnings- = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###)) ())- data (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210- where- (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###) :: forall x0123456789876543210- arg. SameKind (Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) arg) =>- (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210- type instance Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210- type family Let0123456789876543210Z x :: Nat where- Let0123456789876543210Z x = x- type family (<<<%%%%%%%%%%%%%%%%%%%%) x (a :: Nat) (a :: Nat) :: Nat where- (<<<%%%%%%%%%%%%%%%%%%%%) x 'Zero m = m- (<<<%%%%%%%%%%%%%%%%%%%%) x ( 'Succ n) m = Apply SuccSym0 (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) n) m)- type (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- (<<<%%%%%%%%%%%%%%%%%%%%) x0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###)) ())- data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 (a0123456789876543210 :: Nat) :: (~>) Nat Nat- where- (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###) :: forall x0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 a0123456789876543210 arg) =>- (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%) a0123456789876543210 x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###)) ())- data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 :: (~>) Nat ((~>) Nat Nat)- where- (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###) :: forall x0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 arg) =>- (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 a0123456789876543210- type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (<<<%%%%%%%%%%%%%%%%%%%%@#@$) where- suppressUnusedWarnings- = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###)) ())- data (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210- where- (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###) :: forall x0123456789876543210- arg. SameKind (Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) arg) =>- (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210- type instance Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210- type family (<<<%%%%%%%%%%%%%%%%%%%%) x (a :: Nat) (a :: Nat) :: Nat where- (<<<%%%%%%%%%%%%%%%%%%%%) x 'Zero m = m- (<<<%%%%%%%%%%%%%%%%%%%%) x ( 'Succ n) m = Apply SuccSym0 (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) n) m)- type family Lambda_0123456789876543210 x a_0123456789876543210 t where- Lambda_0123456789876543210 x a_0123456789876543210 x = x- type Lambda_0123456789876543210Sym3 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210- a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type Let0123456789876543210ZSym2 x0123456789876543210 (a0123456789876543210 :: Nat) =- Let0123456789876543210Z x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210ZSym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210ZSym1KindInference) ())- data Let0123456789876543210ZSym1 x0123456789876543210 :: (~>) Nat Nat- where- Let0123456789876543210ZSym1KindInference :: forall x0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Let0123456789876543210ZSym1 x0123456789876543210) arg) (Let0123456789876543210ZSym2 x0123456789876543210 arg) =>- Let0123456789876543210ZSym1 x0123456789876543210 a0123456789876543210- type instance Apply (Let0123456789876543210ZSym1 x0123456789876543210) a0123456789876543210 = Let0123456789876543210Z x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210ZSym0KindInference) ())- data Let0123456789876543210ZSym0 x0123456789876543210- where- Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>- Let0123456789876543210ZSym0 x0123456789876543210- type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210ZSym1 x0123456789876543210- type family Let0123456789876543210Z x (a :: Nat) :: Nat where- Let0123456789876543210Z x a_0123456789876543210 = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) a_0123456789876543210) a_0123456789876543210- type family Lambda_0123456789876543210 x t where- Lambda_0123456789876543210 x x = x- type Lambda_0123456789876543210Sym2 x0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type Let0123456789876543210ZSym1 x0123456789876543210 =- Let0123456789876543210Z x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210ZSym0KindInference) ())- data Let0123456789876543210ZSym0 x0123456789876543210- where- Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>- Let0123456789876543210ZSym0 x0123456789876543210- type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210Z x0123456789876543210- type family Let0123456789876543210Z x :: Nat where- Let0123456789876543210Z x = Apply (Apply Lambda_0123456789876543210Sym0 x) ZeroSym0- type Let0123456789876543210XSym1 x0123456789876543210 =- Let0123456789876543210X x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210XSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210XSym0KindInference) ())- data Let0123456789876543210XSym0 x0123456789876543210- where- Let0123456789876543210XSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210XSym0 arg) (Let0123456789876543210XSym1 arg) =>- Let0123456789876543210XSym0 x0123456789876543210- type instance Apply Let0123456789876543210XSym0 x0123456789876543210 = Let0123456789876543210X x0123456789876543210- type family Let0123456789876543210X x :: Nat where- Let0123456789876543210X x = ZeroSym0- type Let0123456789876543210FSym2 x0123456789876543210 (a0123456789876543210 :: Nat) =- Let0123456789876543210F x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210FSym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210FSym1KindInference) ())- data Let0123456789876543210FSym1 x0123456789876543210 :: (~>) Nat Nat- where- Let0123456789876543210FSym1KindInference :: forall x0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Let0123456789876543210FSym1 x0123456789876543210) arg) (Let0123456789876543210FSym2 x0123456789876543210 arg) =>- Let0123456789876543210FSym1 x0123456789876543210 a0123456789876543210- type instance Apply (Let0123456789876543210FSym1 x0123456789876543210) a0123456789876543210 = Let0123456789876543210F x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210FSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210FSym0KindInference) ())- data Let0123456789876543210FSym0 x0123456789876543210- where- Let0123456789876543210FSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210FSym0 arg) (Let0123456789876543210FSym1 arg) =>- Let0123456789876543210FSym0 x0123456789876543210- type instance Apply Let0123456789876543210FSym0 x0123456789876543210 = Let0123456789876543210FSym1 x0123456789876543210- type family Let0123456789876543210F x (a :: Nat) :: Nat where- Let0123456789876543210F x y = Apply SuccSym0 y- type Let0123456789876543210ZSym1 x0123456789876543210 =- Let0123456789876543210Z x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210ZSym0KindInference) ())- data Let0123456789876543210ZSym0 x0123456789876543210- where- Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>- Let0123456789876543210ZSym0 x0123456789876543210- type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210Z x0123456789876543210- type family Let0123456789876543210Z x :: Nat where- Let0123456789876543210Z x = Apply (Let0123456789876543210FSym1 x) x- type Let0123456789876543210ZSym2 x0123456789876543210 y0123456789876543210 =- Let0123456789876543210Z x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210ZSym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210ZSym1KindInference) ())- data Let0123456789876543210ZSym1 x0123456789876543210 y0123456789876543210- where- Let0123456789876543210ZSym1KindInference :: forall x0123456789876543210- y0123456789876543210- arg. SameKind (Apply (Let0123456789876543210ZSym1 x0123456789876543210) arg) (Let0123456789876543210ZSym2 x0123456789876543210 arg) =>- Let0123456789876543210ZSym1 x0123456789876543210 y0123456789876543210- type instance Apply (Let0123456789876543210ZSym1 x0123456789876543210) y0123456789876543210 = Let0123456789876543210Z x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210ZSym0KindInference) ())- data Let0123456789876543210ZSym0 x0123456789876543210- where- Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>- Let0123456789876543210ZSym0 x0123456789876543210- type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210ZSym1 x0123456789876543210- type family Let0123456789876543210Z x y :: Nat where- Let0123456789876543210Z x y = Apply SuccSym0 y- type Let0123456789876543210FSym2 x0123456789876543210 (a0123456789876543210 :: Nat) =- Let0123456789876543210F x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210FSym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210FSym1KindInference) ())- data Let0123456789876543210FSym1 x0123456789876543210 :: (~>) Nat Nat- where- Let0123456789876543210FSym1KindInference :: forall x0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Let0123456789876543210FSym1 x0123456789876543210) arg) (Let0123456789876543210FSym2 x0123456789876543210 arg) =>- Let0123456789876543210FSym1 x0123456789876543210 a0123456789876543210- type instance Apply (Let0123456789876543210FSym1 x0123456789876543210) a0123456789876543210 = Let0123456789876543210F x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210FSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210FSym0KindInference) ())- data Let0123456789876543210FSym0 x0123456789876543210- where- Let0123456789876543210FSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210FSym0 arg) (Let0123456789876543210FSym1 arg) =>- Let0123456789876543210FSym0 x0123456789876543210- type instance Apply Let0123456789876543210FSym0 x0123456789876543210 = Let0123456789876543210FSym1 x0123456789876543210- type family Let0123456789876543210F x (a :: Nat) :: Nat where- Let0123456789876543210F x y = Apply SuccSym0 (Let0123456789876543210ZSym2 x y)- type Let0123456789876543210FSym2 x0123456789876543210 (a0123456789876543210 :: Nat) =- Let0123456789876543210F x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210FSym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210FSym1KindInference) ())- data Let0123456789876543210FSym1 x0123456789876543210 :: (~>) Nat Nat- where- Let0123456789876543210FSym1KindInference :: forall x0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Let0123456789876543210FSym1 x0123456789876543210) arg) (Let0123456789876543210FSym2 x0123456789876543210 arg) =>- Let0123456789876543210FSym1 x0123456789876543210 a0123456789876543210- type instance Apply (Let0123456789876543210FSym1 x0123456789876543210) a0123456789876543210 = Let0123456789876543210F x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210FSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210FSym0KindInference) ())- data Let0123456789876543210FSym0 x0123456789876543210- where- Let0123456789876543210FSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210FSym0 arg) (Let0123456789876543210FSym1 arg) =>- Let0123456789876543210FSym0 x0123456789876543210- type instance Apply Let0123456789876543210FSym0 x0123456789876543210 = Let0123456789876543210FSym1 x0123456789876543210- type family Let0123456789876543210F x (a :: Nat) :: Nat where- Let0123456789876543210F x y = Apply SuccSym0 y- type Let0123456789876543210YSym1 x0123456789876543210 =- Let0123456789876543210Y x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210YSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210YSym0KindInference) ())- data Let0123456789876543210YSym0 x0123456789876543210- where- Let0123456789876543210YSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210YSym0 arg) (Let0123456789876543210YSym1 arg) =>- Let0123456789876543210YSym0 x0123456789876543210- type instance Apply Let0123456789876543210YSym0 x0123456789876543210 = Let0123456789876543210Y x0123456789876543210- type family Let0123456789876543210Y x :: Nat where- Let0123456789876543210Y x = Apply SuccSym0 x- type Let0123456789876543210YSym0 = Let0123456789876543210Y- type Let0123456789876543210ZSym0 = Let0123456789876543210Z- type family Let0123456789876543210Y where- Let0123456789876543210Y = Apply SuccSym0 ZeroSym0- type family Let0123456789876543210Z where- Let0123456789876543210Z = Apply SuccSym0 Let0123456789876543210YSym0- type Let0123456789876543210YSym1 x0123456789876543210 =- Let0123456789876543210Y x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210YSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210YSym0KindInference) ())- data Let0123456789876543210YSym0 x0123456789876543210- where- Let0123456789876543210YSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210YSym0 arg) (Let0123456789876543210YSym1 arg) =>- Let0123456789876543210YSym0 x0123456789876543210- type instance Apply Let0123456789876543210YSym0 x0123456789876543210 = Let0123456789876543210Y x0123456789876543210- type family Let0123456789876543210Y x :: Nat where- Let0123456789876543210Y x = Apply SuccSym0 ZeroSym0- type Foo14Sym1 (a0123456789876543210 :: Nat) =- Foo14 a0123456789876543210- instance SuppressUnusedWarnings Foo14Sym0 where- suppressUnusedWarnings = snd (((,) Foo14Sym0KindInference) ())- data Foo14Sym0 :: (~>) Nat (Nat, Nat)- where- Foo14Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo14Sym0 arg) (Foo14Sym1 arg) =>- Foo14Sym0 a0123456789876543210- type instance Apply Foo14Sym0 a0123456789876543210 = Foo14 a0123456789876543210- type Foo13_Sym1 (a0123456789876543210 :: a0123456789876543210) =- Foo13_ a0123456789876543210- instance SuppressUnusedWarnings Foo13_Sym0 where- suppressUnusedWarnings = snd (((,) Foo13_Sym0KindInference) ())- data Foo13_Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- Foo13_Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo13_Sym0 arg) (Foo13_Sym1 arg) =>- Foo13_Sym0 a0123456789876543210- type instance Apply Foo13_Sym0 a0123456789876543210 = Foo13_ a0123456789876543210- type Foo13Sym1 (a0123456789876543210 :: a0123456789876543210) =- Foo13 a0123456789876543210- instance SuppressUnusedWarnings Foo13Sym0 where- suppressUnusedWarnings = snd (((,) Foo13Sym0KindInference) ())- data Foo13Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- Foo13Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo13Sym0 arg) (Foo13Sym1 arg) =>- Foo13Sym0 a0123456789876543210- type instance Apply Foo13Sym0 a0123456789876543210 = Foo13 a0123456789876543210- type Foo12Sym1 (a0123456789876543210 :: Nat) =- Foo12 a0123456789876543210- instance SuppressUnusedWarnings Foo12Sym0 where- suppressUnusedWarnings = snd (((,) Foo12Sym0KindInference) ())- data Foo12Sym0 :: (~>) Nat Nat- where- Foo12Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo12Sym0 arg) (Foo12Sym1 arg) =>- Foo12Sym0 a0123456789876543210- type instance Apply Foo12Sym0 a0123456789876543210 = Foo12 a0123456789876543210- type Foo11Sym1 (a0123456789876543210 :: Nat) =- Foo11 a0123456789876543210- instance SuppressUnusedWarnings Foo11Sym0 where- suppressUnusedWarnings = snd (((,) Foo11Sym0KindInference) ())- data Foo11Sym0 :: (~>) Nat Nat- where- Foo11Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo11Sym0 arg) (Foo11Sym1 arg) =>- Foo11Sym0 a0123456789876543210- type instance Apply Foo11Sym0 a0123456789876543210 = Foo11 a0123456789876543210- type Foo10Sym1 (a0123456789876543210 :: Nat) =- Foo10 a0123456789876543210- instance SuppressUnusedWarnings Foo10Sym0 where- suppressUnusedWarnings = snd (((,) Foo10Sym0KindInference) ())- data Foo10Sym0 :: (~>) Nat Nat- where- Foo10Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo10Sym0 arg) (Foo10Sym1 arg) =>- Foo10Sym0 a0123456789876543210- type instance Apply Foo10Sym0 a0123456789876543210 = Foo10 a0123456789876543210- type Foo9Sym1 (a0123456789876543210 :: Nat) =- Foo9 a0123456789876543210- instance SuppressUnusedWarnings Foo9Sym0 where- suppressUnusedWarnings = snd (((,) Foo9Sym0KindInference) ())- data Foo9Sym0 :: (~>) Nat Nat- where- Foo9Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo9Sym0 arg) (Foo9Sym1 arg) =>- Foo9Sym0 a0123456789876543210- type instance Apply Foo9Sym0 a0123456789876543210 = Foo9 a0123456789876543210- type Foo8Sym1 (a0123456789876543210 :: Nat) =- Foo8 a0123456789876543210- instance SuppressUnusedWarnings Foo8Sym0 where- suppressUnusedWarnings = snd (((,) Foo8Sym0KindInference) ())- data Foo8Sym0 :: (~>) Nat Nat- where- Foo8Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo8Sym0 arg) (Foo8Sym1 arg) =>- Foo8Sym0 a0123456789876543210- type instance Apply Foo8Sym0 a0123456789876543210 = Foo8 a0123456789876543210- type Foo7Sym1 (a0123456789876543210 :: Nat) =- Foo7 a0123456789876543210- instance SuppressUnusedWarnings Foo7Sym0 where- suppressUnusedWarnings = snd (((,) Foo7Sym0KindInference) ())- data Foo7Sym0 :: (~>) Nat Nat- where- Foo7Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo7Sym0 arg) (Foo7Sym1 arg) =>- Foo7Sym0 a0123456789876543210- type instance Apply Foo7Sym0 a0123456789876543210 = Foo7 a0123456789876543210- type Foo6Sym1 (a0123456789876543210 :: Nat) =- Foo6 a0123456789876543210- instance SuppressUnusedWarnings Foo6Sym0 where- suppressUnusedWarnings = snd (((,) Foo6Sym0KindInference) ())- data Foo6Sym0 :: (~>) Nat Nat- where- Foo6Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo6Sym0 arg) (Foo6Sym1 arg) =>- Foo6Sym0 a0123456789876543210- type instance Apply Foo6Sym0 a0123456789876543210 = Foo6 a0123456789876543210- type Foo5Sym1 (a0123456789876543210 :: Nat) =- Foo5 a0123456789876543210- instance SuppressUnusedWarnings Foo5Sym0 where- suppressUnusedWarnings = snd (((,) Foo5Sym0KindInference) ())- data Foo5Sym0 :: (~>) Nat Nat- where- Foo5Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo5Sym0 arg) (Foo5Sym1 arg) =>- Foo5Sym0 a0123456789876543210- type instance Apply Foo5Sym0 a0123456789876543210 = Foo5 a0123456789876543210- type Foo4Sym1 (a0123456789876543210 :: Nat) =- Foo4 a0123456789876543210- instance SuppressUnusedWarnings Foo4Sym0 where- suppressUnusedWarnings = snd (((,) Foo4Sym0KindInference) ())- data Foo4Sym0 :: (~>) Nat Nat- where- Foo4Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo4Sym0 arg) (Foo4Sym1 arg) =>- Foo4Sym0 a0123456789876543210- type instance Apply Foo4Sym0 a0123456789876543210 = Foo4 a0123456789876543210- type Foo3Sym1 (a0123456789876543210 :: Nat) =- Foo3 a0123456789876543210- instance SuppressUnusedWarnings Foo3Sym0 where- suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())- data Foo3Sym0 :: (~>) Nat Nat- where- Foo3Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>- Foo3Sym0 a0123456789876543210- type instance Apply Foo3Sym0 a0123456789876543210 = Foo3 a0123456789876543210- type Foo2Sym0 = Foo2- type Foo1Sym1 (a0123456789876543210 :: Nat) =- Foo1 a0123456789876543210- instance SuppressUnusedWarnings Foo1Sym0 where- suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())- data Foo1Sym0 :: (~>) Nat Nat- where- Foo1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>- Foo1Sym0 a0123456789876543210- type instance Apply Foo1Sym0 a0123456789876543210 = Foo1 a0123456789876543210- type family Foo14 (a :: Nat) :: (Nat, Nat) where- Foo14 x = Apply (Apply Tuple2Sym0 (Let0123456789876543210ZSym1 x)) (Let0123456789876543210YSym1 x)- type family Foo13_ (a :: a) :: a where- Foo13_ y = y- type family Foo13 (a :: a) :: a where- Foo13 x = Apply Foo13_Sym0 (Let0123456789876543210BarSym1 x)- type family Foo12 (a :: Nat) :: Nat where- Foo12 x = Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) x) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))- type family Foo11 (a :: Nat) :: Nat where- Foo11 x = Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) (Apply SuccSym0 ZeroSym0)) (Let0123456789876543210ZSym1 x)- type family Foo10 (a :: Nat) :: Nat where- Foo10 x = Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) (Apply SuccSym0 ZeroSym0)) x- type family Foo9 (a :: Nat) :: Nat where- Foo9 x = Apply (Let0123456789876543210ZSym1 x) x- type family Foo8 (a :: Nat) :: Nat where- Foo8 x = Let0123456789876543210ZSym1 x- type family Foo7 (a :: Nat) :: Nat where- Foo7 x = Let0123456789876543210XSym1 x- type family Foo6 (a :: Nat) :: Nat where- Foo6 x = Let0123456789876543210ZSym1 x- type family Foo5 (a :: Nat) :: Nat where- Foo5 x = Apply (Let0123456789876543210FSym1 x) x- type family Foo4 (a :: Nat) :: Nat where- Foo4 x = Apply (Let0123456789876543210FSym1 x) x- type family Foo3 (a :: Nat) :: Nat where- Foo3 x = Let0123456789876543210YSym1 x- type family Foo2 :: Nat where- Foo2 = Let0123456789876543210ZSym0- type family Foo1 (a :: Nat) :: Nat where- Foo1 x = Let0123456789876543210YSym1 x- sFoo14 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo14Sym0 t :: (Nat, Nat))- sFoo13_ ::- forall a (t :: a). Sing t -> Sing (Apply Foo13_Sym0 t :: a)- sFoo13 ::- forall a (t :: a). Sing t -> Sing (Apply Foo13Sym0 t :: a)- sFoo12 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo12Sym0 t :: Nat)- sFoo11 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo11Sym0 t :: Nat)- sFoo10 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo10Sym0 t :: Nat)- sFoo9 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo9Sym0 t :: Nat)- sFoo8 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo8Sym0 t :: Nat)- sFoo7 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo7Sym0 t :: Nat)- sFoo6 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo6Sym0 t :: Nat)- sFoo5 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo5Sym0 t :: Nat)- sFoo4 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo4Sym0 t :: Nat)- sFoo3 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo3Sym0 t :: Nat)- sFoo2 :: Sing (Foo2Sym0 :: Nat)- sFoo1 ::- forall (t :: Nat). Sing t -> Sing (Apply Foo1Sym0 t :: Nat)- sFoo14 (sX :: Sing x)- = let- sY :: Sing (Let0123456789876543210YSym1 x)- sZ :: Sing (Let0123456789876543210ZSym1 x)- sX_0123456789876543210 ::- Sing (Let0123456789876543210X_0123456789876543210Sym1 x)- sY- = (case sX_0123456789876543210 of {- STuple2 (sY_0123456789876543210 :: Sing y_0123456789876543210) _- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 x (Let0123456789876543210X_0123456789876543210Sym1 x))- sZ- = (case sX_0123456789876543210 of {- STuple2 _ (sY_0123456789876543210 :: Sing y_0123456789876543210)- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 x (Let0123456789876543210X_0123456789876543210Sym1 x))- sX_0123456789876543210- = (applySing- ((applySing ((singFun2 @Tuple2Sym0) STuple2))- ((applySing ((singFun1 @SuccSym0) SSucc)) sX)))- sX- in (applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sZ)) sY- sFoo13_ (sY :: Sing y) = sY- sFoo13 (sX :: Sing x)- = let- sBar :: Sing (Let0123456789876543210BarSym1 x :: a)- sBar = sX- in (applySing ((singFun1 @Foo13_Sym0) sFoo13_)) sBar- sFoo12 (sX :: Sing x)- = let- (%+) ::- forall (t :: Nat) (t :: Nat).- Sing t- -> Sing t- -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)- (%+) SZero (sM :: Sing m) = sM- (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)- = (applySing ((singFun1 @SuccSym0) SSucc))- ((applySing- ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))- sN))- sX)- in- (applySing- ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))- sX))- ((applySing ((singFun1 @SuccSym0) SSucc))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))- sFoo11 (sX :: Sing x)- = let- sZ :: Sing (Let0123456789876543210ZSym1 x :: Nat)- (%+) ::- forall (t :: Nat) (t :: Nat).- Sing t- -> Sing t- -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)- sZ = sX- (%+) SZero (sM :: Sing m) = sM- (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)- = (applySing ((singFun1 @SuccSym0) SSucc))- ((applySing- ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))- sN))- sM)- in- (applySing- ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- sZ- sFoo10 (sX :: Sing x)- = let- (%+) ::- forall (t :: Nat) (t :: Nat).- Sing t- -> Sing t- -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)- (%+) SZero (sM :: Sing m) = sM- (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)- = (applySing ((singFun1 @SuccSym0) SSucc))- ((applySing- ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))- sN))- sM)- in- (applySing- ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- sX- sFoo9 (sX :: Sing x)- = let- sZ ::- forall (t :: Nat).- Sing t -> Sing (Apply (Let0123456789876543210ZSym1 x) t :: Nat)- sZ (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((singFun1- @(Apply (Apply Lambda_0123456789876543210Sym0 x) a_0123456789876543210))- (\ sX -> case sX of { (_ :: Sing x) -> sX })))- sA_0123456789876543210- in (applySing ((singFun1 @(Let0123456789876543210ZSym1 x)) sZ)) sX- sFoo8 (sX :: Sing x)- = let- sZ :: Sing (Let0123456789876543210ZSym1 x :: Nat)- sZ- = (applySing- ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))- (\ sX -> case sX of { (_ :: Sing x) -> sX })))- SZero- in sZ- sFoo7 (sX :: Sing x)- = let- sX :: Sing (Let0123456789876543210XSym1 x :: Nat)- sX = SZero- in sX- sFoo6 (sX :: Sing x)- = let- sF ::- forall (t :: Nat).- Sing t -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)- sF (sY :: Sing y) = (applySing ((singFun1 @SuccSym0) SSucc)) sY in- let- sZ :: Sing (Let0123456789876543210ZSym1 x :: Nat)- sZ- = (applySing ((singFun1 @(Let0123456789876543210FSym1 x)) sF)) sX- in sZ- sFoo5 (sX :: Sing x)- = let- sF ::- forall (t :: Nat).- Sing t -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)- sF (sY :: Sing y)- = let- sZ :: Sing (Let0123456789876543210ZSym2 x y :: Nat)- sZ = (applySing ((singFun1 @SuccSym0) SSucc)) sY- in (applySing ((singFun1 @SuccSym0) SSucc)) sZ- in (applySing ((singFun1 @(Let0123456789876543210FSym1 x)) sF)) sX- sFoo4 (sX :: Sing x)- = let- sF ::- forall (t :: Nat).- Sing t -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)- sF (sY :: Sing y) = (applySing ((singFun1 @SuccSym0) SSucc)) sY- in (applySing ((singFun1 @(Let0123456789876543210FSym1 x)) sF)) sX- sFoo3 (sX :: Sing x)- = let- sY :: Sing (Let0123456789876543210YSym1 x :: Nat)- sY = (applySing ((singFun1 @SuccSym0) SSucc)) sX- in sY- sFoo2- = let- sY :: Sing Let0123456789876543210YSym0- sZ :: Sing Let0123456789876543210ZSym0- sY = (applySing ((singFun1 @SuccSym0) SSucc)) SZero- sZ = (applySing ((singFun1 @SuccSym0) SSucc)) sY- in sZ- sFoo1 (sX :: Sing x)- = let- sY :: Sing (Let0123456789876543210YSym1 x :: Nat)- sY = (applySing ((singFun1 @SuccSym0) SSucc)) SZero- in sY- instance SingI (Foo14Sym0 :: (~>) Nat (Nat, Nat)) where- sing = (singFun1 @Foo14Sym0) sFoo14- instance SingI (Foo13_Sym0 :: (~>) a a) where- sing = (singFun1 @Foo13_Sym0) sFoo13_- instance SingI (Foo13Sym0 :: (~>) a a) where- sing = (singFun1 @Foo13Sym0) sFoo13- instance SingI (Foo12Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo12Sym0) sFoo12- instance SingI (Foo11Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo11Sym0) sFoo11- instance SingI (Foo10Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo10Sym0) sFoo10- instance SingI (Foo9Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo9Sym0) sFoo9- instance SingI (Foo8Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo8Sym0) sFoo8- instance SingI (Foo7Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo7Sym0) sFoo7- instance SingI (Foo6Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo6Sym0) sFoo6- instance SingI (Foo5Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo5Sym0) sFoo5- instance SingI (Foo4Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo4Sym0) sFoo4- instance SingI (Foo3Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo3Sym0) sFoo3- instance SingI (Foo1Sym0 :: (~>) Nat Nat) where- sing = (singFun1 @Foo1Sym0) sFoo1
+ tests/compile-and-dump/Singletons/LetStatements.ghc88.template view
@@ -0,0 +1,1004 @@+Singletons/LetStatements.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo1 :: Nat -> Nat+ foo1 x+ = let+ y :: Nat+ y = Succ Zero+ in y+ foo2 :: Nat+ foo2+ = let+ y = Succ Zero+ z = Succ y+ in z+ foo3 :: Nat -> Nat+ foo3 x+ = let+ y :: Nat+ y = Succ x+ in y+ foo4 :: Nat -> Nat+ foo4 x+ = let+ f :: Nat -> Nat+ f y = Succ y+ in f x+ foo5 :: Nat -> Nat+ foo5 x+ = let+ f :: Nat -> Nat+ f y+ = let+ z :: Nat+ z = Succ y+ in Succ z+ in f x+ foo6 :: Nat -> Nat+ foo6 x+ = let+ f :: Nat -> Nat+ f y = Succ y in+ let+ z :: Nat+ z = f x+ in z+ foo7 :: Nat -> Nat+ foo7 x+ = let+ x :: Nat+ x = Zero+ in x+ foo8 :: Nat -> Nat+ foo8 x+ = let+ z :: Nat+ z = (\ x -> x) Zero+ in z+ foo9 :: Nat -> Nat+ foo9 x+ = let+ z :: Nat -> Nat+ z = (\ x -> x)+ in z x+ foo10 :: Nat -> Nat+ foo10 x+ = let+ (+) :: Nat -> Nat -> Nat+ Zero + m = m+ (Succ n) + m = Succ (n + m)+ in (Succ Zero) + x+ foo11 :: Nat -> Nat+ foo11 x+ = let+ (+) :: Nat -> Nat -> Nat+ Zero + m = m+ (Succ n) + m = Succ (n + m)+ z :: Nat+ z = x+ in (Succ Zero) + z+ foo12 :: Nat -> Nat+ foo12 x+ = let+ (+) :: Nat -> Nat -> Nat+ Zero + m = m+ (Succ n) + m = Succ (n + x)+ in x + (Succ (Succ Zero))+ foo13 :: forall a. a -> a+ foo13 x+ = let+ bar :: a+ bar = x+ in foo13_ bar+ foo13_ :: a -> a+ foo13_ y = y+ foo14 :: Nat -> (Nat, Nat)+ foo14 x = let (y, z) = (Succ x, x) in (z, y) |]+ ======>+ foo1 :: Nat -> Nat+ foo1 x+ = let+ y :: Nat+ y = Succ Zero+ in y+ foo2 :: Nat+ foo2+ = let+ y = Succ Zero+ z = Succ y+ in z+ foo3 :: Nat -> Nat+ foo3 x+ = let+ y :: Nat+ y = Succ x+ in y+ foo4 :: Nat -> Nat+ foo4 x+ = let+ f :: Nat -> Nat+ f y = Succ y+ in f x+ foo5 :: Nat -> Nat+ foo5 x+ = let+ f :: Nat -> Nat+ f y+ = let+ z :: Nat+ z = Succ y+ in Succ z+ in f x+ foo6 :: Nat -> Nat+ foo6 x+ = let+ f :: Nat -> Nat+ f y = Succ y in+ let+ z :: Nat+ z = f x+ in z+ foo7 :: Nat -> Nat+ foo7 x+ = let+ x :: Nat+ x = Zero+ in x+ foo8 :: Nat -> Nat+ foo8 x+ = let+ z :: Nat+ z = (\ x -> x) Zero+ in z+ foo9 :: Nat -> Nat+ foo9 x+ = let+ z :: Nat -> Nat+ z = \ x -> x+ in z x+ foo10 :: Nat -> Nat+ foo10 x+ = let+ (+) :: Nat -> Nat -> Nat+ (+) Zero m = m+ (+) (Succ n) m = Succ (n + m)+ in (Succ Zero + x)+ foo11 :: Nat -> Nat+ foo11 x+ = let+ (+) :: Nat -> Nat -> Nat+ z :: Nat+ (+) Zero m = m+ (+) (Succ n) m = Succ (n + m)+ z = x+ in (Succ Zero + z)+ foo12 :: Nat -> Nat+ foo12 x+ = let+ (+) :: Nat -> Nat -> Nat+ (+) Zero m = m+ (+) (Succ n) m = Succ (n + x)+ in (x + Succ (Succ Zero))+ foo13 :: forall a. a -> a+ foo13 x+ = let+ bar :: a+ bar = x+ in foo13_ bar+ foo13_ :: a -> a+ foo13_ y = y+ foo14 :: Nat -> (Nat, Nat)+ foo14 x = let (y, z) = (Succ x, x) in (z, y)+ type family Case_0123456789876543210 x t where+ Case_0123456789876543210 x '(_,+ y_0123456789876543210) = y_0123456789876543210+ type family Case_0123456789876543210 x t where+ Case_0123456789876543210 x '(y_0123456789876543210,+ _) = y_0123456789876543210+ type Let0123456789876543210ZSym1 x0123456789876543210 =+ Let0123456789876543210Z x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210ZSym0KindInference) ())+ data Let0123456789876543210ZSym0 x0123456789876543210+ where+ Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>+ Let0123456789876543210ZSym0 x0123456789876543210+ type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210Z x0123456789876543210+ type Let0123456789876543210YSym1 x0123456789876543210 =+ Let0123456789876543210Y x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210YSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210YSym0KindInference) ())+ data Let0123456789876543210YSym0 x0123456789876543210+ where+ Let0123456789876543210YSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210YSym0 arg) (Let0123456789876543210YSym1 arg) =>+ Let0123456789876543210YSym0 x0123456789876543210+ type instance Apply Let0123456789876543210YSym0 x0123456789876543210 = Let0123456789876543210Y x0123456789876543210+ type Let0123456789876543210X_0123456789876543210Sym1 x0123456789876543210 =+ Let0123456789876543210X_0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210X_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd+ (((,) Let0123456789876543210X_0123456789876543210Sym0KindInference)+ ())+ data Let0123456789876543210X_0123456789876543210Sym0 x0123456789876543210+ where+ Let0123456789876543210X_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210X_0123456789876543210Sym0 arg) (Let0123456789876543210X_0123456789876543210Sym1 arg) =>+ Let0123456789876543210X_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Let0123456789876543210X_0123456789876543210Sym0 x0123456789876543210 = Let0123456789876543210X_0123456789876543210 x0123456789876543210+ type family Let0123456789876543210Z x where+ Let0123456789876543210Z x = Case_0123456789876543210 x (Let0123456789876543210X_0123456789876543210Sym1 x)+ type family Let0123456789876543210Y x where+ Let0123456789876543210Y x = Case_0123456789876543210 x (Let0123456789876543210X_0123456789876543210Sym1 x)+ type family Let0123456789876543210X_0123456789876543210 x where+ Let0123456789876543210X_0123456789876543210 x = Apply (Apply Tuple2Sym0 (Apply SuccSym0 x)) x+ type Let0123456789876543210BarSym1 x0123456789876543210 =+ Let0123456789876543210Bar x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210BarSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210BarSym0KindInference) ())+ data Let0123456789876543210BarSym0 x0123456789876543210+ where+ Let0123456789876543210BarSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210BarSym0 arg) (Let0123456789876543210BarSym1 arg) =>+ Let0123456789876543210BarSym0 x0123456789876543210+ type instance Apply Let0123456789876543210BarSym0 x0123456789876543210 = Let0123456789876543210Bar x0123456789876543210+ type family Let0123456789876543210Bar x :: a where+ Let0123456789876543210Bar x = x+ type (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ (<<<%%%%%%%%%%%%%%%%%%%%) x0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###)) ())+ data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 (a0123456789876543210 :: Nat) :: (~>) Nat Nat+ where+ (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###) :: forall x0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 a0123456789876543210 arg) =>+ (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%) a0123456789876543210 x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###)) ())+ data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 :: (~>) Nat ((~>) Nat Nat)+ where+ (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###) :: forall x0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 arg) =>+ (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 a0123456789876543210+ type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (<<<%%%%%%%%%%%%%%%%%%%%@#@$) where+ suppressUnusedWarnings+ = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###)) ())+ data (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210+ where+ (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###) :: forall x0123456789876543210+ arg. SameKind (Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) arg) =>+ (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210+ type instance Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210+ type family (<<<%%%%%%%%%%%%%%%%%%%%) x (a :: Nat) (a :: Nat) :: Nat where+ (<<<%%%%%%%%%%%%%%%%%%%%) x 'Zero m = m+ (<<<%%%%%%%%%%%%%%%%%%%%) x ('Succ n) m = Apply SuccSym0 (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) n) x)+ type Let0123456789876543210ZSym1 x0123456789876543210 =+ Let0123456789876543210Z x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210ZSym0KindInference) ())+ data Let0123456789876543210ZSym0 x0123456789876543210+ where+ Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>+ Let0123456789876543210ZSym0 x0123456789876543210+ type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210Z x0123456789876543210+ type (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ (<<<%%%%%%%%%%%%%%%%%%%%) x0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###)) ())+ data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 (a0123456789876543210 :: Nat) :: (~>) Nat Nat+ where+ (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###) :: forall x0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 a0123456789876543210 arg) =>+ (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%) a0123456789876543210 x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###)) ())+ data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 :: (~>) Nat ((~>) Nat Nat)+ where+ (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###) :: forall x0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 arg) =>+ (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 a0123456789876543210+ type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (<<<%%%%%%%%%%%%%%%%%%%%@#@$) where+ suppressUnusedWarnings+ = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###)) ())+ data (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210+ where+ (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###) :: forall x0123456789876543210+ arg. SameKind (Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) arg) =>+ (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210+ type instance Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210+ type family Let0123456789876543210Z x :: Nat where+ Let0123456789876543210Z x = x+ type family (<<<%%%%%%%%%%%%%%%%%%%%) x (a :: Nat) (a :: Nat) :: Nat where+ (<<<%%%%%%%%%%%%%%%%%%%%) x 'Zero m = m+ (<<<%%%%%%%%%%%%%%%%%%%%) x ('Succ n) m = Apply SuccSym0 (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) n) m)+ type (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ (<<<%%%%%%%%%%%%%%%%%%%%) x0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###)) ())+ data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 (a0123456789876543210 :: Nat) :: (~>) Nat Nat+ where+ (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$$###) :: forall x0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$$) x0123456789876543210 a0123456789876543210 arg) =>+ (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) a0123456789876543210 x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%) a0123456789876543210 x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###)) ())+ data (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 :: (~>) Nat ((~>) Nat Nat)+ where+ (:<<<%%%%%%%%%%%%%%%%%%%%@#@$$###) :: forall x0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 arg) =>+ (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210 a0123456789876543210+ type instance Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210) a0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$$) x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (<<<%%%%%%%%%%%%%%%%%%%%@#@$) where+ suppressUnusedWarnings+ = snd (((,) (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###)) ())+ data (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210+ where+ (:<<<%%%%%%%%%%%%%%%%%%%%@#@$###) :: forall x0123456789876543210+ arg. SameKind (Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) arg) ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) arg) =>+ (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210+ type instance Apply (<<<%%%%%%%%%%%%%%%%%%%%@#@$) x0123456789876543210 = (<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x0123456789876543210+ type family (<<<%%%%%%%%%%%%%%%%%%%%) x (a :: Nat) (a :: Nat) :: Nat where+ (<<<%%%%%%%%%%%%%%%%%%%%) x 'Zero m = m+ (<<<%%%%%%%%%%%%%%%%%%%%) x ('Succ n) m = Apply SuccSym0 (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) n) m)+ type family Lambda_0123456789876543210 a_0123456789876543210 x t where+ Lambda_0123456789876543210 a_0123456789876543210 x x = x+ type Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 x0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 a_01234567898765432100123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 x0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall a_01234567898765432100123456789876543210+ x0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 x0123456789876543210) arg) (Lambda_0123456789876543210Sym3 a_01234567898765432100123456789876543210 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 x0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 x0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall a_01234567898765432100123456789876543210+ x0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 x0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) x0123456789876543210 = Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall a_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210+ type Let0123456789876543210ZSym2 x0123456789876543210 (a0123456789876543210 :: Nat) =+ Let0123456789876543210Z x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210ZSym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210ZSym1KindInference) ())+ data Let0123456789876543210ZSym1 x0123456789876543210 :: (~>) Nat Nat+ where+ Let0123456789876543210ZSym1KindInference :: forall x0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210ZSym1 x0123456789876543210) arg) (Let0123456789876543210ZSym2 x0123456789876543210 arg) =>+ Let0123456789876543210ZSym1 x0123456789876543210 a0123456789876543210+ type instance Apply (Let0123456789876543210ZSym1 x0123456789876543210) a0123456789876543210 = Let0123456789876543210Z x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210ZSym0KindInference) ())+ data Let0123456789876543210ZSym0 x0123456789876543210+ where+ Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>+ Let0123456789876543210ZSym0 x0123456789876543210+ type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210ZSym1 x0123456789876543210+ type family Let0123456789876543210Z x (a :: Nat) :: Nat where+ Let0123456789876543210Z x a_0123456789876543210 = Apply (Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) x) a_0123456789876543210+ type family Lambda_0123456789876543210 x t where+ Lambda_0123456789876543210 x x = x+ type Lambda_0123456789876543210Sym2 x0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type Let0123456789876543210ZSym1 x0123456789876543210 =+ Let0123456789876543210Z x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210ZSym0KindInference) ())+ data Let0123456789876543210ZSym0 x0123456789876543210+ where+ Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>+ Let0123456789876543210ZSym0 x0123456789876543210+ type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210Z x0123456789876543210+ type family Let0123456789876543210Z x :: Nat where+ Let0123456789876543210Z x = Apply (Apply Lambda_0123456789876543210Sym0 x) ZeroSym0+ type Let0123456789876543210XSym1 x0123456789876543210 =+ Let0123456789876543210X x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210XSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210XSym0KindInference) ())+ data Let0123456789876543210XSym0 x0123456789876543210+ where+ Let0123456789876543210XSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210XSym0 arg) (Let0123456789876543210XSym1 arg) =>+ Let0123456789876543210XSym0 x0123456789876543210+ type instance Apply Let0123456789876543210XSym0 x0123456789876543210 = Let0123456789876543210X x0123456789876543210+ type family Let0123456789876543210X x :: Nat where+ Let0123456789876543210X x = ZeroSym0+ type Let0123456789876543210FSym2 x0123456789876543210 (a0123456789876543210 :: Nat) =+ Let0123456789876543210F x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210FSym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210FSym1KindInference) ())+ data Let0123456789876543210FSym1 x0123456789876543210 :: (~>) Nat Nat+ where+ Let0123456789876543210FSym1KindInference :: forall x0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210FSym1 x0123456789876543210) arg) (Let0123456789876543210FSym2 x0123456789876543210 arg) =>+ Let0123456789876543210FSym1 x0123456789876543210 a0123456789876543210+ type instance Apply (Let0123456789876543210FSym1 x0123456789876543210) a0123456789876543210 = Let0123456789876543210F x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210FSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210FSym0KindInference) ())+ data Let0123456789876543210FSym0 x0123456789876543210+ where+ Let0123456789876543210FSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210FSym0 arg) (Let0123456789876543210FSym1 arg) =>+ Let0123456789876543210FSym0 x0123456789876543210+ type instance Apply Let0123456789876543210FSym0 x0123456789876543210 = Let0123456789876543210FSym1 x0123456789876543210+ type family Let0123456789876543210F x (a :: Nat) :: Nat where+ Let0123456789876543210F x y = Apply SuccSym0 y+ type Let0123456789876543210ZSym1 x0123456789876543210 =+ Let0123456789876543210Z x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210ZSym0KindInference) ())+ data Let0123456789876543210ZSym0 x0123456789876543210+ where+ Let0123456789876543210ZSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>+ Let0123456789876543210ZSym0 x0123456789876543210+ type instance Apply Let0123456789876543210ZSym0 x0123456789876543210 = Let0123456789876543210Z x0123456789876543210+ type family Let0123456789876543210Z x :: Nat where+ Let0123456789876543210Z x = Apply (Let0123456789876543210FSym1 x) x+ type Let0123456789876543210ZSym2 y0123456789876543210 x0123456789876543210 =+ Let0123456789876543210Z y0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210ZSym1 y0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210ZSym1KindInference) ())+ data Let0123456789876543210ZSym1 y0123456789876543210 x0123456789876543210+ where+ Let0123456789876543210ZSym1KindInference :: forall y0123456789876543210+ x0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210ZSym1 y0123456789876543210) arg) (Let0123456789876543210ZSym2 y0123456789876543210 arg) =>+ Let0123456789876543210ZSym1 y0123456789876543210 x0123456789876543210+ type instance Apply (Let0123456789876543210ZSym1 y0123456789876543210) x0123456789876543210 = Let0123456789876543210Z y0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210ZSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210ZSym0KindInference) ())+ data Let0123456789876543210ZSym0 y0123456789876543210+ where+ Let0123456789876543210ZSym0KindInference :: forall y0123456789876543210+ arg. SameKind (Apply Let0123456789876543210ZSym0 arg) (Let0123456789876543210ZSym1 arg) =>+ Let0123456789876543210ZSym0 y0123456789876543210+ type instance Apply Let0123456789876543210ZSym0 y0123456789876543210 = Let0123456789876543210ZSym1 y0123456789876543210+ type family Let0123456789876543210Z y x :: Nat where+ Let0123456789876543210Z y x = Apply SuccSym0 y+ type Let0123456789876543210FSym2 x0123456789876543210 (a0123456789876543210 :: Nat) =+ Let0123456789876543210F x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210FSym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210FSym1KindInference) ())+ data Let0123456789876543210FSym1 x0123456789876543210 :: (~>) Nat Nat+ where+ Let0123456789876543210FSym1KindInference :: forall x0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210FSym1 x0123456789876543210) arg) (Let0123456789876543210FSym2 x0123456789876543210 arg) =>+ Let0123456789876543210FSym1 x0123456789876543210 a0123456789876543210+ type instance Apply (Let0123456789876543210FSym1 x0123456789876543210) a0123456789876543210 = Let0123456789876543210F x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210FSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210FSym0KindInference) ())+ data Let0123456789876543210FSym0 x0123456789876543210+ where+ Let0123456789876543210FSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210FSym0 arg) (Let0123456789876543210FSym1 arg) =>+ Let0123456789876543210FSym0 x0123456789876543210+ type instance Apply Let0123456789876543210FSym0 x0123456789876543210 = Let0123456789876543210FSym1 x0123456789876543210+ type family Let0123456789876543210F x (a :: Nat) :: Nat where+ Let0123456789876543210F x y = Apply SuccSym0 (Let0123456789876543210ZSym2 y x)+ type Let0123456789876543210FSym2 x0123456789876543210 (a0123456789876543210 :: Nat) =+ Let0123456789876543210F x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210FSym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210FSym1KindInference) ())+ data Let0123456789876543210FSym1 x0123456789876543210 :: (~>) Nat Nat+ where+ Let0123456789876543210FSym1KindInference :: forall x0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210FSym1 x0123456789876543210) arg) (Let0123456789876543210FSym2 x0123456789876543210 arg) =>+ Let0123456789876543210FSym1 x0123456789876543210 a0123456789876543210+ type instance Apply (Let0123456789876543210FSym1 x0123456789876543210) a0123456789876543210 = Let0123456789876543210F x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210FSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210FSym0KindInference) ())+ data Let0123456789876543210FSym0 x0123456789876543210+ where+ Let0123456789876543210FSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210FSym0 arg) (Let0123456789876543210FSym1 arg) =>+ Let0123456789876543210FSym0 x0123456789876543210+ type instance Apply Let0123456789876543210FSym0 x0123456789876543210 = Let0123456789876543210FSym1 x0123456789876543210+ type family Let0123456789876543210F x (a :: Nat) :: Nat where+ Let0123456789876543210F x y = Apply SuccSym0 y+ type Let0123456789876543210YSym1 x0123456789876543210 =+ Let0123456789876543210Y x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210YSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210YSym0KindInference) ())+ data Let0123456789876543210YSym0 x0123456789876543210+ where+ Let0123456789876543210YSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210YSym0 arg) (Let0123456789876543210YSym1 arg) =>+ Let0123456789876543210YSym0 x0123456789876543210+ type instance Apply Let0123456789876543210YSym0 x0123456789876543210 = Let0123456789876543210Y x0123456789876543210+ type family Let0123456789876543210Y x :: Nat where+ Let0123456789876543210Y x = Apply SuccSym0 x+ type Let0123456789876543210ZSym0 = Let0123456789876543210Z+ type Let0123456789876543210YSym0 = Let0123456789876543210Y+ type family Let0123456789876543210Z where+ Let0123456789876543210Z = Apply SuccSym0 Let0123456789876543210YSym0+ type family Let0123456789876543210Y where+ Let0123456789876543210Y = Apply SuccSym0 ZeroSym0+ type Let0123456789876543210YSym1 x0123456789876543210 =+ Let0123456789876543210Y x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210YSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210YSym0KindInference) ())+ data Let0123456789876543210YSym0 x0123456789876543210+ where+ Let0123456789876543210YSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210YSym0 arg) (Let0123456789876543210YSym1 arg) =>+ Let0123456789876543210YSym0 x0123456789876543210+ type instance Apply Let0123456789876543210YSym0 x0123456789876543210 = Let0123456789876543210Y x0123456789876543210+ type family Let0123456789876543210Y x :: Nat where+ Let0123456789876543210Y x = Apply SuccSym0 ZeroSym0+ type Foo14Sym1 (a0123456789876543210 :: Nat) =+ Foo14 a0123456789876543210+ instance SuppressUnusedWarnings Foo14Sym0 where+ suppressUnusedWarnings = snd (((,) Foo14Sym0KindInference) ())+ data Foo14Sym0 :: (~>) Nat (Nat, Nat)+ where+ Foo14Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo14Sym0 arg) (Foo14Sym1 arg) =>+ Foo14Sym0 a0123456789876543210+ type instance Apply Foo14Sym0 a0123456789876543210 = Foo14 a0123456789876543210+ type Foo13_Sym1 (a0123456789876543210 :: a0123456789876543210) =+ Foo13_ a0123456789876543210+ instance SuppressUnusedWarnings Foo13_Sym0 where+ suppressUnusedWarnings = snd (((,) Foo13_Sym0KindInference) ())+ data Foo13_Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ Foo13_Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo13_Sym0 arg) (Foo13_Sym1 arg) =>+ Foo13_Sym0 a0123456789876543210+ type instance Apply Foo13_Sym0 a0123456789876543210 = Foo13_ a0123456789876543210+ type Foo13Sym1 (a0123456789876543210 :: a0123456789876543210) =+ Foo13 a0123456789876543210+ instance SuppressUnusedWarnings Foo13Sym0 where+ suppressUnusedWarnings = snd (((,) Foo13Sym0KindInference) ())+ data Foo13Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ Foo13Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo13Sym0 arg) (Foo13Sym1 arg) =>+ Foo13Sym0 a0123456789876543210+ type instance Apply Foo13Sym0 a0123456789876543210 = Foo13 a0123456789876543210+ type Foo12Sym1 (a0123456789876543210 :: Nat) =+ Foo12 a0123456789876543210+ instance SuppressUnusedWarnings Foo12Sym0 where+ suppressUnusedWarnings = snd (((,) Foo12Sym0KindInference) ())+ data Foo12Sym0 :: (~>) Nat Nat+ where+ Foo12Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo12Sym0 arg) (Foo12Sym1 arg) =>+ Foo12Sym0 a0123456789876543210+ type instance Apply Foo12Sym0 a0123456789876543210 = Foo12 a0123456789876543210+ type Foo11Sym1 (a0123456789876543210 :: Nat) =+ Foo11 a0123456789876543210+ instance SuppressUnusedWarnings Foo11Sym0 where+ suppressUnusedWarnings = snd (((,) Foo11Sym0KindInference) ())+ data Foo11Sym0 :: (~>) Nat Nat+ where+ Foo11Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo11Sym0 arg) (Foo11Sym1 arg) =>+ Foo11Sym0 a0123456789876543210+ type instance Apply Foo11Sym0 a0123456789876543210 = Foo11 a0123456789876543210+ type Foo10Sym1 (a0123456789876543210 :: Nat) =+ Foo10 a0123456789876543210+ instance SuppressUnusedWarnings Foo10Sym0 where+ suppressUnusedWarnings = snd (((,) Foo10Sym0KindInference) ())+ data Foo10Sym0 :: (~>) Nat Nat+ where+ Foo10Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo10Sym0 arg) (Foo10Sym1 arg) =>+ Foo10Sym0 a0123456789876543210+ type instance Apply Foo10Sym0 a0123456789876543210 = Foo10 a0123456789876543210+ type Foo9Sym1 (a0123456789876543210 :: Nat) =+ Foo9 a0123456789876543210+ instance SuppressUnusedWarnings Foo9Sym0 where+ suppressUnusedWarnings = snd (((,) Foo9Sym0KindInference) ())+ data Foo9Sym0 :: (~>) Nat Nat+ where+ Foo9Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo9Sym0 arg) (Foo9Sym1 arg) =>+ Foo9Sym0 a0123456789876543210+ type instance Apply Foo9Sym0 a0123456789876543210 = Foo9 a0123456789876543210+ type Foo8Sym1 (a0123456789876543210 :: Nat) =+ Foo8 a0123456789876543210+ instance SuppressUnusedWarnings Foo8Sym0 where+ suppressUnusedWarnings = snd (((,) Foo8Sym0KindInference) ())+ data Foo8Sym0 :: (~>) Nat Nat+ where+ Foo8Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo8Sym0 arg) (Foo8Sym1 arg) =>+ Foo8Sym0 a0123456789876543210+ type instance Apply Foo8Sym0 a0123456789876543210 = Foo8 a0123456789876543210+ type Foo7Sym1 (a0123456789876543210 :: Nat) =+ Foo7 a0123456789876543210+ instance SuppressUnusedWarnings Foo7Sym0 where+ suppressUnusedWarnings = snd (((,) Foo7Sym0KindInference) ())+ data Foo7Sym0 :: (~>) Nat Nat+ where+ Foo7Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo7Sym0 arg) (Foo7Sym1 arg) =>+ Foo7Sym0 a0123456789876543210+ type instance Apply Foo7Sym0 a0123456789876543210 = Foo7 a0123456789876543210+ type Foo6Sym1 (a0123456789876543210 :: Nat) =+ Foo6 a0123456789876543210+ instance SuppressUnusedWarnings Foo6Sym0 where+ suppressUnusedWarnings = snd (((,) Foo6Sym0KindInference) ())+ data Foo6Sym0 :: (~>) Nat Nat+ where+ Foo6Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo6Sym0 arg) (Foo6Sym1 arg) =>+ Foo6Sym0 a0123456789876543210+ type instance Apply Foo6Sym0 a0123456789876543210 = Foo6 a0123456789876543210+ type Foo5Sym1 (a0123456789876543210 :: Nat) =+ Foo5 a0123456789876543210+ instance SuppressUnusedWarnings Foo5Sym0 where+ suppressUnusedWarnings = snd (((,) Foo5Sym0KindInference) ())+ data Foo5Sym0 :: (~>) Nat Nat+ where+ Foo5Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo5Sym0 arg) (Foo5Sym1 arg) =>+ Foo5Sym0 a0123456789876543210+ type instance Apply Foo5Sym0 a0123456789876543210 = Foo5 a0123456789876543210+ type Foo4Sym1 (a0123456789876543210 :: Nat) =+ Foo4 a0123456789876543210+ instance SuppressUnusedWarnings Foo4Sym0 where+ suppressUnusedWarnings = snd (((,) Foo4Sym0KindInference) ())+ data Foo4Sym0 :: (~>) Nat Nat+ where+ Foo4Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo4Sym0 arg) (Foo4Sym1 arg) =>+ Foo4Sym0 a0123456789876543210+ type instance Apply Foo4Sym0 a0123456789876543210 = Foo4 a0123456789876543210+ type Foo3Sym1 (a0123456789876543210 :: Nat) =+ Foo3 a0123456789876543210+ instance SuppressUnusedWarnings Foo3Sym0 where+ suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())+ data Foo3Sym0 :: (~>) Nat Nat+ where+ Foo3Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>+ Foo3Sym0 a0123456789876543210+ type instance Apply Foo3Sym0 a0123456789876543210 = Foo3 a0123456789876543210+ type Foo2Sym0 = Foo2+ type Foo1Sym1 (a0123456789876543210 :: Nat) =+ Foo1 a0123456789876543210+ instance SuppressUnusedWarnings Foo1Sym0 where+ suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())+ data Foo1Sym0 :: (~>) Nat Nat+ where+ Foo1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>+ Foo1Sym0 a0123456789876543210+ type instance Apply Foo1Sym0 a0123456789876543210 = Foo1 a0123456789876543210+ type family Foo14 (a :: Nat) :: (Nat, Nat) where+ Foo14 x = Apply (Apply Tuple2Sym0 (Let0123456789876543210ZSym1 x)) (Let0123456789876543210YSym1 x)+ type family Foo13_ (a :: a) :: a where+ Foo13_ y = y+ type family Foo13 (a :: a) :: a where+ Foo13 x = Apply Foo13_Sym0 (Let0123456789876543210BarSym1 x)+ type family Foo12 (a :: Nat) :: Nat where+ Foo12 x = Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) x) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))+ type family Foo11 (a :: Nat) :: Nat where+ Foo11 x = Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) (Apply SuccSym0 ZeroSym0)) (Let0123456789876543210ZSym1 x)+ type family Foo10 (a :: Nat) :: Nat where+ Foo10 x = Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) (Apply SuccSym0 ZeroSym0)) x+ type family Foo9 (a :: Nat) :: Nat where+ Foo9 x = Apply (Let0123456789876543210ZSym1 x) x+ type family Foo8 (a :: Nat) :: Nat where+ Foo8 x = Let0123456789876543210ZSym1 x+ type family Foo7 (a :: Nat) :: Nat where+ Foo7 x = Let0123456789876543210XSym1 x+ type family Foo6 (a :: Nat) :: Nat where+ Foo6 x = Let0123456789876543210ZSym1 x+ type family Foo5 (a :: Nat) :: Nat where+ Foo5 x = Apply (Let0123456789876543210FSym1 x) x+ type family Foo4 (a :: Nat) :: Nat where+ Foo4 x = Apply (Let0123456789876543210FSym1 x) x+ type family Foo3 (a :: Nat) :: Nat where+ Foo3 x = Let0123456789876543210YSym1 x+ type family Foo2 :: Nat where+ Foo2 = Let0123456789876543210ZSym0+ type family Foo1 (a :: Nat) :: Nat where+ Foo1 x = Let0123456789876543210YSym1 x+ sFoo14 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo14Sym0 t :: (Nat, Nat))+ sFoo13_ ::+ forall a (t :: a). Sing t -> Sing (Apply Foo13_Sym0 t :: a)+ sFoo13 ::+ forall a (t :: a). Sing t -> Sing (Apply Foo13Sym0 t :: a)+ sFoo12 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo12Sym0 t :: Nat)+ sFoo11 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo11Sym0 t :: Nat)+ sFoo10 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo10Sym0 t :: Nat)+ sFoo9 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo9Sym0 t :: Nat)+ sFoo8 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo8Sym0 t :: Nat)+ sFoo7 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo7Sym0 t :: Nat)+ sFoo6 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo6Sym0 t :: Nat)+ sFoo5 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo5Sym0 t :: Nat)+ sFoo4 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo4Sym0 t :: Nat)+ sFoo3 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo3Sym0 t :: Nat)+ sFoo2 :: Sing (Foo2Sym0 :: Nat)+ sFoo1 ::+ forall (t :: Nat). Sing t -> Sing (Apply Foo1Sym0 t :: Nat)+ sFoo14 (sX :: Sing x)+ = let+ sZ :: Sing (Let0123456789876543210ZSym1 x)+ sY :: Sing (Let0123456789876543210YSym1 x)+ sX_0123456789876543210 ::+ Sing (Let0123456789876543210X_0123456789876543210Sym1 x)+ sZ+ = (id+ @(Sing (Case_0123456789876543210 x (Let0123456789876543210X_0123456789876543210Sym1 x))))+ (case sX_0123456789876543210 of {+ STuple2 _ (sY_0123456789876543210 :: Sing y_0123456789876543210)+ -> sY_0123456789876543210 })+ sY+ = (id+ @(Sing (Case_0123456789876543210 x (Let0123456789876543210X_0123456789876543210Sym1 x))))+ (case sX_0123456789876543210 of {+ STuple2 (sY_0123456789876543210 :: Sing y_0123456789876543210) _+ -> sY_0123456789876543210 })+ sX_0123456789876543210+ = (applySing+ ((applySing ((singFun2 @Tuple2Sym0) STuple2))+ ((applySing ((singFun1 @SuccSym0) SSucc)) sX)))+ sX+ in (applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sZ)) sY+ sFoo13_ (sY :: Sing y) = sY+ sFoo13 (sX :: Sing x)+ = let+ sBar :: Sing (Let0123456789876543210BarSym1 x :: a)+ sBar = sX+ in (applySing ((singFun1 @Foo13_Sym0) sFoo13_)) sBar+ sFoo12 (sX :: Sing x)+ = let+ (%+) ::+ forall (t :: Nat) (t :: Nat).+ Sing t+ -> Sing t+ -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)+ (%+) SZero (sM :: Sing m) = sM+ (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)+ = (applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing+ ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))+ sN))+ sX)+ in+ (applySing+ ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))+ sX))+ ((applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))+ sFoo11 (sX :: Sing x)+ = let+ sZ :: Sing (Let0123456789876543210ZSym1 x :: Nat)+ (%+) ::+ forall (t :: Nat) (t :: Nat).+ Sing t+ -> Sing t+ -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)+ sZ = sX+ (%+) SZero (sM :: Sing m) = sM+ (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)+ = (applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing+ ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))+ sN))+ sM)+ in+ (applySing+ ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ sZ+ sFoo10 (sX :: Sing x)+ = let+ (%+) ::+ forall (t :: Nat) (t :: Nat).+ Sing t+ -> Sing t+ -> Sing (Apply (Apply ((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x) t) t :: Nat)+ (%+) SZero (sM :: Sing m) = sM+ (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)+ = (applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing+ ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))+ sN))+ sM)+ in+ (applySing+ ((applySing ((singFun2 @((<<<%%%%%%%%%%%%%%%%%%%%@#@$$) x)) (%+)))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ sX+ sFoo9 (sX :: Sing x)+ = let+ sZ ::+ forall (t :: Nat).+ Sing t -> Sing (Apply (Let0123456789876543210ZSym1 x) t :: Nat)+ sZ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((singFun1+ @(Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) x))+ (\ sX -> case sX of { (_ :: Sing x) -> sX })))+ sA_0123456789876543210+ in (applySing ((singFun1 @(Let0123456789876543210ZSym1 x)) sZ)) sX+ sFoo8 (sX :: Sing x)+ = let+ sZ :: Sing (Let0123456789876543210ZSym1 x :: Nat)+ sZ+ = (applySing+ ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))+ (\ sX -> case sX of { (_ :: Sing x) -> sX })))+ SZero+ in sZ+ sFoo7 (sX :: Sing x)+ = let+ sX :: Sing (Let0123456789876543210XSym1 x :: Nat)+ sX = SZero+ in sX+ sFoo6 (sX :: Sing x)+ = let+ sF ::+ forall (t :: Nat).+ Sing t -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)+ sF (sY :: Sing y) = (applySing ((singFun1 @SuccSym0) SSucc)) sY in+ let+ sZ :: Sing (Let0123456789876543210ZSym1 x :: Nat)+ sZ+ = (applySing ((singFun1 @(Let0123456789876543210FSym1 x)) sF)) sX+ in sZ+ sFoo5 (sX :: Sing x)+ = let+ sF ::+ forall (t :: Nat).+ Sing t -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)+ sF (sY :: Sing y)+ = let+ sZ :: Sing (Let0123456789876543210ZSym2 y x :: Nat)+ sZ = (applySing ((singFun1 @SuccSym0) SSucc)) sY+ in (applySing ((singFun1 @SuccSym0) SSucc)) sZ+ in (applySing ((singFun1 @(Let0123456789876543210FSym1 x)) sF)) sX+ sFoo4 (sX :: Sing x)+ = let+ sF ::+ forall (t :: Nat).+ Sing t -> Sing (Apply (Let0123456789876543210FSym1 x) t :: Nat)+ sF (sY :: Sing y) = (applySing ((singFun1 @SuccSym0) SSucc)) sY+ in (applySing ((singFun1 @(Let0123456789876543210FSym1 x)) sF)) sX+ sFoo3 (sX :: Sing x)+ = let+ sY :: Sing (Let0123456789876543210YSym1 x :: Nat)+ sY = (applySing ((singFun1 @SuccSym0) SSucc)) sX+ in sY+ sFoo2+ = let+ sZ :: Sing Let0123456789876543210ZSym0+ sY :: Sing Let0123456789876543210YSym0+ sZ = (applySing ((singFun1 @SuccSym0) SSucc)) sY+ sY = (applySing ((singFun1 @SuccSym0) SSucc)) SZero+ in sZ+ sFoo1 (sX :: Sing x)+ = let+ sY :: Sing (Let0123456789876543210YSym1 x :: Nat)+ sY = (applySing ((singFun1 @SuccSym0) SSucc)) SZero+ in sY+ instance SingI (Foo14Sym0 :: (~>) Nat (Nat, Nat)) where+ sing = (singFun1 @Foo14Sym0) sFoo14+ instance SingI (Foo13_Sym0 :: (~>) a a) where+ sing = (singFun1 @Foo13_Sym0) sFoo13_+ instance SingI (Foo13Sym0 :: (~>) a a) where+ sing = (singFun1 @Foo13Sym0) sFoo13+ instance SingI (Foo12Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo12Sym0) sFoo12+ instance SingI (Foo11Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo11Sym0) sFoo11+ instance SingI (Foo10Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo10Sym0) sFoo10+ instance SingI (Foo9Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo9Sym0) sFoo9+ instance SingI (Foo8Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo8Sym0) sFoo8+ instance SingI (Foo7Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo7Sym0) sFoo7+ instance SingI (Foo6Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo6Sym0) sFoo6+ instance SingI (Foo5Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo5Sym0) sFoo5+ instance SingI (Foo4Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo4Sym0) sFoo4+ instance SingI (Foo3Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo3Sym0) sFoo3+ instance SingI (Foo1Sym0 :: (~>) Nat Nat) where+ sing = (singFun1 @Foo1Sym0) sFoo1
− tests/compile-and-dump/Singletons/Maybe.ghc86.template
@@ -1,140 +0,0 @@-Singletons/Maybe.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Maybe a- = Nothing | Just a- deriving (Eq, Show) |]- ======>- data Maybe a- = Nothing | Just a- deriving (Eq, Show)- type NothingSym0 = Nothing- type JustSym1 (t0123456789876543210 :: a0123456789876543210) =- Just t0123456789876543210- instance SuppressUnusedWarnings JustSym0 where- suppressUnusedWarnings = snd (((,) JustSym0KindInference) ())- data JustSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 (Maybe a0123456789876543210)- where- JustSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply JustSym0 arg) (JustSym1 arg) =>- JustSym0 t0123456789876543210- type instance Apply JustSym0 t0123456789876543210 = Just t0123456789876543210- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Maybe a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where- ShowsPrec_0123456789876543210 _ Nothing a_0123456789876543210 = Apply (Apply ShowStringSym0 "Nothing") a_0123456789876543210- ShowsPrec_0123456789876543210 p_0123456789876543210 (Just arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (Data.Singletons.Prelude.Num.FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Just ")) (Apply (Apply ShowsPrecSym0 (Data.Singletons.Prelude.Num.FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Maybe a0123456789876543210) (a0123456789876543210 :: GHC.Types.Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Maybe a0123456789876543210) :: (~>) GHC.Types.Symbol GHC.Types.Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210.- (~>) (Maybe a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) GHC.Types.Nat ((~>) (Maybe a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow (Maybe a) where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family Equals_0123456789876543210 (a :: Maybe a) (b :: Maybe a) :: Bool where- Equals_0123456789876543210 Nothing Nothing = TrueSym0- Equals_0123456789876543210 (Just a) (Just b) = (==) a b- Equals_0123456789876543210 (_ :: Maybe a) (_ :: Maybe a) = FalseSym0- instance PEq (Maybe a) where- type (==) a b = Equals_0123456789876543210 a b- data instance Sing :: Maybe a -> GHC.Types.Type- where- SNothing :: Sing Nothing- SJust :: forall a (n :: a). (Sing (n :: a)) -> Sing (Just n)- type SMaybe = (Sing :: Maybe a -> GHC.Types.Type)- instance SingKind a => SingKind (Maybe a) where- type Demote (Maybe a) = Maybe (Demote a)- fromSing SNothing = Nothing- fromSing (SJust b) = Just (fromSing b)- toSing Nothing = SomeSing SNothing- toSing (Just (b :: Demote a))- = case toSing b :: SomeSing a of {- SomeSing c -> SomeSing (SJust c) }- instance SShow a => SShow (Maybe a) where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat)- (t2 :: Maybe a)- (t3 :: GHC.Types.Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- _- SNothing- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Nothing")))- sA_0123456789876543210- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SJust (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Just "))))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))- sA_0123456789876543210- instance SEq a => SEq (Maybe a) where- (%==) SNothing SNothing = STrue- (%==) SNothing (SJust _) = SFalse- (%==) (SJust _) SNothing = SFalse- (%==) (SJust a) (SJust b) = ((%==) a) b- instance SDecide a => SDecide (Maybe a) where- (%~) SNothing SNothing = Proved Refl- (%~) SNothing (SJust _) = Disproved (\ x -> case x of)- (%~) (SJust _) SNothing = Disproved (\ x -> case x of)- (%~) (SJust a) (SJust b)- = case ((%~) a) b of- Proved Refl -> Proved Refl- Disproved contra- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- deriving instance Data.Singletons.ShowSing.ShowSing a =>- Show (Sing (z :: Maybe a))- instance SingI Nothing where- sing = SNothing- instance SingI n => SingI (Just (n :: a)) where- sing = SJust sing- instance SingI (JustSym0 :: (~>) a (Maybe a)) where- sing = (singFun1 @JustSym0) SJust- instance SingI (TyCon1 Just :: (~>) a (Maybe a)) where- sing = (singFun1 @(TyCon1 Just)) SJust
+ tests/compile-and-dump/Singletons/Maybe.ghc88.template view
@@ -0,0 +1,157 @@+Singletons/Maybe.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Maybe a+ = Nothing | Just a+ deriving (Eq, Show) |]+ ======>+ data Maybe a+ = Nothing | Just a+ deriving (Eq, Show)+ type NothingSym0 = Nothing+ type JustSym1 (t0123456789876543210 :: a0123456789876543210) =+ Just t0123456789876543210+ instance SuppressUnusedWarnings JustSym0 where+ suppressUnusedWarnings = snd (((,) JustSym0KindInference) ())+ data JustSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 (Maybe a0123456789876543210)+ where+ JustSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply JustSym0 arg) (JustSym1 arg) =>+ JustSym0 t0123456789876543210+ type instance Apply JustSym0 t0123456789876543210 = Just t0123456789876543210+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Maybe a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+ ShowsPrec_0123456789876543210 _ Nothing a_0123456789876543210 = Apply (Apply ShowStringSym0 "Nothing") a_0123456789876543210+ ShowsPrec_0123456789876543210 p_0123456789876543210 (Just arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (Data.Singletons.Prelude.Num.FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Just ")) (Apply (Apply ShowsPrecSym0 (Data.Singletons.Prelude.Num.FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Maybe a0123456789876543210) (a0123456789876543210 :: GHC.Types.Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Maybe a0123456789876543210) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210.+ (~>) (Maybe a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) GHC.Types.Nat ((~>) (Maybe a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow (Maybe a) where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family Equals_0123456789876543210 (a :: Maybe a) (b :: Maybe a) :: Bool where+ Equals_0123456789876543210 Nothing Nothing = TrueSym0+ Equals_0123456789876543210 (Just a) (Just b) = (==) a b+ Equals_0123456789876543210 (_ :: Maybe a) (_ :: Maybe a) = FalseSym0+ instance PEq (Maybe a) where+ type (==) a b = Equals_0123456789876543210 a b+ data SMaybe :: forall a. Maybe a -> GHC.Types.Type+ where+ SNothing :: SMaybe Nothing+ SJust :: forall a (n :: a). (Sing (n :: a)) -> SMaybe (Just n)+ type instance Sing @(Maybe a) = SMaybe+ instance SingKind a => SingKind (Maybe a) where+ type Demote (Maybe a) = Maybe (Demote a)+ fromSing SNothing = Nothing+ fromSing (SJust b) = Just (fromSing b)+ toSing Nothing = SomeSing SNothing+ toSing (Just (b :: Demote a))+ = case toSing b :: SomeSing a of {+ SomeSing c -> SomeSing (SJust c) }+ instance SShow a => SShow (Maybe a) where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat)+ (t2 :: Maybe a)+ (t3 :: GHC.Types.Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Maybe a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ _+ SNothing+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Nothing")))+ sA_0123456789876543210+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SJust (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Just "))))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))+ sA_0123456789876543210+ instance SEq a => SEq (Maybe a) where+ (%==) SNothing SNothing = STrue+ (%==) SNothing (SJust _) = SFalse+ (%==) (SJust _) SNothing = SFalse+ (%==) (SJust a) (SJust b) = ((%==) a) b+ instance SDecide a => SDecide (Maybe a) where+ (%~) SNothing SNothing = Proved Refl+ (%~) SNothing (SJust _) = Disproved (\ x -> case x of)+ (%~) (SJust _) SNothing = Disproved (\ x -> case x of)+ (%~) (SJust a) (SJust b)+ = case ((%~) a) b of+ Proved Refl -> Proved Refl+ Disproved contra+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ instance SDecide a =>+ Data.Type.Equality.TestEquality (SMaybe :: Maybe a+ -> GHC.Types.Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance SDecide a =>+ Data.Type.Coercion.TestCoercion (SMaybe :: Maybe a+ -> GHC.Types.Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance Data.Singletons.ShowSing.ShowSing a =>+ Show (SMaybe (z :: Maybe a)) where+ showsPrec _ SNothing = showString "SNothing"+ showsPrec+ p_0123456789876543210+ (SJust (arg_0123456789876543210 :: Sing argTy_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 10))+ (((.) (showString "SJust "))+ ((showsPrec 11) arg_0123456789876543210)) ::+ Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210 =>+ ShowS+ instance SingI Nothing where+ sing = SNothing+ instance SingI n => SingI (Just (n :: a)) where+ sing = SJust sing+ instance SingI (JustSym0 :: (~>) a (Maybe a)) where+ sing = (singFun1 @JustSym0) SJust
− tests/compile-and-dump/Singletons/Nat.ghc86.template
@@ -1,266 +0,0 @@-Singletons/Nat.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| plus :: Nat -> Nat -> Nat- plus Zero m = m- plus (Succ n) m = Succ (plus n m)- pred :: Nat -> Nat- pred Zero = Zero- pred (Succ n) = n- - data Nat- where- Zero :: Nat- Succ :: Nat -> Nat- deriving (Eq, Show, Read, Ord) |]- ======>- data Nat- where- Zero :: Nat- Succ :: Nat -> Nat- deriving (Eq, Show, Read, Ord)- plus :: Nat -> Nat -> Nat- plus Zero m = m- plus (Succ n) m = Succ ((plus n) m)- pred :: Nat -> Nat- pred Zero = Zero- pred (Succ n) = n- type ZeroSym0 = Zero- type SuccSym1 (t0123456789876543210 :: Nat) =- Succ t0123456789876543210- instance SuppressUnusedWarnings SuccSym0 where- suppressUnusedWarnings = snd (((,) SuccSym0KindInference) ())- data SuccSym0 :: (~>) Nat Nat- where- SuccSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>- SuccSym0 t0123456789876543210- type instance Apply SuccSym0 t0123456789876543210 = Succ t0123456789876543210- type PredSym1 (a0123456789876543210 :: Nat) =- Pred a0123456789876543210- instance SuppressUnusedWarnings PredSym0 where- suppressUnusedWarnings = snd (((,) PredSym0KindInference) ())- data PredSym0 :: (~>) Nat Nat- where- PredSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply PredSym0 arg) (PredSym1 arg) =>- PredSym0 a0123456789876543210- type instance Apply PredSym0 a0123456789876543210 = Pred a0123456789876543210- type PlusSym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- Plus a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (PlusSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) PlusSym1KindInference) ())- data PlusSym1 (a0123456789876543210 :: Nat) :: (~>) Nat Nat- where- PlusSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (PlusSym1 a0123456789876543210) arg) (PlusSym2 a0123456789876543210 arg) =>- PlusSym1 a0123456789876543210 a0123456789876543210- type instance Apply (PlusSym1 a0123456789876543210) a0123456789876543210 = Plus a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings PlusSym0 where- suppressUnusedWarnings = snd (((,) PlusSym0KindInference) ())- data PlusSym0 :: (~>) Nat ((~>) Nat Nat)- where- PlusSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply PlusSym0 arg) (PlusSym1 arg) =>- PlusSym0 a0123456789876543210- type instance Apply PlusSym0 a0123456789876543210 = PlusSym1 a0123456789876543210- type family Pred (a :: Nat) :: Nat where- Pred Zero = ZeroSym0- Pred (Succ n) = n- type family Plus (a :: Nat) (a :: Nat) :: Nat where- Plus Zero m = m- Plus (Succ n) m = Apply SuccSym0 (Apply (Apply PlusSym0 n) m)- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Nat) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where- ShowsPrec_0123456789876543210 _ Zero a_0123456789876543210 = Apply (Apply ShowStringSym0 "Zero") a_0123456789876543210- ShowsPrec_0123456789876543210 p_0123456789876543210 (Succ arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (Data.Singletons.Prelude.Num.FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Succ ")) (Apply (Apply ShowsPrecSym0 (Data.Singletons.Prelude.Num.FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Nat) (a0123456789876543210 :: GHC.Types.Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Nat) :: (~>) GHC.Types.Symbol GHC.Types.Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow Nat where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family Compare_0123456789876543210 (a :: Nat) (a :: Nat) :: Ordering where- Compare_0123456789876543210 Zero Zero = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 (Succ a_0123456789876543210) (Succ b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])- Compare_0123456789876543210 Zero (Succ _) = LTSym0- Compare_0123456789876543210 (Succ _) Zero = GTSym0- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Nat Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd Nat where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family Equals_0123456789876543210 (a :: Nat) (b :: Nat) :: Bool where- Equals_0123456789876543210 Zero Zero = TrueSym0- Equals_0123456789876543210 (Succ a) (Succ b) = (==) a b- Equals_0123456789876543210 (_ :: Nat) (_ :: Nat) = FalseSym0- instance PEq Nat where- type (==) a b = Equals_0123456789876543210 a b- sPred ::- forall (t :: Nat). Sing t -> Sing (Apply PredSym0 t :: Nat)- sPlus ::- forall (t :: Nat) (t :: Nat).- Sing t -> Sing t -> Sing (Apply (Apply PlusSym0 t) t :: Nat)- sPred SZero = SZero- sPred (SSucc (sN :: Sing n)) = sN- sPlus SZero (sM :: Sing m) = sM- sPlus (SSucc (sN :: Sing n)) (sM :: Sing m)- = (applySing ((singFun1 @SuccSym0) SSucc))- ((applySing ((applySing ((singFun2 @PlusSym0) sPlus)) sN)) sM)- instance SingI (PredSym0 :: (~>) Nat Nat) where- sing = (singFun1 @PredSym0) sPred- instance SingI (PlusSym0 :: (~>) Nat ((~>) Nat Nat)) where- sing = (singFun2 @PlusSym0) sPlus- instance SingI d =>- SingI (PlusSym1 (d :: Nat) :: (~>) Nat Nat) where- sing = (singFun1 @(PlusSym1 (d :: Nat))) (sPlus (sing @d))- data instance Sing :: Nat -> GHC.Types.Type- where- SZero :: Sing Zero- SSucc :: forall (n :: Nat). (Sing (n :: Nat)) -> Sing (Succ n)- type SNat = (Sing :: Nat -> GHC.Types.Type)- instance SingKind Nat where- type Demote Nat = Nat- fromSing SZero = Zero- fromSing (SSucc b) = Succ (fromSing b)- toSing Zero = SomeSing SZero- toSing (Succ (b :: Demote Nat))- = case toSing b :: SomeSing Nat of {- SomeSing c -> SomeSing (SSucc c) }- instance SShow Nat => SShow Nat where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: Nat) (t3 :: GHC.Types.Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- _- SZero- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Zero")))- sA_0123456789876543210- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SSucc (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Succ "))))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))- sA_0123456789876543210- instance SOrd Nat => SOrd Nat where- sCompare ::- forall (t1 :: Nat) (t2 :: Nat).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)- -> GHC.Types.Type) t1) t2)- sCompare SZero SZero- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- Data.Singletons.Prelude.Instances.SNil- sCompare- (SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing- ((singFun2 @(:@#@$))- Data.Singletons.Prelude.Instances.SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- Data.Singletons.Prelude.Instances.SNil)- sCompare SZero (SSucc _) = SLT- sCompare (SSucc _) SZero = SGT- instance SEq Nat => SEq Nat where- (%==) SZero SZero = STrue- (%==) SZero (SSucc _) = SFalse- (%==) (SSucc _) SZero = SFalse- (%==) (SSucc a) (SSucc b) = ((%==) a) b- instance SDecide Nat => SDecide Nat where- (%~) SZero SZero = Proved Refl- (%~) SZero (SSucc _) = Disproved (\ x -> case x of)- (%~) (SSucc _) SZero = Disproved (\ x -> case x of)- (%~) (SSucc a) (SSucc b)- = case ((%~) a) b of- Proved Refl -> Proved Refl- Disproved contra- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- deriving instance Data.Singletons.ShowSing.ShowSing Nat =>- Show (Sing (z :: Nat))- instance SingI Zero where- sing = SZero- instance SingI n => SingI (Succ (n :: Nat)) where- sing = SSucc sing- instance SingI (SuccSym0 :: (~>) Nat Nat) where- sing = (singFun1 @SuccSym0) SSucc- instance SingI (TyCon1 Succ :: (~>) Nat Nat) where- sing = (singFun1 @(TyCon1 Succ)) SSucc
+ tests/compile-and-dump/Singletons/Nat.ghc88.template view
@@ -0,0 +1,283 @@+Singletons/Nat.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| plus :: Nat -> Nat -> Nat+ plus Zero m = m+ plus (Succ n) m = Succ (plus n m)+ pred :: Nat -> Nat+ pred Zero = Zero+ pred (Succ n) = n+ + data Nat+ where+ Zero :: Nat+ Succ :: Nat -> Nat+ deriving (Eq, Show, Read, Ord) |]+ ======>+ data Nat+ where+ Zero :: Nat+ Succ :: Nat -> Nat+ deriving (Eq, Show, Read, Ord)+ plus :: Nat -> Nat -> Nat+ plus Zero m = m+ plus (Succ n) m = Succ ((plus n) m)+ pred :: Nat -> Nat+ pred Zero = Zero+ pred (Succ n) = n+ type ZeroSym0 = Zero+ type SuccSym1 (t0123456789876543210 :: Nat) =+ Succ t0123456789876543210+ instance SuppressUnusedWarnings SuccSym0 where+ suppressUnusedWarnings = snd (((,) SuccSym0KindInference) ())+ data SuccSym0 :: (~>) Nat Nat+ where+ SuccSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>+ SuccSym0 t0123456789876543210+ type instance Apply SuccSym0 t0123456789876543210 = Succ t0123456789876543210+ type PredSym1 (a0123456789876543210 :: Nat) =+ Pred a0123456789876543210+ instance SuppressUnusedWarnings PredSym0 where+ suppressUnusedWarnings = snd (((,) PredSym0KindInference) ())+ data PredSym0 :: (~>) Nat Nat+ where+ PredSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply PredSym0 arg) (PredSym1 arg) =>+ PredSym0 a0123456789876543210+ type instance Apply PredSym0 a0123456789876543210 = Pred a0123456789876543210+ type PlusSym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ Plus a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (PlusSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) PlusSym1KindInference) ())+ data PlusSym1 (a0123456789876543210 :: Nat) :: (~>) Nat Nat+ where+ PlusSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (PlusSym1 a0123456789876543210) arg) (PlusSym2 a0123456789876543210 arg) =>+ PlusSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (PlusSym1 a0123456789876543210) a0123456789876543210 = Plus a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings PlusSym0 where+ suppressUnusedWarnings = snd (((,) PlusSym0KindInference) ())+ data PlusSym0 :: (~>) Nat ((~>) Nat Nat)+ where+ PlusSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply PlusSym0 arg) (PlusSym1 arg) =>+ PlusSym0 a0123456789876543210+ type instance Apply PlusSym0 a0123456789876543210 = PlusSym1 a0123456789876543210+ type family Pred (a :: Nat) :: Nat where+ Pred Zero = ZeroSym0+ Pred (Succ n) = n+ type family Plus (a :: Nat) (a :: Nat) :: Nat where+ Plus Zero m = m+ Plus (Succ n) m = Apply SuccSym0 (Apply (Apply PlusSym0 n) m)+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Nat) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+ ShowsPrec_0123456789876543210 _ Zero a_0123456789876543210 = Apply (Apply ShowStringSym0 "Zero") a_0123456789876543210+ ShowsPrec_0123456789876543210 p_0123456789876543210 (Succ arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (Data.Singletons.Prelude.Num.FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Succ ")) (Apply (Apply ShowsPrecSym0 (Data.Singletons.Prelude.Num.FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Nat) (a0123456789876543210 :: GHC.Types.Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Nat) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow Nat where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family Compare_0123456789876543210 (a :: Nat) (a :: Nat) :: Ordering where+ Compare_0123456789876543210 Zero Zero = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 (Succ a_0123456789876543210) (Succ b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])+ Compare_0123456789876543210 Zero (Succ _) = LTSym0+ Compare_0123456789876543210 (Succ _) Zero = GTSym0+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Nat Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd Nat where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family Equals_0123456789876543210 (a :: Nat) (b :: Nat) :: Bool where+ Equals_0123456789876543210 Zero Zero = TrueSym0+ Equals_0123456789876543210 (Succ a) (Succ b) = (==) a b+ Equals_0123456789876543210 (_ :: Nat) (_ :: Nat) = FalseSym0+ instance PEq Nat where+ type (==) a b = Equals_0123456789876543210 a b+ sPred ::+ forall (t :: Nat). Sing t -> Sing (Apply PredSym0 t :: Nat)+ sPlus ::+ forall (t :: Nat) (t :: Nat).+ Sing t -> Sing t -> Sing (Apply (Apply PlusSym0 t) t :: Nat)+ sPred SZero = SZero+ sPred (SSucc (sN :: Sing n)) = sN+ sPlus SZero (sM :: Sing m) = sM+ sPlus (SSucc (sN :: Sing n)) (sM :: Sing m)+ = (applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing ((applySing ((singFun2 @PlusSym0) sPlus)) sN)) sM)+ instance SingI (PredSym0 :: (~>) Nat Nat) where+ sing = (singFun1 @PredSym0) sPred+ instance SingI (PlusSym0 :: (~>) Nat ((~>) Nat Nat)) where+ sing = (singFun2 @PlusSym0) sPlus+ instance SingI d =>+ SingI (PlusSym1 (d :: Nat) :: (~>) Nat Nat) where+ sing = (singFun1 @(PlusSym1 (d :: Nat))) (sPlus (sing @d))+ data SNat :: Nat -> GHC.Types.Type+ where+ SZero :: SNat Zero+ SSucc :: forall (n :: Nat). (Sing (n :: Nat)) -> SNat (Succ n)+ type instance Sing @Nat = SNat+ instance SingKind Nat where+ type Demote Nat = Nat+ fromSing SZero = Zero+ fromSing (SSucc b) = Succ (fromSing b)+ toSing Zero = SomeSing SZero+ toSing (Succ (b :: Demote Nat))+ = case toSing b :: SomeSing Nat of {+ SomeSing c -> SomeSing (SSucc c) }+ instance SShow Nat => SShow Nat where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: Nat) (t3 :: GHC.Types.Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Nat ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ _+ SZero+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Zero")))+ sA_0123456789876543210+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SSucc (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Succ "))))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))+ sA_0123456789876543210+ instance SOrd Nat => SOrd Nat where+ sCompare ::+ forall (t1 :: Nat) (t2 :: Nat).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)+ -> GHC.Types.Type) t1) t2)+ sCompare SZero SZero+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ Data.Singletons.Prelude.Instances.SNil+ sCompare+ (SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing+ ((singFun2 @(:@#@$))+ Data.Singletons.Prelude.Instances.SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ Data.Singletons.Prelude.Instances.SNil)+ sCompare SZero (SSucc _) = SLT+ sCompare (SSucc _) SZero = SGT+ instance SEq Nat => SEq Nat where+ (%==) SZero SZero = STrue+ (%==) SZero (SSucc _) = SFalse+ (%==) (SSucc _) SZero = SFalse+ (%==) (SSucc a) (SSucc b) = ((%==) a) b+ instance SDecide Nat => SDecide Nat where+ (%~) SZero SZero = Proved Refl+ (%~) SZero (SSucc _) = Disproved (\ x -> case x of)+ (%~) (SSucc _) SZero = Disproved (\ x -> case x of)+ (%~) (SSucc a) (SSucc b)+ = case ((%~) a) b of+ Proved Refl -> Proved Refl+ Disproved contra+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ instance SDecide Nat =>+ Data.Type.Equality.TestEquality (SNat :: Nat+ -> GHC.Types.Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance SDecide Nat =>+ Data.Type.Coercion.TestCoercion (SNat :: Nat+ -> GHC.Types.Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance Data.Singletons.ShowSing.ShowSing Nat =>+ Show (SNat (z :: Nat)) where+ showsPrec _ SZero = showString "SZero"+ showsPrec+ p_0123456789876543210+ (SSucc (arg_0123456789876543210 :: Sing argTy_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 10))+ (((.) (showString "SSucc "))+ ((showsPrec 11) arg_0123456789876543210)) ::+ Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210 =>+ ShowS+ instance SingI Zero where+ sing = SZero+ instance SingI n => SingI (Succ (n :: Nat)) where+ sing = SSucc sing+ instance SingI (SuccSym0 :: (~>) Nat Nat) where+ sing = (singFun1 @SuccSym0) SSucc
− tests/compile-and-dump/Singletons/NatSymbolReflexive.ghc86.template
+ tests/compile-and-dump/Singletons/NatSymbolReflexive.ghc88.template view
− tests/compile-and-dump/Singletons/Operators.ghc86.template
@@ -1,128 +0,0 @@-Singletons/Operators.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| child :: Foo -> Foo- child FLeaf = FLeaf- child (a :+: _) = a- (+) :: Nat -> Nat -> Nat- Zero + m = m- (Succ n) + m = Succ (n + m)- - data Foo- where- FLeaf :: Foo- (:+:) :: Foo -> Foo -> Foo |]- ======>- data Foo- where- FLeaf :: Foo- (:+:) :: Foo -> Foo -> Foo- child :: Foo -> Foo- child FLeaf = FLeaf- child (a :+: _) = a- (+) :: Nat -> Nat -> Nat- (+) Zero m = m- (+) (Succ n) m = Succ (n + m)- type FLeafSym0 = FLeaf- type (:+:@#@$$$) (t0123456789876543210 :: Foo) (t0123456789876543210 :: Foo) =- (:+:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ((:+:@#@$$) t0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::+:@#@$$###)) ())- data (:+:@#@$$) (t0123456789876543210 :: Foo) :: (~>) Foo Foo- where- (::+:@#@$$###) :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply ((:+:@#@$$) t0123456789876543210) arg) ((:+:@#@$$$) t0123456789876543210 arg) =>- (:+:@#@$$) t0123456789876543210 t0123456789876543210- type instance Apply ((:+:@#@$$) t0123456789876543210) t0123456789876543210 = (:+:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (:+:@#@$) where- suppressUnusedWarnings = snd (((,) (::+:@#@$###)) ())- data (:+:@#@$) :: (~>) Foo ((~>) Foo Foo)- where- (::+:@#@$###) :: forall t0123456789876543210- arg. SameKind (Apply (:+:@#@$) arg) ((:+:@#@$$) arg) =>- (:+:@#@$) t0123456789876543210- type instance Apply (:+:@#@$) t0123456789876543210 = (:+:@#@$$) t0123456789876543210- type (+@#@$$$) (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- (+) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((+@#@$$) a0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:+@#@$$###)) ())- data (+@#@$$) (a0123456789876543210 :: Nat) :: (~>) Nat Nat- where- (:+@#@$$###) :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((+@#@$$) a0123456789876543210) arg) ((+@#@$$$) a0123456789876543210 arg) =>- (+@#@$$) a0123456789876543210 a0123456789876543210- type instance Apply ((+@#@$$) a0123456789876543210) a0123456789876543210 = (+) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (+@#@$) where- suppressUnusedWarnings = snd (((,) (:+@#@$###)) ())- data (+@#@$) :: (~>) Nat ((~>) Nat Nat)- where- (:+@#@$###) :: forall a0123456789876543210- arg. SameKind (Apply (+@#@$) arg) ((+@#@$$) arg) =>- (+@#@$) a0123456789876543210- type instance Apply (+@#@$) a0123456789876543210 = (+@#@$$) a0123456789876543210- type ChildSym1 (a0123456789876543210 :: Foo) =- Child a0123456789876543210- instance SuppressUnusedWarnings ChildSym0 where- suppressUnusedWarnings = snd (((,) ChildSym0KindInference) ())- data ChildSym0 :: (~>) Foo Foo- where- ChildSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ChildSym0 arg) (ChildSym1 arg) =>- ChildSym0 a0123456789876543210- type instance Apply ChildSym0 a0123456789876543210 = Child a0123456789876543210- type family (+) (a :: Nat) (a :: Nat) :: Nat where- (+) 'Zero m = m- (+) ( 'Succ n) m = Apply SuccSym0 (Apply (Apply (+@#@$) n) m)- type family Child (a :: Foo) :: Foo where- Child FLeaf = FLeafSym0- Child ((:+:) a _) = a- (%+) ::- forall (t :: Nat) (t :: Nat).- Sing t -> Sing t -> Sing (Apply (Apply (+@#@$) t) t :: Nat)- sChild ::- forall (t :: Foo). Sing t -> Sing (Apply ChildSym0 t :: Foo)- (%+) SZero (sM :: Sing m) = sM- (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)- = (applySing ((singFun1 @SuccSym0) SSucc))- ((applySing ((applySing ((singFun2 @(+@#@$)) (%+))) sN)) sM)- sChild SFLeaf = SFLeaf- sChild ((:%+:) (sA :: Sing a) _) = sA- instance SingI ((+@#@$) :: (~>) Nat ((~>) Nat Nat)) where- sing = (singFun2 @(+@#@$)) (%+)- instance SingI d =>- SingI ((+@#@$$) (d :: Nat) :: (~>) Nat Nat) where- sing = (singFun1 @((+@#@$$) (d :: Nat))) ((%+) (sing @d))- instance SingI (ChildSym0 :: (~>) Foo Foo) where- sing = (singFun1 @ChildSym0) sChild- data instance Sing :: Foo -> GHC.Types.Type- where- SFLeaf :: Sing FLeaf- (:%+:) :: forall (n :: Foo) (n :: Foo).- (Sing (n :: Foo)) -> (Sing (n :: Foo)) -> Sing ((:+:) n n)- type SFoo = (Sing :: Foo -> GHC.Types.Type)- instance SingKind Foo where- type Demote Foo = Foo- fromSing SFLeaf = FLeaf- fromSing ((:%+:) b b) = ((:+:) (fromSing b)) (fromSing b)- toSing FLeaf = SomeSing SFLeaf- toSing ((:+:) (b :: Demote Foo) (b :: Demote Foo))- = case- ((,) (toSing b :: SomeSing Foo)) (toSing b :: SomeSing Foo)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%+:) c) c) }- instance SingI FLeaf where- sing = SFLeaf- instance (SingI n, SingI n) =>- SingI ((:+:) (n :: Foo) (n :: Foo)) where- sing = ((:%+:) sing) sing- instance SingI ((:+:@#@$) :: (~>) Foo ((~>) Foo Foo)) where- sing = (singFun2 @(:+:@#@$)) (:%+:)- instance SingI (TyCon2 (:+:) :: (~>) Foo ((~>) Foo Foo)) where- sing = (singFun2 @(TyCon2 (:+:))) (:%+:)- instance SingI d =>- SingI ((:+:@#@$$) (d :: Foo) :: (~>) Foo Foo) where- sing = (singFun1 @((:+:@#@$$) (d :: Foo))) ((:%+:) (sing @d))- instance SingI d =>- SingI (TyCon1 ((:+:) (d :: Foo)) :: (~>) Foo Foo) where- sing = (singFun1 @(TyCon1 ((:+:) (d :: Foo)))) ((:%+:) (sing @d))
+ tests/compile-and-dump/Singletons/Operators.ghc88.template view
@@ -0,0 +1,123 @@+Singletons/Operators.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| child :: Foo -> Foo+ child FLeaf = FLeaf+ child (a :+: _) = a+ (+) :: Nat -> Nat -> Nat+ Zero + m = m+ (Succ n) + m = Succ (n + m)+ + data Foo+ where+ FLeaf :: Foo+ (:+:) :: Foo -> Foo -> Foo |]+ ======>+ data Foo+ where+ FLeaf :: Foo+ (:+:) :: Foo -> Foo -> Foo+ child :: Foo -> Foo+ child FLeaf = FLeaf+ child (a :+: _) = a+ (+) :: Nat -> Nat -> Nat+ (+) Zero m = m+ (+) (Succ n) m = Succ (n + m)+ type FLeafSym0 = FLeaf+ type (:+:@#@$$$) (t0123456789876543210 :: Foo) (t0123456789876543210 :: Foo) =+ (:+:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ((:+:@#@$$) t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::+:@#@$$###)) ())+ data (:+:@#@$$) (t0123456789876543210 :: Foo) :: (~>) Foo Foo+ where+ (::+:@#@$$###) :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply ((:+:@#@$$) t0123456789876543210) arg) ((:+:@#@$$$) t0123456789876543210 arg) =>+ (:+:@#@$$) t0123456789876543210 t0123456789876543210+ type instance Apply ((:+:@#@$$) t0123456789876543210) t0123456789876543210 = (:+:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (:+:@#@$) where+ suppressUnusedWarnings = snd (((,) (::+:@#@$###)) ())+ data (:+:@#@$) :: (~>) Foo ((~>) Foo Foo)+ where+ (::+:@#@$###) :: forall t0123456789876543210+ arg. SameKind (Apply (:+:@#@$) arg) ((:+:@#@$$) arg) =>+ (:+:@#@$) t0123456789876543210+ type instance Apply (:+:@#@$) t0123456789876543210 = (:+:@#@$$) t0123456789876543210+ type (+@#@$$$) (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ (+) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((+@#@$$) a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:+@#@$$###)) ())+ data (+@#@$$) (a0123456789876543210 :: Nat) :: (~>) Nat Nat+ where+ (:+@#@$$###) :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((+@#@$$) a0123456789876543210) arg) ((+@#@$$$) a0123456789876543210 arg) =>+ (+@#@$$) a0123456789876543210 a0123456789876543210+ type instance Apply ((+@#@$$) a0123456789876543210) a0123456789876543210 = (+) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (+@#@$) where+ suppressUnusedWarnings = snd (((,) (:+@#@$###)) ())+ data (+@#@$) :: (~>) Nat ((~>) Nat Nat)+ where+ (:+@#@$###) :: forall a0123456789876543210+ arg. SameKind (Apply (+@#@$) arg) ((+@#@$$) arg) =>+ (+@#@$) a0123456789876543210+ type instance Apply (+@#@$) a0123456789876543210 = (+@#@$$) a0123456789876543210+ type ChildSym1 (a0123456789876543210 :: Foo) =+ Child a0123456789876543210+ instance SuppressUnusedWarnings ChildSym0 where+ suppressUnusedWarnings = snd (((,) ChildSym0KindInference) ())+ data ChildSym0 :: (~>) Foo Foo+ where+ ChildSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ChildSym0 arg) (ChildSym1 arg) =>+ ChildSym0 a0123456789876543210+ type instance Apply ChildSym0 a0123456789876543210 = Child a0123456789876543210+ type family (+) (a :: Nat) (a :: Nat) :: Nat where+ (+) 'Zero m = m+ (+) ('Succ n) m = Apply SuccSym0 (Apply (Apply (+@#@$) n) m)+ type family Child (a :: Foo) :: Foo where+ Child FLeaf = FLeafSym0+ Child ((:+:) a _) = a+ (%+) ::+ forall (t :: Nat) (t :: Nat).+ Sing t -> Sing t -> Sing (Apply (Apply (+@#@$) t) t :: Nat)+ sChild ::+ forall (t :: Foo). Sing t -> Sing (Apply ChildSym0 t :: Foo)+ (%+) SZero (sM :: Sing m) = sM+ (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)+ = (applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing ((applySing ((singFun2 @(+@#@$)) (%+))) sN)) sM)+ sChild SFLeaf = SFLeaf+ sChild ((:%+:) (sA :: Sing a) _) = sA+ instance SingI ((+@#@$) :: (~>) Nat ((~>) Nat Nat)) where+ sing = (singFun2 @(+@#@$)) (%+)+ instance SingI d =>+ SingI ((+@#@$$) (d :: Nat) :: (~>) Nat Nat) where+ sing = (singFun1 @((+@#@$$) (d :: Nat))) ((%+) (sing @d))+ instance SingI (ChildSym0 :: (~>) Foo Foo) where+ sing = (singFun1 @ChildSym0) sChild+ data SFoo :: Foo -> GHC.Types.Type+ where+ SFLeaf :: SFoo FLeaf+ (:%+:) :: forall (n :: Foo) (n :: Foo).+ (Sing (n :: Foo)) -> (Sing (n :: Foo)) -> SFoo ((:+:) n n)+ type instance Sing @Foo = SFoo+ instance SingKind Foo where+ type Demote Foo = Foo+ fromSing SFLeaf = FLeaf+ fromSing ((:%+:) b b) = ((:+:) (fromSing b)) (fromSing b)+ toSing FLeaf = SomeSing SFLeaf+ toSing ((:+:) (b :: Demote Foo) (b :: Demote Foo))+ = case+ ((,) (toSing b :: SomeSing Foo)) (toSing b :: SomeSing Foo)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%+:) c) c) }+ instance SingI FLeaf where+ sing = SFLeaf+ instance (SingI n, SingI n) =>+ SingI ((:+:) (n :: Foo) (n :: Foo)) where+ sing = ((:%+:) sing) sing+ instance SingI ((:+:@#@$) :: (~>) Foo ((~>) Foo Foo)) where+ sing = (singFun2 @(:+:@#@$)) (:%+:)+ instance SingI d =>+ SingI ((:+:@#@$$) (d :: Foo) :: (~>) Foo Foo) where+ sing = (singFun1 @((:+:@#@$$) (d :: Foo))) ((:%+:) (sing @d))
− tests/compile-and-dump/Singletons/OrdDeriving.ghc86.template
@@ -1,1235 +0,0 @@-Singletons/OrdDeriving.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Nat- = Zero | Succ Nat- deriving (Eq, Ord)- data Foo a b c d- = A a b c d |- B a b c d |- C a b c d |- D a b c d |- E a b c d |- F a b c d- deriving (Eq, Ord) |]- ======>- data Nat- = Zero | Succ Nat- deriving (Eq, Ord)- data Foo a b c d- = A a b c d |- B a b c d |- C a b c d |- D a b c d |- E a b c d |- F a b c d- deriving (Eq, Ord)- type ZeroSym0 = Zero- type SuccSym1 (t0123456789876543210 :: Nat) =- Succ t0123456789876543210- instance SuppressUnusedWarnings SuccSym0 where- suppressUnusedWarnings = snd (((,) SuccSym0KindInference) ())- data SuccSym0 :: (~>) Nat Nat- where- SuccSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>- SuccSym0 t0123456789876543210- type instance Apply SuccSym0 t0123456789876543210 = Succ t0123456789876543210- type ASym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =- A t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (ASym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) ASym3KindInference) ())- data ASym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.- (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)- where- ASym3KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (ASym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (ASym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>- ASym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (ASym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = A t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (ASym2 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) ASym2KindInference) ())- data ASym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210- d0123456789876543210.- (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))- where- ASym2KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (ASym2 t0123456789876543210 t0123456789876543210) arg) (ASym3 t0123456789876543210 t0123456789876543210 arg) =>- ASym2 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (ASym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = ASym3 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (ASym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) ASym1KindInference) ())- data ASym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))- where- ASym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (ASym1 t0123456789876543210) arg) (ASym2 t0123456789876543210 arg) =>- ASym1 t0123456789876543210 t0123456789876543210- type instance Apply (ASym1 t0123456789876543210) t0123456789876543210 = ASym2 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ASym0 where- suppressUnusedWarnings = snd (((,) ASym0KindInference) ())- data ASym0 :: forall a0123456789876543210- b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))- where- ASym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply ASym0 arg) (ASym1 arg) =>- ASym0 t0123456789876543210- type instance Apply ASym0 t0123456789876543210 = ASym1 t0123456789876543210- type BSym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =- B t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (BSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) BSym3KindInference) ())- data BSym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.- (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)- where- BSym3KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (BSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (BSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>- BSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (BSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = B t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (BSym2 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) BSym2KindInference) ())- data BSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210- d0123456789876543210.- (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))- where- BSym2KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (BSym2 t0123456789876543210 t0123456789876543210) arg) (BSym3 t0123456789876543210 t0123456789876543210 arg) =>- BSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (BSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = BSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (BSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) BSym1KindInference) ())- data BSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))- where- BSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (BSym1 t0123456789876543210) arg) (BSym2 t0123456789876543210 arg) =>- BSym1 t0123456789876543210 t0123456789876543210- type instance Apply (BSym1 t0123456789876543210) t0123456789876543210 = BSym2 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings BSym0 where- suppressUnusedWarnings = snd (((,) BSym0KindInference) ())- data BSym0 :: forall a0123456789876543210- b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))- where- BSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply BSym0 arg) (BSym1 arg) =>- BSym0 t0123456789876543210- type instance Apply BSym0 t0123456789876543210 = BSym1 t0123456789876543210- type CSym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =- C t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (CSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) CSym3KindInference) ())- data CSym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.- (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)- where- CSym3KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (CSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (CSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>- CSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (CSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = C t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (CSym2 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) CSym2KindInference) ())- data CSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210- d0123456789876543210.- (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))- where- CSym2KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (CSym2 t0123456789876543210 t0123456789876543210) arg) (CSym3 t0123456789876543210 t0123456789876543210 arg) =>- CSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (CSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = CSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (CSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) CSym1KindInference) ())- data CSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))- where- CSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (CSym1 t0123456789876543210) arg) (CSym2 t0123456789876543210 arg) =>- CSym1 t0123456789876543210 t0123456789876543210- type instance Apply (CSym1 t0123456789876543210) t0123456789876543210 = CSym2 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings CSym0 where- suppressUnusedWarnings = snd (((,) CSym0KindInference) ())- data CSym0 :: forall a0123456789876543210- b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))- where- CSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply CSym0 arg) (CSym1 arg) =>- CSym0 t0123456789876543210- type instance Apply CSym0 t0123456789876543210 = CSym1 t0123456789876543210- type DSym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =- D t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (DSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) DSym3KindInference) ())- data DSym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.- (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)- where- DSym3KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (DSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (DSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>- DSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (DSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = D t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (DSym2 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) DSym2KindInference) ())- data DSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210- d0123456789876543210.- (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))- where- DSym2KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (DSym2 t0123456789876543210 t0123456789876543210) arg) (DSym3 t0123456789876543210 t0123456789876543210 arg) =>- DSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (DSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = DSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (DSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) DSym1KindInference) ())- data DSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))- where- DSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (DSym1 t0123456789876543210) arg) (DSym2 t0123456789876543210 arg) =>- DSym1 t0123456789876543210 t0123456789876543210- type instance Apply (DSym1 t0123456789876543210) t0123456789876543210 = DSym2 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings DSym0 where- suppressUnusedWarnings = snd (((,) DSym0KindInference) ())- data DSym0 :: forall a0123456789876543210- b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))- where- DSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply DSym0 arg) (DSym1 arg) =>- DSym0 t0123456789876543210- type instance Apply DSym0 t0123456789876543210 = DSym1 t0123456789876543210- type ESym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =- E t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (ESym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) ESym3KindInference) ())- data ESym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.- (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)- where- ESym3KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (ESym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (ESym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>- ESym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (ESym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = E t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (ESym2 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) ESym2KindInference) ())- data ESym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210- d0123456789876543210.- (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))- where- ESym2KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (ESym2 t0123456789876543210 t0123456789876543210) arg) (ESym3 t0123456789876543210 t0123456789876543210 arg) =>- ESym2 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (ESym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = ESym3 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (ESym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) ESym1KindInference) ())- data ESym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))- where- ESym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (ESym1 t0123456789876543210) arg) (ESym2 t0123456789876543210 arg) =>- ESym1 t0123456789876543210 t0123456789876543210- type instance Apply (ESym1 t0123456789876543210) t0123456789876543210 = ESym2 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ESym0 where- suppressUnusedWarnings = snd (((,) ESym0KindInference) ())- data ESym0 :: forall a0123456789876543210- b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))- where- ESym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply ESym0 arg) (ESym1 arg) =>- ESym0 t0123456789876543210- type instance Apply ESym0 t0123456789876543210 = ESym1 t0123456789876543210- type FSym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =- F t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (FSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) FSym3KindInference) ())- data FSym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.- (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)- where- FSym3KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (FSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (FSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>- FSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (FSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = F t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (FSym2 t0123456789876543210 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) FSym2KindInference) ())- data FSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210- d0123456789876543210.- (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))- where- FSym2KindInference :: forall t0123456789876543210- t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (FSym2 t0123456789876543210 t0123456789876543210) arg) (FSym3 t0123456789876543210 t0123456789876543210 arg) =>- FSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210- type instance Apply (FSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = FSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (FSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) FSym1KindInference) ())- data FSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))- where- FSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (FSym1 t0123456789876543210) arg) (FSym2 t0123456789876543210 arg) =>- FSym1 t0123456789876543210 t0123456789876543210- type instance Apply (FSym1 t0123456789876543210) t0123456789876543210 = FSym2 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings FSym0 where- suppressUnusedWarnings = snd (((,) FSym0KindInference) ())- data FSym0 :: forall a0123456789876543210- b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))- where- FSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>- FSym0 t0123456789876543210- type instance Apply FSym0 t0123456789876543210 = FSym1 t0123456789876543210- type family Compare_0123456789876543210 (a :: Nat) (a :: Nat) :: Ordering where- Compare_0123456789876543210 Zero Zero = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 (Succ a_0123456789876543210) (Succ b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])- Compare_0123456789876543210 Zero (Succ _) = LTSym0- Compare_0123456789876543210 (Succ _) Zero = GTSym0- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Nat Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd Nat where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family Compare_0123456789876543210 (a :: Foo a b c d) (a :: Foo a b c d) :: Ordering where- Compare_0123456789876543210 (A a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (A b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))- Compare_0123456789876543210 (B a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (B b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))- Compare_0123456789876543210 (C a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (C b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))- Compare_0123456789876543210 (D a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (D b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))- Compare_0123456789876543210 (E a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (E b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))- Compare_0123456789876543210 (F a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (F b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))- Compare_0123456789876543210 (A _ _ _ _) (B _ _ _ _) = LTSym0- Compare_0123456789876543210 (A _ _ _ _) (C _ _ _ _) = LTSym0- Compare_0123456789876543210 (A _ _ _ _) (D _ _ _ _) = LTSym0- Compare_0123456789876543210 (A _ _ _ _) (E _ _ _ _) = LTSym0- Compare_0123456789876543210 (A _ _ _ _) (F _ _ _ _) = LTSym0- Compare_0123456789876543210 (B _ _ _ _) (A _ _ _ _) = GTSym0- Compare_0123456789876543210 (B _ _ _ _) (C _ _ _ _) = LTSym0- Compare_0123456789876543210 (B _ _ _ _) (D _ _ _ _) = LTSym0- Compare_0123456789876543210 (B _ _ _ _) (E _ _ _ _) = LTSym0- Compare_0123456789876543210 (B _ _ _ _) (F _ _ _ _) = LTSym0- Compare_0123456789876543210 (C _ _ _ _) (A _ _ _ _) = GTSym0- Compare_0123456789876543210 (C _ _ _ _) (B _ _ _ _) = GTSym0- Compare_0123456789876543210 (C _ _ _ _) (D _ _ _ _) = LTSym0- Compare_0123456789876543210 (C _ _ _ _) (E _ _ _ _) = LTSym0- Compare_0123456789876543210 (C _ _ _ _) (F _ _ _ _) = LTSym0- Compare_0123456789876543210 (D _ _ _ _) (A _ _ _ _) = GTSym0- Compare_0123456789876543210 (D _ _ _ _) (B _ _ _ _) = GTSym0- Compare_0123456789876543210 (D _ _ _ _) (C _ _ _ _) = GTSym0- Compare_0123456789876543210 (D _ _ _ _) (E _ _ _ _) = LTSym0- Compare_0123456789876543210 (D _ _ _ _) (F _ _ _ _) = LTSym0- Compare_0123456789876543210 (E _ _ _ _) (A _ _ _ _) = GTSym0- Compare_0123456789876543210 (E _ _ _ _) (B _ _ _ _) = GTSym0- Compare_0123456789876543210 (E _ _ _ _) (C _ _ _ _) = GTSym0- Compare_0123456789876543210 (E _ _ _ _) (D _ _ _ _) = GTSym0- Compare_0123456789876543210 (E _ _ _ _) (F _ _ _ _) = LTSym0- Compare_0123456789876543210 (F _ _ _ _) (A _ _ _ _) = GTSym0- Compare_0123456789876543210 (F _ _ _ _) (B _ _ _ _) = GTSym0- Compare_0123456789876543210 (F _ _ _ _) (C _ _ _ _) = GTSym0- Compare_0123456789876543210 (F _ _ _ _) (D _ _ _ _) = GTSym0- Compare_0123456789876543210 (F _ _ _ _) (E _ _ _ _) = GTSym0- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) (a0123456789876543210 :: Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) :: (~>) (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210- c0123456789876543210- d0123456789876543210.- (~>) (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) ((~>) (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd (Foo a b c d) where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family Equals_0123456789876543210 (a :: Nat) (b :: Nat) :: Bool where- Equals_0123456789876543210 Zero Zero = TrueSym0- Equals_0123456789876543210 (Succ a) (Succ b) = (==) a b- Equals_0123456789876543210 (_ :: Nat) (_ :: Nat) = FalseSym0- instance PEq Nat where- type (==) a b = Equals_0123456789876543210 a b- type family Equals_0123456789876543210 (a :: Foo a b c d) (b :: Foo a b c d) :: Bool where- Equals_0123456789876543210 (A a a a a) (A b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))- Equals_0123456789876543210 (B a a a a) (B b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))- Equals_0123456789876543210 (C a a a a) (C b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))- Equals_0123456789876543210 (D a a a a) (D b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))- Equals_0123456789876543210 (E a a a a) (E b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))- Equals_0123456789876543210 (F a a a a) (F b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))- Equals_0123456789876543210 (_ :: Foo a b c d) (_ :: Foo a b c d) = FalseSym0- instance PEq (Foo a b c d) where- type (==) a b = Equals_0123456789876543210 a b- data instance Sing :: Nat -> GHC.Types.Type- where- SZero :: Sing Zero- SSucc :: forall (n :: Nat). (Sing (n :: Nat)) -> Sing (Succ n)- type SNat = (Sing :: Nat -> GHC.Types.Type)- instance SingKind Nat where- type Demote Nat = Nat- fromSing SZero = Zero- fromSing (SSucc b) = Succ (fromSing b)- toSing Zero = SomeSing SZero- toSing (Succ (b :: Demote Nat))- = case toSing b :: SomeSing Nat of {- SomeSing c -> SomeSing (SSucc c) }- data instance Sing :: Foo a b c d -> GHC.Types.Type- where- SA :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).- (Sing (n :: a))- -> (Sing (n :: b))- -> (Sing (n :: c)) -> (Sing (n :: d)) -> Sing (A n n n n)- SB :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).- (Sing (n :: a))- -> (Sing (n :: b))- -> (Sing (n :: c)) -> (Sing (n :: d)) -> Sing (B n n n n)- SC :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).- (Sing (n :: a))- -> (Sing (n :: b))- -> (Sing (n :: c)) -> (Sing (n :: d)) -> Sing (C n n n n)- SD :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).- (Sing (n :: a))- -> (Sing (n :: b))- -> (Sing (n :: c)) -> (Sing (n :: d)) -> Sing (D n n n n)- SE :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).- (Sing (n :: a))- -> (Sing (n :: b))- -> (Sing (n :: c)) -> (Sing (n :: d)) -> Sing (E n n n n)- SF :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).- (Sing (n :: a))- -> (Sing (n :: b))- -> (Sing (n :: c)) -> (Sing (n :: d)) -> Sing (F n n n n)- type SFoo = (Sing :: Foo a b c d -> GHC.Types.Type)- instance (SingKind a, SingKind b, SingKind c, SingKind d) =>- SingKind (Foo a b c d) where- type Demote (Foo a b c d) = Foo (Demote a) (Demote b) (Demote c) (Demote d)- fromSing (SA b b b b)- = (((A (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)- fromSing (SB b b b b)- = (((B (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)- fromSing (SC b b b b)- = (((C (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)- fromSing (SD b b b b)- = (((D (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)- fromSing (SE b b b b)- = (((E (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)- fromSing (SF b b b b)- = (((F (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)- toSing- (A (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))- = case- ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))- (toSing b :: SomeSing c))- (toSing b :: SomeSing d)- of {- (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)- -> SomeSing ((((SA c) c) c) c) }- toSing- (B (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))- = case- ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))- (toSing b :: SomeSing c))- (toSing b :: SomeSing d)- of {- (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)- -> SomeSing ((((SB c) c) c) c) }- toSing- (C (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))- = case- ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))- (toSing b :: SomeSing c))- (toSing b :: SomeSing d)- of {- (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)- -> SomeSing ((((SC c) c) c) c) }- toSing- (D (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))- = case- ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))- (toSing b :: SomeSing c))- (toSing b :: SomeSing d)- of {- (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)- -> SomeSing ((((SD c) c) c) c) }- toSing- (E (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))- = case- ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))- (toSing b :: SomeSing c))- (toSing b :: SomeSing d)- of {- (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)- -> SomeSing ((((SE c) c) c) c) }- toSing- (F (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))- = case- ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))- (toSing b :: SomeSing c))- (toSing b :: SomeSing d)- of {- (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)- -> SomeSing ((((SF c) c) c) c) }- instance SOrd Nat => SOrd Nat where- sCompare ::- forall (t1 :: Nat) (t2 :: Nat).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)- -> GHC.Types.Type) t1) t2)- sCompare SZero SZero- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- SNil- sCompare- (SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil)- sCompare SZero (SSucc _) = SLT- sCompare (SSucc _) SZero = SGT- instance (SOrd a, SOrd b, SOrd c, SOrd d) =>- SOrd (Foo a b c d) where- sCompare ::- forall (t1 :: Foo a b c d) (t2 :: Foo a b c d).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun (Foo a b c d) ((~>) (Foo a b c d) Ordering)- -> GHC.Types.Type) t1) t2)- sCompare- (SA (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SA (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil))))- sCompare- (SB (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SB (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil))))- sCompare- (SC (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SC (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil))))- sCompare- (SD (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SD (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil))))- sCompare- (SE (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SE (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil))))- sCompare- (SF (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SF (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil))))- sCompare (SA _ _ _ _) (SB _ _ _ _) = SLT- sCompare (SA _ _ _ _) (SC _ _ _ _) = SLT- sCompare (SA _ _ _ _) (SD _ _ _ _) = SLT- sCompare (SA _ _ _ _) (SE _ _ _ _) = SLT- sCompare (SA _ _ _ _) (SF _ _ _ _) = SLT- sCompare (SB _ _ _ _) (SA _ _ _ _) = SGT- sCompare (SB _ _ _ _) (SC _ _ _ _) = SLT- sCompare (SB _ _ _ _) (SD _ _ _ _) = SLT- sCompare (SB _ _ _ _) (SE _ _ _ _) = SLT- sCompare (SB _ _ _ _) (SF _ _ _ _) = SLT- sCompare (SC _ _ _ _) (SA _ _ _ _) = SGT- sCompare (SC _ _ _ _) (SB _ _ _ _) = SGT- sCompare (SC _ _ _ _) (SD _ _ _ _) = SLT- sCompare (SC _ _ _ _) (SE _ _ _ _) = SLT- sCompare (SC _ _ _ _) (SF _ _ _ _) = SLT- sCompare (SD _ _ _ _) (SA _ _ _ _) = SGT- sCompare (SD _ _ _ _) (SB _ _ _ _) = SGT- sCompare (SD _ _ _ _) (SC _ _ _ _) = SGT- sCompare (SD _ _ _ _) (SE _ _ _ _) = SLT- sCompare (SD _ _ _ _) (SF _ _ _ _) = SLT- sCompare (SE _ _ _ _) (SA _ _ _ _) = SGT- sCompare (SE _ _ _ _) (SB _ _ _ _) = SGT- sCompare (SE _ _ _ _) (SC _ _ _ _) = SGT- sCompare (SE _ _ _ _) (SD _ _ _ _) = SGT- sCompare (SE _ _ _ _) (SF _ _ _ _) = SLT- sCompare (SF _ _ _ _) (SA _ _ _ _) = SGT- sCompare (SF _ _ _ _) (SB _ _ _ _) = SGT- sCompare (SF _ _ _ _) (SC _ _ _ _) = SGT- sCompare (SF _ _ _ _) (SD _ _ _ _) = SGT- sCompare (SF _ _ _ _) (SE _ _ _ _) = SGT- instance SEq Nat => SEq Nat where- (%==) SZero SZero = STrue- (%==) SZero (SSucc _) = SFalse- (%==) (SSucc _) SZero = SFalse- (%==) (SSucc a) (SSucc b) = ((%==) a) b- instance SDecide Nat => SDecide Nat where- (%~) SZero SZero = Proved Refl- (%~) SZero (SSucc _) = Disproved (\ x -> case x of)- (%~) (SSucc _) SZero = Disproved (\ x -> case x of)- (%~) (SSucc a) (SSucc b)- = case ((%~) a) b of- Proved Refl -> Proved Refl- Disproved contra- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- instance (SEq a, SEq b, SEq c, SEq d) => SEq (Foo a b c d) where- (%==) (SA a a a a) (SA b b b b)- = ((%&&) (((%==) a) b))- (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))- (%==) (SA _ _ _ _) (SB _ _ _ _) = SFalse- (%==) (SA _ _ _ _) (SC _ _ _ _) = SFalse- (%==) (SA _ _ _ _) (SD _ _ _ _) = SFalse- (%==) (SA _ _ _ _) (SE _ _ _ _) = SFalse- (%==) (SA _ _ _ _) (SF _ _ _ _) = SFalse- (%==) (SB _ _ _ _) (SA _ _ _ _) = SFalse- (%==) (SB a a a a) (SB b b b b)- = ((%&&) (((%==) a) b))- (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))- (%==) (SB _ _ _ _) (SC _ _ _ _) = SFalse- (%==) (SB _ _ _ _) (SD _ _ _ _) = SFalse- (%==) (SB _ _ _ _) (SE _ _ _ _) = SFalse- (%==) (SB _ _ _ _) (SF _ _ _ _) = SFalse- (%==) (SC _ _ _ _) (SA _ _ _ _) = SFalse- (%==) (SC _ _ _ _) (SB _ _ _ _) = SFalse- (%==) (SC a a a a) (SC b b b b)- = ((%&&) (((%==) a) b))- (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))- (%==) (SC _ _ _ _) (SD _ _ _ _) = SFalse- (%==) (SC _ _ _ _) (SE _ _ _ _) = SFalse- (%==) (SC _ _ _ _) (SF _ _ _ _) = SFalse- (%==) (SD _ _ _ _) (SA _ _ _ _) = SFalse- (%==) (SD _ _ _ _) (SB _ _ _ _) = SFalse- (%==) (SD _ _ _ _) (SC _ _ _ _) = SFalse- (%==) (SD a a a a) (SD b b b b)- = ((%&&) (((%==) a) b))- (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))- (%==) (SD _ _ _ _) (SE _ _ _ _) = SFalse- (%==) (SD _ _ _ _) (SF _ _ _ _) = SFalse- (%==) (SE _ _ _ _) (SA _ _ _ _) = SFalse- (%==) (SE _ _ _ _) (SB _ _ _ _) = SFalse- (%==) (SE _ _ _ _) (SC _ _ _ _) = SFalse- (%==) (SE _ _ _ _) (SD _ _ _ _) = SFalse- (%==) (SE a a a a) (SE b b b b)- = ((%&&) (((%==) a) b))- (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))- (%==) (SE _ _ _ _) (SF _ _ _ _) = SFalse- (%==) (SF _ _ _ _) (SA _ _ _ _) = SFalse- (%==) (SF _ _ _ _) (SB _ _ _ _) = SFalse- (%==) (SF _ _ _ _) (SC _ _ _ _) = SFalse- (%==) (SF _ _ _ _) (SD _ _ _ _) = SFalse- (%==) (SF _ _ _ _) (SE _ _ _ _) = SFalse- (%==) (SF a a a a) (SF b b b b)- = ((%&&) (((%==) a) b))- (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))- instance (SDecide a, SDecide b, SDecide c, SDecide d) =>- SDecide (Foo a b c d) where- (%~) (SA a a a a) (SA b b b b)- = case- ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)- of- (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)- -> Proved Refl- (,,,) (Disproved contra) _ _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ (Disproved contra) _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ (Disproved contra) _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ _ (Disproved contra)- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (%~) (SA _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SA _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SA _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SA _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SA _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SB _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SB a a a a) (SB b b b b)- = case- ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)- of- (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)- -> Proved Refl- (,,,) (Disproved contra) _ _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ (Disproved contra) _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ (Disproved contra) _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ _ (Disproved contra)- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (%~) (SB _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SB _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SB _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SB _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SC _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SC _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SC a a a a) (SC b b b b)- = case- ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)- of- (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)- -> Proved Refl- (,,,) (Disproved contra) _ _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ (Disproved contra) _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ (Disproved contra) _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ _ (Disproved contra)- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (%~) (SC _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SC _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SC _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SD _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SD _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SD _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SD a a a a) (SD b b b b)- = case- ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)- of- (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)- -> Proved Refl- (,,,) (Disproved contra) _ _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ (Disproved contra) _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ (Disproved contra) _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ _ (Disproved contra)- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (%~) (SD _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SD _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SE _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SE _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SE _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SE _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SE a a a a) (SE b b b b)- = case- ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)- of- (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)- -> Proved Refl- (,,,) (Disproved contra) _ _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ (Disproved contra) _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ (Disproved contra) _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ _ (Disproved contra)- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (%~) (SE _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SF _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SF _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SF _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SF _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SF _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)- (%~) (SF a a a a) (SF b b b b)- = case- ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)- of- (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)- -> Proved Refl- (,,,) (Disproved contra) _ _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ (Disproved contra) _ _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ (Disproved contra) _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,,,) _ _ _ (Disproved contra)- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- instance SingI Zero where- sing = SZero- instance SingI n => SingI (Succ (n :: Nat)) where- sing = SSucc sing- instance SingI (SuccSym0 :: (~>) Nat Nat) where- sing = (singFun1 @SuccSym0) SSucc- instance SingI (TyCon1 Succ :: (~>) Nat Nat) where- sing = (singFun1 @(TyCon1 Succ)) SSucc- instance (SingI n, SingI n, SingI n, SingI n) =>- SingI (A (n :: a) (n :: b) (n :: c) (n :: d)) where- sing = (((SA sing) sing) sing) sing- instance SingI (ASym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @ASym0) SA- instance SingI (TyCon4 A :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @(TyCon4 A)) SA- instance SingI d =>- SingI (ASym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(ASym1 (d :: a))) (SA (sing @d))- instance SingI d =>- SingI (TyCon3 (A (d :: a)) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(TyCon3 (A (d :: a)))) (SA (sing @d))- instance (SingI d, SingI d) =>- SingI (ASym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(ASym2 (d :: a) (d :: b))) ((SA (sing @d)) (sing @d))- instance (SingI d, SingI d) =>- SingI (TyCon2 (A (d :: a) (d :: b)) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(TyCon2 (A (d :: a) (d :: b))))- ((SA (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (ASym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(ASym3 (d :: a) (d :: b) (d :: c)))- (((SA (sing @d)) (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (TyCon1 (A (d :: a) (d :: b) (d :: c)) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(TyCon1 (A (d :: a) (d :: b) (d :: c))))- (((SA (sing @d)) (sing @d)) (sing @d))- instance (SingI n, SingI n, SingI n, SingI n) =>- SingI (B (n :: a) (n :: b) (n :: c) (n :: d)) where- sing = (((SB sing) sing) sing) sing- instance SingI (BSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @BSym0) SB- instance SingI (TyCon4 B :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @(TyCon4 B)) SB- instance SingI d =>- SingI (BSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(BSym1 (d :: a))) (SB (sing @d))- instance SingI d =>- SingI (TyCon3 (B (d :: a)) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(TyCon3 (B (d :: a)))) (SB (sing @d))- instance (SingI d, SingI d) =>- SingI (BSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(BSym2 (d :: a) (d :: b))) ((SB (sing @d)) (sing @d))- instance (SingI d, SingI d) =>- SingI (TyCon2 (B (d :: a) (d :: b)) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(TyCon2 (B (d :: a) (d :: b))))- ((SB (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (BSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(BSym3 (d :: a) (d :: b) (d :: c)))- (((SB (sing @d)) (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (TyCon1 (B (d :: a) (d :: b) (d :: c)) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(TyCon1 (B (d :: a) (d :: b) (d :: c))))- (((SB (sing @d)) (sing @d)) (sing @d))- instance (SingI n, SingI n, SingI n, SingI n) =>- SingI (C (n :: a) (n :: b) (n :: c) (n :: d)) where- sing = (((SC sing) sing) sing) sing- instance SingI (CSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @CSym0) SC- instance SingI (TyCon4 C :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @(TyCon4 C)) SC- instance SingI d =>- SingI (CSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(CSym1 (d :: a))) (SC (sing @d))- instance SingI d =>- SingI (TyCon3 (C (d :: a)) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(TyCon3 (C (d :: a)))) (SC (sing @d))- instance (SingI d, SingI d) =>- SingI (CSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(CSym2 (d :: a) (d :: b))) ((SC (sing @d)) (sing @d))- instance (SingI d, SingI d) =>- SingI (TyCon2 (C (d :: a) (d :: b)) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(TyCon2 (C (d :: a) (d :: b))))- ((SC (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (CSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(CSym3 (d :: a) (d :: b) (d :: c)))- (((SC (sing @d)) (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (TyCon1 (C (d :: a) (d :: b) (d :: c)) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(TyCon1 (C (d :: a) (d :: b) (d :: c))))- (((SC (sing @d)) (sing @d)) (sing @d))- instance (SingI n, SingI n, SingI n, SingI n) =>- SingI (D (n :: a) (n :: b) (n :: c) (n :: d)) where- sing = (((SD sing) sing) sing) sing- instance SingI (DSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @DSym0) SD- instance SingI (TyCon4 D :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @(TyCon4 D)) SD- instance SingI d =>- SingI (DSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(DSym1 (d :: a))) (SD (sing @d))- instance SingI d =>- SingI (TyCon3 (D (d :: a)) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(TyCon3 (D (d :: a)))) (SD (sing @d))- instance (SingI d, SingI d) =>- SingI (DSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(DSym2 (d :: a) (d :: b))) ((SD (sing @d)) (sing @d))- instance (SingI d, SingI d) =>- SingI (TyCon2 (D (d :: a) (d :: b)) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(TyCon2 (D (d :: a) (d :: b))))- ((SD (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (DSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(DSym3 (d :: a) (d :: b) (d :: c)))- (((SD (sing @d)) (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (TyCon1 (D (d :: a) (d :: b) (d :: c)) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(TyCon1 (D (d :: a) (d :: b) (d :: c))))- (((SD (sing @d)) (sing @d)) (sing @d))- instance (SingI n, SingI n, SingI n, SingI n) =>- SingI (E (n :: a) (n :: b) (n :: c) (n :: d)) where- sing = (((SE sing) sing) sing) sing- instance SingI (ESym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @ESym0) SE- instance SingI (TyCon4 E :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @(TyCon4 E)) SE- instance SingI d =>- SingI (ESym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(ESym1 (d :: a))) (SE (sing @d))- instance SingI d =>- SingI (TyCon3 (E (d :: a)) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(TyCon3 (E (d :: a)))) (SE (sing @d))- instance (SingI d, SingI d) =>- SingI (ESym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(ESym2 (d :: a) (d :: b))) ((SE (sing @d)) (sing @d))- instance (SingI d, SingI d) =>- SingI (TyCon2 (E (d :: a) (d :: b)) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(TyCon2 (E (d :: a) (d :: b))))- ((SE (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (ESym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(ESym3 (d :: a) (d :: b) (d :: c)))- (((SE (sing @d)) (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (TyCon1 (E (d :: a) (d :: b) (d :: c)) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(TyCon1 (E (d :: a) (d :: b) (d :: c))))- (((SE (sing @d)) (sing @d)) (sing @d))- instance (SingI n, SingI n, SingI n, SingI n) =>- SingI (F (n :: a) (n :: b) (n :: c) (n :: d)) where- sing = (((SF sing) sing) sing) sing- instance SingI (FSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @FSym0) SF- instance SingI (TyCon4 F :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where- sing = (singFun4 @(TyCon4 F)) SF- instance SingI d =>- SingI (FSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(FSym1 (d :: a))) (SF (sing @d))- instance SingI d =>- SingI (TyCon3 (F (d :: a)) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where- sing = (singFun3 @(TyCon3 (F (d :: a)))) (SF (sing @d))- instance (SingI d, SingI d) =>- SingI (FSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(FSym2 (d :: a) (d :: b))) ((SF (sing @d)) (sing @d))- instance (SingI d, SingI d) =>- SingI (TyCon2 (F (d :: a) (d :: b)) :: (~>) c ((~>) d (Foo a b c d))) where- sing- = (singFun2 @(TyCon2 (F (d :: a) (d :: b))))- ((SF (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (FSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(FSym3 (d :: a) (d :: b) (d :: c)))- (((SF (sing @d)) (sing @d)) (sing @d))- instance (SingI d, SingI d, SingI d) =>- SingI (TyCon1 (F (d :: a) (d :: b) (d :: c)) :: (~>) d (Foo a b c d)) where- sing- = (singFun1 @(TyCon1 (F (d :: a) (d :: b) (d :: c))))- (((SF (sing @d)) (sing @d)) (sing @d))
+ tests/compile-and-dump/Singletons/OrdDeriving.ghc88.template view
@@ -0,0 +1,1163 @@+Singletons/OrdDeriving.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Nat+ = Zero | Succ Nat+ deriving (Eq, Ord)+ data Foo a b c d+ = A a b c d |+ B a b c d |+ C a b c d |+ D a b c d |+ E a b c d |+ F a b c d+ deriving (Eq, Ord) |]+ ======>+ data Nat+ = Zero | Succ Nat+ deriving (Eq, Ord)+ data Foo a b c d+ = A a b c d |+ B a b c d |+ C a b c d |+ D a b c d |+ E a b c d |+ F a b c d+ deriving (Eq, Ord)+ type ZeroSym0 = Zero+ type SuccSym1 (t0123456789876543210 :: Nat) =+ Succ t0123456789876543210+ instance SuppressUnusedWarnings SuccSym0 where+ suppressUnusedWarnings = snd (((,) SuccSym0KindInference) ())+ data SuccSym0 :: (~>) Nat Nat+ where+ SuccSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply SuccSym0 arg) (SuccSym1 arg) =>+ SuccSym0 t0123456789876543210+ type instance Apply SuccSym0 t0123456789876543210 = Succ t0123456789876543210+ type ASym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =+ A t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (ASym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ASym3KindInference) ())+ data ASym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.+ (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)+ where+ ASym3KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (ASym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (ASym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>+ ASym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (ASym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = A t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (ASym2 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ASym2KindInference) ())+ data ASym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210+ d0123456789876543210.+ (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))+ where+ ASym2KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (ASym2 t0123456789876543210 t0123456789876543210) arg) (ASym3 t0123456789876543210 t0123456789876543210 arg) =>+ ASym2 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (ASym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = ASym3 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (ASym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ASym1KindInference) ())+ data ASym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))+ where+ ASym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (ASym1 t0123456789876543210) arg) (ASym2 t0123456789876543210 arg) =>+ ASym1 t0123456789876543210 t0123456789876543210+ type instance Apply (ASym1 t0123456789876543210) t0123456789876543210 = ASym2 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ASym0 where+ suppressUnusedWarnings = snd (((,) ASym0KindInference) ())+ data ASym0 :: forall a0123456789876543210+ b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))+ where+ ASym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply ASym0 arg) (ASym1 arg) =>+ ASym0 t0123456789876543210+ type instance Apply ASym0 t0123456789876543210 = ASym1 t0123456789876543210+ type BSym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =+ B t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (BSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BSym3KindInference) ())+ data BSym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.+ (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)+ where+ BSym3KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (BSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (BSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>+ BSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (BSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = B t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (BSym2 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BSym2KindInference) ())+ data BSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210+ d0123456789876543210.+ (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))+ where+ BSym2KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (BSym2 t0123456789876543210 t0123456789876543210) arg) (BSym3 t0123456789876543210 t0123456789876543210 arg) =>+ BSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (BSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = BSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (BSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BSym1KindInference) ())+ data BSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))+ where+ BSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (BSym1 t0123456789876543210) arg) (BSym2 t0123456789876543210 arg) =>+ BSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (BSym1 t0123456789876543210) t0123456789876543210 = BSym2 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings BSym0 where+ suppressUnusedWarnings = snd (((,) BSym0KindInference) ())+ data BSym0 :: forall a0123456789876543210+ b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))+ where+ BSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply BSym0 arg) (BSym1 arg) =>+ BSym0 t0123456789876543210+ type instance Apply BSym0 t0123456789876543210 = BSym1 t0123456789876543210+ type CSym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =+ C t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (CSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) CSym3KindInference) ())+ data CSym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.+ (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)+ where+ CSym3KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (CSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (CSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>+ CSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (CSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = C t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (CSym2 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) CSym2KindInference) ())+ data CSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210+ d0123456789876543210.+ (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))+ where+ CSym2KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (CSym2 t0123456789876543210 t0123456789876543210) arg) (CSym3 t0123456789876543210 t0123456789876543210 arg) =>+ CSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (CSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = CSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (CSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) CSym1KindInference) ())+ data CSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))+ where+ CSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (CSym1 t0123456789876543210) arg) (CSym2 t0123456789876543210 arg) =>+ CSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (CSym1 t0123456789876543210) t0123456789876543210 = CSym2 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings CSym0 where+ suppressUnusedWarnings = snd (((,) CSym0KindInference) ())+ data CSym0 :: forall a0123456789876543210+ b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))+ where+ CSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply CSym0 arg) (CSym1 arg) =>+ CSym0 t0123456789876543210+ type instance Apply CSym0 t0123456789876543210 = CSym1 t0123456789876543210+ type DSym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =+ D t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (DSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) DSym3KindInference) ())+ data DSym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.+ (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)+ where+ DSym3KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (DSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (DSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>+ DSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (DSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = D t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (DSym2 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) DSym2KindInference) ())+ data DSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210+ d0123456789876543210.+ (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))+ where+ DSym2KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (DSym2 t0123456789876543210 t0123456789876543210) arg) (DSym3 t0123456789876543210 t0123456789876543210 arg) =>+ DSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (DSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = DSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (DSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) DSym1KindInference) ())+ data DSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))+ where+ DSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (DSym1 t0123456789876543210) arg) (DSym2 t0123456789876543210 arg) =>+ DSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (DSym1 t0123456789876543210) t0123456789876543210 = DSym2 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings DSym0 where+ suppressUnusedWarnings = snd (((,) DSym0KindInference) ())+ data DSym0 :: forall a0123456789876543210+ b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))+ where+ DSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply DSym0 arg) (DSym1 arg) =>+ DSym0 t0123456789876543210+ type instance Apply DSym0 t0123456789876543210 = DSym1 t0123456789876543210+ type ESym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =+ E t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (ESym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ESym3KindInference) ())+ data ESym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.+ (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)+ where+ ESym3KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (ESym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (ESym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>+ ESym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (ESym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = E t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (ESym2 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ESym2KindInference) ())+ data ESym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210+ d0123456789876543210.+ (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))+ where+ ESym2KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (ESym2 t0123456789876543210 t0123456789876543210) arg) (ESym3 t0123456789876543210 t0123456789876543210 arg) =>+ ESym2 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (ESym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = ESym3 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (ESym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ESym1KindInference) ())+ data ESym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))+ where+ ESym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (ESym1 t0123456789876543210) arg) (ESym2 t0123456789876543210 arg) =>+ ESym1 t0123456789876543210 t0123456789876543210+ type instance Apply (ESym1 t0123456789876543210) t0123456789876543210 = ESym2 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ESym0 where+ suppressUnusedWarnings = snd (((,) ESym0KindInference) ())+ data ESym0 :: forall a0123456789876543210+ b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))+ where+ ESym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply ESym0 arg) (ESym1 arg) =>+ ESym0 t0123456789876543210+ type instance Apply ESym0 t0123456789876543210 = ESym1 t0123456789876543210+ type FSym4 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) (t0123456789876543210 :: d0123456789876543210) =+ F t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (FSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FSym3KindInference) ())+ data FSym3 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) (t0123456789876543210 :: c0123456789876543210) :: forall d0123456789876543210.+ (~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)+ where+ FSym3KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (FSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) arg) (FSym4 t0123456789876543210 t0123456789876543210 t0123456789876543210 arg) =>+ FSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (FSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210) t0123456789876543210 = F t0123456789876543210 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (FSym2 t0123456789876543210 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FSym2KindInference) ())+ data FSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) :: forall c0123456789876543210+ d0123456789876543210.+ (~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))+ where+ FSym2KindInference :: forall t0123456789876543210+ t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (FSym2 t0123456789876543210 t0123456789876543210) arg) (FSym3 t0123456789876543210 t0123456789876543210 arg) =>+ FSym2 t0123456789876543210 t0123456789876543210 t0123456789876543210+ type instance Apply (FSym2 t0123456789876543210 t0123456789876543210) t0123456789876543210 = FSym3 t0123456789876543210 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (FSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FSym1KindInference) ())+ data FSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210)))+ where+ FSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (FSym1 t0123456789876543210) arg) (FSym2 t0123456789876543210 arg) =>+ FSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (FSym1 t0123456789876543210) t0123456789876543210 = FSym2 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings FSym0 where+ suppressUnusedWarnings = snd (((,) FSym0KindInference) ())+ data FSym0 :: forall a0123456789876543210+ b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) c0123456789876543210 ((~>) d0123456789876543210 (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210))))+ where+ FSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>+ FSym0 t0123456789876543210+ type instance Apply FSym0 t0123456789876543210 = FSym1 t0123456789876543210+ type family Compare_0123456789876543210 (a :: Nat) (a :: Nat) :: Ordering where+ Compare_0123456789876543210 Zero Zero = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 (Succ a_0123456789876543210) (Succ b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])+ Compare_0123456789876543210 Zero (Succ _) = LTSym0+ Compare_0123456789876543210 (Succ _) Zero = GTSym0+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Nat Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: (~>) Nat ((~>) Nat Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd Nat where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family Compare_0123456789876543210 (a :: Foo a b c d) (a :: Foo a b c d) :: Ordering where+ Compare_0123456789876543210 (A a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (A b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))+ Compare_0123456789876543210 (B a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (B b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))+ Compare_0123456789876543210 (C a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (C b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))+ Compare_0123456789876543210 (D a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (D b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))+ Compare_0123456789876543210 (E a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (E b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))+ Compare_0123456789876543210 (F a_0123456789876543210 a_0123456789876543210 a_0123456789876543210 a_0123456789876543210) (F b_0123456789876543210 b_0123456789876543210 b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))))+ Compare_0123456789876543210 (A _ _ _ _) (B _ _ _ _) = LTSym0+ Compare_0123456789876543210 (A _ _ _ _) (C _ _ _ _) = LTSym0+ Compare_0123456789876543210 (A _ _ _ _) (D _ _ _ _) = LTSym0+ Compare_0123456789876543210 (A _ _ _ _) (E _ _ _ _) = LTSym0+ Compare_0123456789876543210 (A _ _ _ _) (F _ _ _ _) = LTSym0+ Compare_0123456789876543210 (B _ _ _ _) (A _ _ _ _) = GTSym0+ Compare_0123456789876543210 (B _ _ _ _) (C _ _ _ _) = LTSym0+ Compare_0123456789876543210 (B _ _ _ _) (D _ _ _ _) = LTSym0+ Compare_0123456789876543210 (B _ _ _ _) (E _ _ _ _) = LTSym0+ Compare_0123456789876543210 (B _ _ _ _) (F _ _ _ _) = LTSym0+ Compare_0123456789876543210 (C _ _ _ _) (A _ _ _ _) = GTSym0+ Compare_0123456789876543210 (C _ _ _ _) (B _ _ _ _) = GTSym0+ Compare_0123456789876543210 (C _ _ _ _) (D _ _ _ _) = LTSym0+ Compare_0123456789876543210 (C _ _ _ _) (E _ _ _ _) = LTSym0+ Compare_0123456789876543210 (C _ _ _ _) (F _ _ _ _) = LTSym0+ Compare_0123456789876543210 (D _ _ _ _) (A _ _ _ _) = GTSym0+ Compare_0123456789876543210 (D _ _ _ _) (B _ _ _ _) = GTSym0+ Compare_0123456789876543210 (D _ _ _ _) (C _ _ _ _) = GTSym0+ Compare_0123456789876543210 (D _ _ _ _) (E _ _ _ _) = LTSym0+ Compare_0123456789876543210 (D _ _ _ _) (F _ _ _ _) = LTSym0+ Compare_0123456789876543210 (E _ _ _ _) (A _ _ _ _) = GTSym0+ Compare_0123456789876543210 (E _ _ _ _) (B _ _ _ _) = GTSym0+ Compare_0123456789876543210 (E _ _ _ _) (C _ _ _ _) = GTSym0+ Compare_0123456789876543210 (E _ _ _ _) (D _ _ _ _) = GTSym0+ Compare_0123456789876543210 (E _ _ _ _) (F _ _ _ _) = LTSym0+ Compare_0123456789876543210 (F _ _ _ _) (A _ _ _ _) = GTSym0+ Compare_0123456789876543210 (F _ _ _ _) (B _ _ _ _) = GTSym0+ Compare_0123456789876543210 (F _ _ _ _) (C _ _ _ _) = GTSym0+ Compare_0123456789876543210 (F _ _ _ _) (D _ _ _ _) = GTSym0+ Compare_0123456789876543210 (F _ _ _ _) (E _ _ _ _) = GTSym0+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) (a0123456789876543210 :: Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) :: (~>) (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: forall a0123456789876543210+ b0123456789876543210+ c0123456789876543210+ d0123456789876543210.+ (~>) (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) ((~>) (Foo a0123456789876543210 b0123456789876543210 c0123456789876543210 d0123456789876543210) Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd (Foo a b c d) where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family Equals_0123456789876543210 (a :: Nat) (b :: Nat) :: Bool where+ Equals_0123456789876543210 Zero Zero = TrueSym0+ Equals_0123456789876543210 (Succ a) (Succ b) = (==) a b+ Equals_0123456789876543210 (_ :: Nat) (_ :: Nat) = FalseSym0+ instance PEq Nat where+ type (==) a b = Equals_0123456789876543210 a b+ type family Equals_0123456789876543210 (a :: Foo a b c d) (b :: Foo a b c d) :: Bool where+ Equals_0123456789876543210 (A a a a a) (A b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))+ Equals_0123456789876543210 (B a a a a) (B b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))+ Equals_0123456789876543210 (C a a a a) (C b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))+ Equals_0123456789876543210 (D a a a a) (D b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))+ Equals_0123456789876543210 (E a a a a) (E b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))+ Equals_0123456789876543210 (F a a a a) (F b b b b) = (&&) ((==) a b) ((&&) ((==) a b) ((&&) ((==) a b) ((==) a b)))+ Equals_0123456789876543210 (_ :: Foo a b c d) (_ :: Foo a b c d) = FalseSym0+ instance PEq (Foo a b c d) where+ type (==) a b = Equals_0123456789876543210 a b+ data SNat :: Nat -> GHC.Types.Type+ where+ SZero :: SNat Zero+ SSucc :: forall (n :: Nat). (Sing (n :: Nat)) -> SNat (Succ n)+ type instance Sing @Nat = SNat+ instance SingKind Nat where+ type Demote Nat = Nat+ fromSing SZero = Zero+ fromSing (SSucc b) = Succ (fromSing b)+ toSing Zero = SomeSing SZero+ toSing (Succ (b :: Demote Nat))+ = case toSing b :: SomeSing Nat of {+ SomeSing c -> SomeSing (SSucc c) }+ data SFoo :: forall a b c d. Foo a b c d -> GHC.Types.Type+ where+ SA :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).+ (Sing (n :: a))+ -> (Sing (n :: b))+ -> (Sing (n :: c)) -> (Sing (n :: d)) -> SFoo (A n n n n)+ SB :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).+ (Sing (n :: a))+ -> (Sing (n :: b))+ -> (Sing (n :: c)) -> (Sing (n :: d)) -> SFoo (B n n n n)+ SC :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).+ (Sing (n :: a))+ -> (Sing (n :: b))+ -> (Sing (n :: c)) -> (Sing (n :: d)) -> SFoo (C n n n n)+ SD :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).+ (Sing (n :: a))+ -> (Sing (n :: b))+ -> (Sing (n :: c)) -> (Sing (n :: d)) -> SFoo (D n n n n)+ SE :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).+ (Sing (n :: a))+ -> (Sing (n :: b))+ -> (Sing (n :: c)) -> (Sing (n :: d)) -> SFoo (E n n n n)+ SF :: forall a b c d (n :: a) (n :: b) (n :: c) (n :: d).+ (Sing (n :: a))+ -> (Sing (n :: b))+ -> (Sing (n :: c)) -> (Sing (n :: d)) -> SFoo (F n n n n)+ type instance Sing @(Foo a b c d) = SFoo+ instance (SingKind a, SingKind b, SingKind c, SingKind d) =>+ SingKind (Foo a b c d) where+ type Demote (Foo a b c d) = Foo (Demote a) (Demote b) (Demote c) (Demote d)+ fromSing (SA b b b b)+ = (((A (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)+ fromSing (SB b b b b)+ = (((B (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)+ fromSing (SC b b b b)+ = (((C (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)+ fromSing (SD b b b b)+ = (((D (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)+ fromSing (SE b b b b)+ = (((E (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)+ fromSing (SF b b b b)+ = (((F (fromSing b)) (fromSing b)) (fromSing b)) (fromSing b)+ toSing+ (A (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))+ = case+ ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))+ (toSing b :: SomeSing c))+ (toSing b :: SomeSing d)+ of {+ (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)+ -> SomeSing ((((SA c) c) c) c) }+ toSing+ (B (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))+ = case+ ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))+ (toSing b :: SomeSing c))+ (toSing b :: SomeSing d)+ of {+ (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)+ -> SomeSing ((((SB c) c) c) c) }+ toSing+ (C (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))+ = case+ ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))+ (toSing b :: SomeSing c))+ (toSing b :: SomeSing d)+ of {+ (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)+ -> SomeSing ((((SC c) c) c) c) }+ toSing+ (D (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))+ = case+ ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))+ (toSing b :: SomeSing c))+ (toSing b :: SomeSing d)+ of {+ (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)+ -> SomeSing ((((SD c) c) c) c) }+ toSing+ (E (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))+ = case+ ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))+ (toSing b :: SomeSing c))+ (toSing b :: SomeSing d)+ of {+ (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)+ -> SomeSing ((((SE c) c) c) c) }+ toSing+ (F (b :: Demote a) (b :: Demote b) (b :: Demote c) (b :: Demote d))+ = case+ ((((,,,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b))+ (toSing b :: SomeSing c))+ (toSing b :: SomeSing d)+ of {+ (,,,) (SomeSing c) (SomeSing c) (SomeSing c) (SomeSing c)+ -> SomeSing ((((SF c) c) c) c) }+ instance SOrd Nat => SOrd Nat where+ sCompare ::+ forall (t1 :: Nat) (t2 :: Nat).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun Nat ((~>) Nat Ordering)+ -> GHC.Types.Type) t1) t2)+ sCompare SZero SZero+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ SNil+ sCompare+ (SSucc (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SSucc (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil)+ sCompare SZero (SSucc _) = SLT+ sCompare (SSucc _) SZero = SGT+ instance (SOrd a, SOrd b, SOrd c, SOrd d) =>+ SOrd (Foo a b c d) where+ sCompare ::+ forall (t1 :: Foo a b c d) (t2 :: Foo a b c d).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun (Foo a b c d) ((~>) (Foo a b c d) Ordering)+ -> GHC.Types.Type) t1) t2)+ sCompare+ (SA (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SA (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil))))+ sCompare+ (SB (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SB (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil))))+ sCompare+ (SC (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SC (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil))))+ sCompare+ (SD (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SD (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil))))+ sCompare+ (SE (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SE (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil))))+ sCompare+ (SF (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SF (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil))))+ sCompare (SA _ _ _ _) (SB _ _ _ _) = SLT+ sCompare (SA _ _ _ _) (SC _ _ _ _) = SLT+ sCompare (SA _ _ _ _) (SD _ _ _ _) = SLT+ sCompare (SA _ _ _ _) (SE _ _ _ _) = SLT+ sCompare (SA _ _ _ _) (SF _ _ _ _) = SLT+ sCompare (SB _ _ _ _) (SA _ _ _ _) = SGT+ sCompare (SB _ _ _ _) (SC _ _ _ _) = SLT+ sCompare (SB _ _ _ _) (SD _ _ _ _) = SLT+ sCompare (SB _ _ _ _) (SE _ _ _ _) = SLT+ sCompare (SB _ _ _ _) (SF _ _ _ _) = SLT+ sCompare (SC _ _ _ _) (SA _ _ _ _) = SGT+ sCompare (SC _ _ _ _) (SB _ _ _ _) = SGT+ sCompare (SC _ _ _ _) (SD _ _ _ _) = SLT+ sCompare (SC _ _ _ _) (SE _ _ _ _) = SLT+ sCompare (SC _ _ _ _) (SF _ _ _ _) = SLT+ sCompare (SD _ _ _ _) (SA _ _ _ _) = SGT+ sCompare (SD _ _ _ _) (SB _ _ _ _) = SGT+ sCompare (SD _ _ _ _) (SC _ _ _ _) = SGT+ sCompare (SD _ _ _ _) (SE _ _ _ _) = SLT+ sCompare (SD _ _ _ _) (SF _ _ _ _) = SLT+ sCompare (SE _ _ _ _) (SA _ _ _ _) = SGT+ sCompare (SE _ _ _ _) (SB _ _ _ _) = SGT+ sCompare (SE _ _ _ _) (SC _ _ _ _) = SGT+ sCompare (SE _ _ _ _) (SD _ _ _ _) = SGT+ sCompare (SE _ _ _ _) (SF _ _ _ _) = SLT+ sCompare (SF _ _ _ _) (SA _ _ _ _) = SGT+ sCompare (SF _ _ _ _) (SB _ _ _ _) = SGT+ sCompare (SF _ _ _ _) (SC _ _ _ _) = SGT+ sCompare (SF _ _ _ _) (SD _ _ _ _) = SGT+ sCompare (SF _ _ _ _) (SE _ _ _ _) = SGT+ instance SEq Nat => SEq Nat where+ (%==) SZero SZero = STrue+ (%==) SZero (SSucc _) = SFalse+ (%==) (SSucc _) SZero = SFalse+ (%==) (SSucc a) (SSucc b) = ((%==) a) b+ instance SDecide Nat => SDecide Nat where+ (%~) SZero SZero = Proved Refl+ (%~) SZero (SSucc _) = Disproved (\ x -> case x of)+ (%~) (SSucc _) SZero = Disproved (\ x -> case x of)+ (%~) (SSucc a) (SSucc b)+ = case ((%~) a) b of+ Proved Refl -> Proved Refl+ Disproved contra+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ instance SDecide Nat =>+ Data.Type.Equality.TestEquality (SNat :: Nat+ -> GHC.Types.Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance SDecide Nat =>+ Data.Type.Coercion.TestCoercion (SNat :: Nat+ -> GHC.Types.Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance (SEq a, SEq b, SEq c, SEq d) => SEq (Foo a b c d) where+ (%==) (SA a a a a) (SA b b b b)+ = ((%&&) (((%==) a) b))+ (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))+ (%==) (SA _ _ _ _) (SB _ _ _ _) = SFalse+ (%==) (SA _ _ _ _) (SC _ _ _ _) = SFalse+ (%==) (SA _ _ _ _) (SD _ _ _ _) = SFalse+ (%==) (SA _ _ _ _) (SE _ _ _ _) = SFalse+ (%==) (SA _ _ _ _) (SF _ _ _ _) = SFalse+ (%==) (SB _ _ _ _) (SA _ _ _ _) = SFalse+ (%==) (SB a a a a) (SB b b b b)+ = ((%&&) (((%==) a) b))+ (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))+ (%==) (SB _ _ _ _) (SC _ _ _ _) = SFalse+ (%==) (SB _ _ _ _) (SD _ _ _ _) = SFalse+ (%==) (SB _ _ _ _) (SE _ _ _ _) = SFalse+ (%==) (SB _ _ _ _) (SF _ _ _ _) = SFalse+ (%==) (SC _ _ _ _) (SA _ _ _ _) = SFalse+ (%==) (SC _ _ _ _) (SB _ _ _ _) = SFalse+ (%==) (SC a a a a) (SC b b b b)+ = ((%&&) (((%==) a) b))+ (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))+ (%==) (SC _ _ _ _) (SD _ _ _ _) = SFalse+ (%==) (SC _ _ _ _) (SE _ _ _ _) = SFalse+ (%==) (SC _ _ _ _) (SF _ _ _ _) = SFalse+ (%==) (SD _ _ _ _) (SA _ _ _ _) = SFalse+ (%==) (SD _ _ _ _) (SB _ _ _ _) = SFalse+ (%==) (SD _ _ _ _) (SC _ _ _ _) = SFalse+ (%==) (SD a a a a) (SD b b b b)+ = ((%&&) (((%==) a) b))+ (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))+ (%==) (SD _ _ _ _) (SE _ _ _ _) = SFalse+ (%==) (SD _ _ _ _) (SF _ _ _ _) = SFalse+ (%==) (SE _ _ _ _) (SA _ _ _ _) = SFalse+ (%==) (SE _ _ _ _) (SB _ _ _ _) = SFalse+ (%==) (SE _ _ _ _) (SC _ _ _ _) = SFalse+ (%==) (SE _ _ _ _) (SD _ _ _ _) = SFalse+ (%==) (SE a a a a) (SE b b b b)+ = ((%&&) (((%==) a) b))+ (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))+ (%==) (SE _ _ _ _) (SF _ _ _ _) = SFalse+ (%==) (SF _ _ _ _) (SA _ _ _ _) = SFalse+ (%==) (SF _ _ _ _) (SB _ _ _ _) = SFalse+ (%==) (SF _ _ _ _) (SC _ _ _ _) = SFalse+ (%==) (SF _ _ _ _) (SD _ _ _ _) = SFalse+ (%==) (SF _ _ _ _) (SE _ _ _ _) = SFalse+ (%==) (SF a a a a) (SF b b b b)+ = ((%&&) (((%==) a) b))+ (((%&&) (((%==) a) b)) (((%&&) (((%==) a) b)) (((%==) a) b)))+ instance (SDecide a, SDecide b, SDecide c, SDecide d) =>+ SDecide (Foo a b c d) where+ (%~) (SA a a a a) (SA b b b b)+ = case+ ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)+ of+ (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)+ -> Proved Refl+ (,,,) (Disproved contra) _ _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ (Disproved contra) _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ (Disproved contra) _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ _ (Disproved contra)+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (%~) (SA _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SA _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SA _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SA _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SA _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SB _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SB a a a a) (SB b b b b)+ = case+ ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)+ of+ (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)+ -> Proved Refl+ (,,,) (Disproved contra) _ _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ (Disproved contra) _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ (Disproved contra) _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ _ (Disproved contra)+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (%~) (SB _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SB _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SB _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SB _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SC _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SC _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SC a a a a) (SC b b b b)+ = case+ ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)+ of+ (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)+ -> Proved Refl+ (,,,) (Disproved contra) _ _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ (Disproved contra) _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ (Disproved contra) _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ _ (Disproved contra)+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (%~) (SC _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SC _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SC _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SD _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SD _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SD _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SD a a a a) (SD b b b b)+ = case+ ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)+ of+ (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)+ -> Proved Refl+ (,,,) (Disproved contra) _ _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ (Disproved contra) _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ (Disproved contra) _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ _ (Disproved contra)+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (%~) (SD _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SD _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SE _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SE _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SE _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SE _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SE a a a a) (SE b b b b)+ = case+ ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)+ of+ (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)+ -> Proved Refl+ (,,,) (Disproved contra) _ _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ (Disproved contra) _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ (Disproved contra) _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ _ (Disproved contra)+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (%~) (SE _ _ _ _) (SF _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SF _ _ _ _) (SA _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SF _ _ _ _) (SB _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SF _ _ _ _) (SC _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SF _ _ _ _) (SD _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SF _ _ _ _) (SE _ _ _ _) = Disproved (\ x -> case x of)+ (%~) (SF a a a a) (SF b b b b)+ = case+ ((((,,,) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)) (((%~) a) b)+ of+ (,,,) (Proved Refl) (Proved Refl) (Proved Refl) (Proved Refl)+ -> Proved Refl+ (,,,) (Disproved contra) _ _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ (Disproved contra) _ _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ (Disproved contra) _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,,,) _ _ _ (Disproved contra)+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ instance (SDecide a, SDecide b, SDecide c, SDecide d) =>+ Data.Type.Equality.TestEquality (SFoo :: Foo a b c d+ -> GHC.Types.Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance (SDecide a, SDecide b, SDecide c, SDecide d) =>+ Data.Type.Coercion.TestCoercion (SFoo :: Foo a b c d+ -> GHC.Types.Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance SingI Zero where+ sing = SZero+ instance SingI n => SingI (Succ (n :: Nat)) where+ sing = SSucc sing+ instance SingI (SuccSym0 :: (~>) Nat Nat) where+ sing = (singFun1 @SuccSym0) SSucc+ instance (SingI n, SingI n, SingI n, SingI n) =>+ SingI (A (n :: a) (n :: b) (n :: c) (n :: d)) where+ sing = (((SA sing) sing) sing) sing+ instance SingI (ASym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where+ sing = (singFun4 @ASym0) SA+ instance SingI d =>+ SingI (ASym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+ sing = (singFun3 @(ASym1 (d :: a))) (SA (sing @d))+ instance (SingI d, SingI d) =>+ SingI (ASym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where+ sing+ = (singFun2 @(ASym2 (d :: a) (d :: b))) ((SA (sing @d)) (sing @d))+ instance (SingI d, SingI d, SingI d) =>+ SingI (ASym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where+ sing+ = (singFun1 @(ASym3 (d :: a) (d :: b) (d :: c)))+ (((SA (sing @d)) (sing @d)) (sing @d))+ instance (SingI n, SingI n, SingI n, SingI n) =>+ SingI (B (n :: a) (n :: b) (n :: c) (n :: d)) where+ sing = (((SB sing) sing) sing) sing+ instance SingI (BSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where+ sing = (singFun4 @BSym0) SB+ instance SingI d =>+ SingI (BSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+ sing = (singFun3 @(BSym1 (d :: a))) (SB (sing @d))+ instance (SingI d, SingI d) =>+ SingI (BSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where+ sing+ = (singFun2 @(BSym2 (d :: a) (d :: b))) ((SB (sing @d)) (sing @d))+ instance (SingI d, SingI d, SingI d) =>+ SingI (BSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where+ sing+ = (singFun1 @(BSym3 (d :: a) (d :: b) (d :: c)))+ (((SB (sing @d)) (sing @d)) (sing @d))+ instance (SingI n, SingI n, SingI n, SingI n) =>+ SingI (C (n :: a) (n :: b) (n :: c) (n :: d)) where+ sing = (((SC sing) sing) sing) sing+ instance SingI (CSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where+ sing = (singFun4 @CSym0) SC+ instance SingI d =>+ SingI (CSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+ sing = (singFun3 @(CSym1 (d :: a))) (SC (sing @d))+ instance (SingI d, SingI d) =>+ SingI (CSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where+ sing+ = (singFun2 @(CSym2 (d :: a) (d :: b))) ((SC (sing @d)) (sing @d))+ instance (SingI d, SingI d, SingI d) =>+ SingI (CSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where+ sing+ = (singFun1 @(CSym3 (d :: a) (d :: b) (d :: c)))+ (((SC (sing @d)) (sing @d)) (sing @d))+ instance (SingI n, SingI n, SingI n, SingI n) =>+ SingI (D (n :: a) (n :: b) (n :: c) (n :: d)) where+ sing = (((SD sing) sing) sing) sing+ instance SingI (DSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where+ sing = (singFun4 @DSym0) SD+ instance SingI d =>+ SingI (DSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+ sing = (singFun3 @(DSym1 (d :: a))) (SD (sing @d))+ instance (SingI d, SingI d) =>+ SingI (DSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where+ sing+ = (singFun2 @(DSym2 (d :: a) (d :: b))) ((SD (sing @d)) (sing @d))+ instance (SingI d, SingI d, SingI d) =>+ SingI (DSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where+ sing+ = (singFun1 @(DSym3 (d :: a) (d :: b) (d :: c)))+ (((SD (sing @d)) (sing @d)) (sing @d))+ instance (SingI n, SingI n, SingI n, SingI n) =>+ SingI (E (n :: a) (n :: b) (n :: c) (n :: d)) where+ sing = (((SE sing) sing) sing) sing+ instance SingI (ESym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where+ sing = (singFun4 @ESym0) SE+ instance SingI d =>+ SingI (ESym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+ sing = (singFun3 @(ESym1 (d :: a))) (SE (sing @d))+ instance (SingI d, SingI d) =>+ SingI (ESym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where+ sing+ = (singFun2 @(ESym2 (d :: a) (d :: b))) ((SE (sing @d)) (sing @d))+ instance (SingI d, SingI d, SingI d) =>+ SingI (ESym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where+ sing+ = (singFun1 @(ESym3 (d :: a) (d :: b) (d :: c)))+ (((SE (sing @d)) (sing @d)) (sing @d))+ instance (SingI n, SingI n, SingI n, SingI n) =>+ SingI (F (n :: a) (n :: b) (n :: c) (n :: d)) where+ sing = (((SF sing) sing) sing) sing+ instance SingI (FSym0 :: (~>) a ((~>) b ((~>) c ((~>) d (Foo a b c d))))) where+ sing = (singFun4 @FSym0) SF+ instance SingI d =>+ SingI (FSym1 (d :: a) :: (~>) b ((~>) c ((~>) d (Foo a b c d)))) where+ sing = (singFun3 @(FSym1 (d :: a))) (SF (sing @d))+ instance (SingI d, SingI d) =>+ SingI (FSym2 (d :: a) (d :: b) :: (~>) c ((~>) d (Foo a b c d))) where+ sing+ = (singFun2 @(FSym2 (d :: a) (d :: b))) ((SF (sing @d)) (sing @d))+ instance (SingI d, SingI d, SingI d) =>+ SingI (FSym3 (d :: a) (d :: b) (d :: c) :: (~>) d (Foo a b c d)) where+ sing+ = (singFun1 @(FSym3 (d :: a) (d :: b) (d :: c)))+ (((SF (sing @d)) (sing @d)) (sing @d))
− tests/compile-and-dump/Singletons/OverloadedStrings.ghc86.template
@@ -1,35 +0,0 @@-Singletons/OverloadedStrings.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| symId :: Symbol -> Symbol- symId x = x- foo :: Symbol- foo = symId "foo" |]- ======>- symId :: Symbol -> Symbol- symId x = x- foo :: Symbol- foo = symId "foo"- type SymIdSym1 (a0123456789876543210 :: Symbol) =- SymId a0123456789876543210- instance SuppressUnusedWarnings SymIdSym0 where- suppressUnusedWarnings = snd (((,) SymIdSym0KindInference) ())- data SymIdSym0 :: (~>) Symbol Symbol- where- SymIdSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply SymIdSym0 arg) (SymIdSym1 arg) =>- SymIdSym0 a0123456789876543210- type instance Apply SymIdSym0 a0123456789876543210 = SymId a0123456789876543210- type FooSym0 = Foo- type family SymId (a :: Symbol) :: Symbol where- SymId x = x- type family Foo :: Symbol where- Foo = Apply SymIdSym0 (Data.Singletons.Prelude.IsString.FromString "foo")- sSymId ::- forall (t :: Symbol). Sing t -> Sing (Apply SymIdSym0 t :: Symbol)- sFoo :: Sing (FooSym0 :: Symbol)- sSymId (sX :: Sing x) = sX- sFoo- = (applySing ((singFun1 @SymIdSym0) sSymId))- (Data.Singletons.Prelude.IsString.sFromString (sing :: Sing "foo"))- instance SingI (SymIdSym0 :: (~>) Symbol Symbol) where- sing = (singFun1 @SymIdSym0) sSymId
+ tests/compile-and-dump/Singletons/OverloadedStrings.ghc88.template view
@@ -0,0 +1,35 @@+Singletons/OverloadedStrings.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| symId :: Symbol -> Symbol+ symId x = x+ foo :: Symbol+ foo = symId "foo" |]+ ======>+ symId :: Symbol -> Symbol+ symId x = x+ foo :: Symbol+ foo = symId "foo"+ type FooSym0 = Foo+ type SymIdSym1 (a0123456789876543210 :: Symbol) =+ SymId a0123456789876543210+ instance SuppressUnusedWarnings SymIdSym0 where+ suppressUnusedWarnings = snd (((,) SymIdSym0KindInference) ())+ data SymIdSym0 :: (~>) Symbol Symbol+ where+ SymIdSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply SymIdSym0 arg) (SymIdSym1 arg) =>+ SymIdSym0 a0123456789876543210+ type instance Apply SymIdSym0 a0123456789876543210 = SymId a0123456789876543210+ type family Foo :: Symbol where+ Foo = Apply SymIdSym0 (Data.Singletons.Prelude.IsString.FromString "foo")+ type family SymId (a :: Symbol) :: Symbol where+ SymId x = x+ sFoo :: Sing (FooSym0 :: Symbol)+ sSymId ::+ forall (t :: Symbol). Sing t -> Sing (Apply SymIdSym0 t :: Symbol)+ sFoo+ = (applySing ((singFun1 @SymIdSym0) sSymId))+ (Data.Singletons.Prelude.IsString.sFromString (sing :: Sing "foo"))+ sSymId (sX :: Sing x) = sX+ instance SingI (SymIdSym0 :: (~>) Symbol Symbol) where+ sing = (singFun1 @SymIdSym0) sSymId
− tests/compile-and-dump/Singletons/PatternMatching.ghc86.template
@@ -1,574 +0,0 @@-Singletons/PatternMatching.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| pr = Pair (Succ Zero) ([Zero])- complex = Pair (Pair (Just Zero) Zero) False- tuple = (False, Just Zero, True)- aList = [Zero, Succ Zero, Succ (Succ Zero)]- - data Pair a b- = Pair a b- deriving Show |]- ======>- data Pair a b- = Pair a b- deriving Show- pr = (Pair (Succ Zero)) [Zero]- complex = (Pair ((Pair (Just Zero)) Zero)) False- tuple = (False, Just Zero, True)- aList = [Zero, Succ Zero, Succ (Succ Zero)]- type PairSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =- Pair t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (PairSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) PairSym1KindInference) ())- data PairSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210)- where- PairSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (PairSym1 t0123456789876543210) arg) (PairSym2 t0123456789876543210 arg) =>- PairSym1 t0123456789876543210 t0123456789876543210- type instance Apply (PairSym1 t0123456789876543210) t0123456789876543210 = Pair t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings PairSym0 where- suppressUnusedWarnings = snd (((,) PairSym0KindInference) ())- data PairSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210))- where- PairSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply PairSym0 arg) (PairSym1 arg) =>- PairSym0 t0123456789876543210- type instance Apply PairSym0 t0123456789876543210 = PairSym1 t0123456789876543210- type AListSym0 = AList- type TupleSym0 = Tuple- type ComplexSym0 = Complex- type PrSym0 = Pr- type family AList where- AList = Apply (Apply (:@#@$) ZeroSym0) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))) '[]))- type family Tuple where- Tuple = Apply (Apply (Apply Tuple3Sym0 FalseSym0) (Apply JustSym0 ZeroSym0)) TrueSym0- type family Complex where- Complex = Apply (Apply PairSym0 (Apply (Apply PairSym0 (Apply JustSym0 ZeroSym0)) ZeroSym0)) FalseSym0- type family Pr where- Pr = Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) ZeroSym0) '[])- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Pair a b) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 p_0123456789876543210 (Pair arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Pair ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a0123456789876543210 b0123456789876543210) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210- b0123456789876543210.- (~>) (Pair a0123456789876543210 b0123456789876543210) ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) GHC.Types.Nat ((~>) (Pair a0123456789876543210 b0123456789876543210) ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow (Pair a b) where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- sAList :: Sing AListSym0- sTuple :: Sing TupleSym0- sComplex :: Sing ComplexSym0- sPr :: Sing PrSym0- sAList- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @SuccSym0) SSucc))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))))- SNil))- sTuple- = (applySing- ((applySing ((applySing ((singFun3 @Tuple3Sym0) STuple3)) SFalse))- ((applySing ((singFun1 @JustSym0) SJust)) SZero)))- STrue- sComplex- = (applySing- ((applySing ((singFun2 @PairSym0) SPair))- ((applySing- ((applySing ((singFun2 @PairSym0) SPair))- ((applySing ((singFun1 @JustSym0) SJust)) SZero)))- SZero)))- SFalse- sPr- = (applySing- ((applySing ((singFun2 @PairSym0) SPair))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero)) SNil)- data instance Sing :: Pair a b -> GHC.Types.Type- where- SPair :: forall a b (n :: a) (n :: b).- (Sing (n :: a)) -> (Sing (n :: b)) -> Sing (Pair n n)- type SPair = (Sing :: Pair a b -> GHC.Types.Type)- instance (SingKind a, SingKind b) => SingKind (Pair a b) where- type Demote (Pair a b) = Pair (Demote a) (Demote b)- fromSing (SPair b b) = (Pair (fromSing b)) (fromSing b)- toSing (Pair (b :: Demote a) (b :: Demote b))- = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c) }- instance (SShow a, SShow b) => SShow (Pair a b) where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: Pair a b) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Pair a b) ((~>) Symbol Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SPair (sArg_0123456789876543210 :: Sing arg_0123456789876543210)- (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Pair "))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @ShowSpaceSym0) sShowSpace)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))))- sA_0123456789876543210- deriving instance (Data.Singletons.ShowSing.ShowSing a,- Data.Singletons.ShowSing.ShowSing b) =>- Show (Sing (z :: Pair a b))- instance (SingI n, SingI n) => SingI (Pair (n :: a) (n :: b)) where- sing = (SPair sing) sing- instance SingI (PairSym0 :: (~>) a ((~>) b (Pair a b))) where- sing = (singFun2 @PairSym0) SPair- instance SingI (TyCon2 Pair :: (~>) a ((~>) b (Pair a b))) where- sing = (singFun2 @(TyCon2 Pair)) SPair- instance SingI d =>- SingI (PairSym1 (d :: a) :: (~>) b (Pair a b)) where- sing = (singFun1 @(PairSym1 (d :: a))) (SPair (sing @d))- instance SingI d =>- SingI (TyCon1 (Pair (d :: a)) :: (~>) b (Pair a b)) where- sing = (singFun1 @(TyCon1 (Pair (d :: a)))) (SPair (sing @d))-Singletons/PatternMatching.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| Pair sz lz = pr- Pair (Pair jz zz) fls = complex- (tf, tjz, tt) = tuple- [_, lsz, (Succ blimy)] = aList- lsz :: Nat- fls :: Bool- foo1 :: (a, b) -> a- foo1 (x, y) = (\ _ -> x) y- foo2 :: (# a, b #) -> a- foo2 t@(# x, y #) = case t of { (# a, b #) -> (\ _ -> a) b }- silly :: a -> ()- silly x = case x of { _ -> () } |]- ======>- Pair sz lz = pr- Pair (Pair jz zz) fls = complex- (tf, tjz, tt) = tuple- [_, lsz, Succ blimy] = aList- lsz :: Nat- fls :: Bool- foo1 :: (a, b) -> a- foo1 (x, y) = (\ _ -> x) y- foo2 :: (# a, b #) -> a- foo2 t@(# x, y #) = case t of { (# a, b #) -> (\ _ -> a) b }- silly :: a -> ()- silly x = case x of { _ -> () }- type family Case_0123456789876543210 x t where- Case_0123456789876543210 x _ = Tuple0Sym0- type Let0123456789876543210TSym2 x0123456789876543210 y0123456789876543210 =- Let0123456789876543210T x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210TSym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210TSym1KindInference) ())- data Let0123456789876543210TSym1 x0123456789876543210 y0123456789876543210- where- Let0123456789876543210TSym1KindInference :: forall x0123456789876543210- y0123456789876543210- arg. SameKind (Apply (Let0123456789876543210TSym1 x0123456789876543210) arg) (Let0123456789876543210TSym2 x0123456789876543210 arg) =>- Let0123456789876543210TSym1 x0123456789876543210 y0123456789876543210- type instance Apply (Let0123456789876543210TSym1 x0123456789876543210) y0123456789876543210 = Let0123456789876543210T x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210TSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210TSym0KindInference) ())- data Let0123456789876543210TSym0 x0123456789876543210- where- Let0123456789876543210TSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210TSym0 arg) (Let0123456789876543210TSym1 arg) =>- Let0123456789876543210TSym0 x0123456789876543210- type instance Apply Let0123456789876543210TSym0 x0123456789876543210 = Let0123456789876543210TSym1 x0123456789876543210- type family Let0123456789876543210T x y where- Let0123456789876543210T x y = Apply (Apply Tuple2Sym0 x) y- type family Case_0123456789876543210 x y a b arg_0123456789876543210 t where- Case_0123456789876543210 x y a b arg_0123456789876543210 _ = a- type family Lambda_0123456789876543210 x y a b t where- Lambda_0123456789876543210 x y a b arg_0123456789876543210 = Case_0123456789876543210 x y a b arg_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym5 x0123456789876543210 y0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 b0123456789876543210 a0123456789876543210 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())- data Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym4KindInference :: forall x0123456789876543210- y0123456789876543210- a0123456789876543210- b0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 a0123456789876543210 b0123456789876543210) arg) (Lambda_0123456789876543210Sym5 x0123456789876543210 y0123456789876543210 a0123456789876543210 b0123456789876543210 arg) =>- Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 a0123456789876543210 b0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym4 b0123456789876543210 a0123456789876543210 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 b0123456789876543210 a0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a0123456789876543210 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 a0123456789876543210 b0123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall x0123456789876543210- y0123456789876543210- a0123456789876543210- b0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 a0123456789876543210) arg) (Lambda_0123456789876543210Sym4 x0123456789876543210 y0123456789876543210 a0123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 a0123456789876543210 b0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 a0123456789876543210 y0123456789876543210 x0123456789876543210) b0123456789876543210 = Lambda_0123456789876543210Sym4 a0123456789876543210 y0123456789876543210 x0123456789876543210 b0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 a0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210- y0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 a0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) a0123456789876543210 = Lambda_0123456789876543210Sym3 y0123456789876543210 x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- y0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Case_0123456789876543210 x y t where- Case_0123456789876543210 x y '(a,- b) = Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) a) b) b- type family Case_0123456789876543210 x y arg_0123456789876543210 t where- Case_0123456789876543210 x y arg_0123456789876543210 _ = x- type family Lambda_0123456789876543210 x y t where- Lambda_0123456789876543210 x y arg_0123456789876543210 = Case_0123456789876543210 x y arg_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210- y0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- y0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 '[_,- y_0123456789876543210,- 'Succ _] = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 '[_,- _,- 'Succ y_0123456789876543210] = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 '(y_0123456789876543210,- _,- _) = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 '(_,- y_0123456789876543210,- _) = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 '(_,- _,- y_0123456789876543210) = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 ( 'Pair ( 'Pair y_0123456789876543210 _) _) = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 ( 'Pair ( 'Pair _ y_0123456789876543210) _) = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 ( 'Pair ( 'Pair _ _) y_0123456789876543210) = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 ( 'Pair y_0123456789876543210 _) = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 ( 'Pair _ y_0123456789876543210) = y_0123456789876543210- type SillySym1 (a0123456789876543210 :: a0123456789876543210) =- Silly a0123456789876543210- instance SuppressUnusedWarnings SillySym0 where- suppressUnusedWarnings = snd (((,) SillySym0KindInference) ())- data SillySym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ()- where- SillySym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply SillySym0 arg) (SillySym1 arg) =>- SillySym0 a0123456789876543210- type instance Apply SillySym0 a0123456789876543210 = Silly a0123456789876543210- type Foo2Sym1 (a0123456789876543210 :: (a0123456789876543210,- b0123456789876543210)) =- Foo2 a0123456789876543210- instance SuppressUnusedWarnings Foo2Sym0 where- suppressUnusedWarnings = snd (((,) Foo2Sym0KindInference) ())- data Foo2Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) (a0123456789876543210,- b0123456789876543210) a0123456789876543210- where- Foo2Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo2Sym0 arg) (Foo2Sym1 arg) =>- Foo2Sym0 a0123456789876543210- type instance Apply Foo2Sym0 a0123456789876543210 = Foo2 a0123456789876543210- type Foo1Sym1 (a0123456789876543210 :: (a0123456789876543210,- b0123456789876543210)) =- Foo1 a0123456789876543210- instance SuppressUnusedWarnings Foo1Sym0 where- suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())- data Foo1Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) (a0123456789876543210,- b0123456789876543210) a0123456789876543210- where- Foo1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>- Foo1Sym0 a0123456789876543210- type instance Apply Foo1Sym0 a0123456789876543210 = Foo1 a0123456789876543210- type LszSym0 = Lsz- type BlimySym0 = Blimy- type TfSym0 = Tf- type TjzSym0 = Tjz- type TtSym0 = Tt- type JzSym0 = Jz- type ZzSym0 = Zz- type FlsSym0 = Fls- type SzSym0 = Sz- type LzSym0 = Lz- type X_0123456789876543210Sym0 = X_0123456789876543210- type X_0123456789876543210Sym0 = X_0123456789876543210- type X_0123456789876543210Sym0 = X_0123456789876543210- type X_0123456789876543210Sym0 = X_0123456789876543210- type family Silly (a :: a) :: () where- Silly x = Case_0123456789876543210 x x- type family Foo2 (a :: (a, b)) :: a where- Foo2 '(x,- y) = Case_0123456789876543210 x y (Let0123456789876543210TSym2 x y)- type family Foo1 (a :: (a, b)) :: a where- Foo1 '(x,- y) = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) y- type family Lsz :: Nat where- Lsz = Case_0123456789876543210 X_0123456789876543210Sym0- type family Blimy where- Blimy = Case_0123456789876543210 X_0123456789876543210Sym0- type family Tf where- Tf = Case_0123456789876543210 X_0123456789876543210Sym0- type family Tjz where- Tjz = Case_0123456789876543210 X_0123456789876543210Sym0- type family Tt where- Tt = Case_0123456789876543210 X_0123456789876543210Sym0- type family Jz where- Jz = Case_0123456789876543210 X_0123456789876543210Sym0- type family Zz where- Zz = Case_0123456789876543210 X_0123456789876543210Sym0- type family Fls :: Bool where- Fls = Case_0123456789876543210 X_0123456789876543210Sym0- type family Sz where- Sz = Case_0123456789876543210 X_0123456789876543210Sym0- type family Lz where- Lz = Case_0123456789876543210 X_0123456789876543210Sym0- type family X_0123456789876543210 where- X_0123456789876543210 = PrSym0- type family X_0123456789876543210 where- X_0123456789876543210 = ComplexSym0- type family X_0123456789876543210 where- X_0123456789876543210 = TupleSym0- type family X_0123456789876543210 where- X_0123456789876543210 = AListSym0- sSilly ::- forall a (t :: a). Sing t -> Sing (Apply SillySym0 t :: ())- sFoo2 ::- forall a b (t :: (a, b)). Sing t -> Sing (Apply Foo2Sym0 t :: a)- sFoo1 ::- forall a b (t :: (a, b)). Sing t -> Sing (Apply Foo1Sym0 t :: a)- sLsz :: Sing (LszSym0 :: Nat)- sBlimy :: Sing BlimySym0- sTf :: Sing TfSym0- sTjz :: Sing TjzSym0- sTt :: Sing TtSym0- sJz :: Sing JzSym0- sZz :: Sing ZzSym0- sFls :: Sing (FlsSym0 :: Bool)- sSz :: Sing SzSym0- sLz :: Sing LzSym0- sX_0123456789876543210 :: Sing X_0123456789876543210Sym0- sX_0123456789876543210 :: Sing X_0123456789876543210Sym0- sX_0123456789876543210 :: Sing X_0123456789876543210Sym0- sX_0123456789876543210 :: Sing X_0123456789876543210Sym0- sSilly (sX :: Sing x)- = (case sX of { _ -> STuple0 }) ::- Sing (Case_0123456789876543210 x x :: ())- sFoo2 (STuple2 (sX :: Sing x) (sY :: Sing y))- = let- sT :: Sing (Let0123456789876543210TSym2 x y)- sT- = (applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX)) sY- in (case sT of {- STuple2 (sA :: Sing a) (sB :: Sing b)- -> (applySing- ((singFun1- @(Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) a) b))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of { _ -> sA }) ::- Sing (Case_0123456789876543210 x y a b arg_0123456789876543210 arg_0123456789876543210) })))- sB }) ::- Sing (Case_0123456789876543210 x y (Let0123456789876543210TSym2 x y) :: a)- sFoo1 (STuple2 (sX :: Sing x) (sY :: Sing y))- = (applySing- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of { _ -> sX }) ::- Sing (Case_0123456789876543210 x y arg_0123456789876543210 arg_0123456789876543210) })))- sY- sLsz- = (case sX_0123456789876543210 of {- SCons _- (SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)- (SCons (SSucc _) SNil))- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Nat)- sBlimy- = (case sX_0123456789876543210 of {- SCons _- (SCons _- (SCons (SSucc (sY_0123456789876543210 :: Sing y_0123456789876543210))- SNil))- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0)- sTf- = (case sX_0123456789876543210 of {- STuple3 (sY_0123456789876543210 :: Sing y_0123456789876543210) _ _- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0)- sTjz- = (case sX_0123456789876543210 of {- STuple3 _ (sY_0123456789876543210 :: Sing y_0123456789876543210) _- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0)- sTt- = (case sX_0123456789876543210 of {- STuple3 _ _ (sY_0123456789876543210 :: Sing y_0123456789876543210)- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0)- sJz- = (case sX_0123456789876543210 of {- SPair (SPair (sY_0123456789876543210 :: Sing y_0123456789876543210)- _)- _- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0)- sZz- = (case sX_0123456789876543210 of {- SPair (SPair _- (sY_0123456789876543210 :: Sing y_0123456789876543210))- _- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0)- sFls- = (case sX_0123456789876543210 of {- SPair (SPair _ _)- (sY_0123456789876543210 :: Sing y_0123456789876543210)- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)- sSz- = (case sX_0123456789876543210 of {- SPair (sY_0123456789876543210 :: Sing y_0123456789876543210) _- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0)- sLz- = (case sX_0123456789876543210 of {- SPair _ (sY_0123456789876543210 :: Sing y_0123456789876543210)- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0)- sX_0123456789876543210 = sPr- sX_0123456789876543210 = sComplex- sX_0123456789876543210 = sTuple- sX_0123456789876543210 = sAList- instance SingI (SillySym0 :: (~>) a ()) where- sing = (singFun1 @SillySym0) sSilly- instance SingI (Foo2Sym0 :: (~>) (a, b) a) where- sing = (singFun1 @Foo2Sym0) sFoo2- instance SingI (Foo1Sym0 :: (~>) (a, b) a) where- sing = (singFun1 @Foo1Sym0) sFoo1
+ tests/compile-and-dump/Singletons/PatternMatching.ghc88.template view
@@ -0,0 +1,587 @@+Singletons/PatternMatching.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| pr = Pair (Succ Zero) ([Zero])+ complex = Pair (Pair (Just Zero) Zero) False+ tuple = (False, Just Zero, True)+ aList = [Zero, Succ Zero, Succ (Succ Zero)]+ + data Pair a b+ = Pair a b+ deriving Show |]+ ======>+ data Pair a b+ = Pair a b+ deriving Show+ pr = (Pair (Succ Zero)) [Zero]+ complex = (Pair ((Pair (Just Zero)) Zero)) False+ tuple = (False, Just Zero, True)+ aList = [Zero, Succ Zero, Succ (Succ Zero)]+ type PairSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =+ Pair t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (PairSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) PairSym1KindInference) ())+ data PairSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210)+ where+ PairSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (PairSym1 t0123456789876543210) arg) (PairSym2 t0123456789876543210 arg) =>+ PairSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (PairSym1 t0123456789876543210) t0123456789876543210 = Pair t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings PairSym0 where+ suppressUnusedWarnings = snd (((,) PairSym0KindInference) ())+ data PairSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210))+ where+ PairSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply PairSym0 arg) (PairSym1 arg) =>+ PairSym0 t0123456789876543210+ type instance Apply PairSym0 t0123456789876543210 = PairSym1 t0123456789876543210+ type AListSym0 = AList+ type TupleSym0 = Tuple+ type ComplexSym0 = Complex+ type PrSym0 = Pr+ type family AList where+ AList = Apply (Apply (:@#@$) ZeroSym0) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) (Apply SuccSym0 (Apply SuccSym0 ZeroSym0))) '[]))+ type family Tuple where+ Tuple = Apply (Apply (Apply Tuple3Sym0 FalseSym0) (Apply JustSym0 ZeroSym0)) TrueSym0+ type family Complex where+ Complex = Apply (Apply PairSym0 (Apply (Apply PairSym0 (Apply JustSym0 ZeroSym0)) ZeroSym0)) FalseSym0+ type family Pr where+ Pr = Apply (Apply PairSym0 (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) ZeroSym0) '[])+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Pair a b) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 p_0123456789876543210 (Pair arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Pair ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Pair a0123456789876543210 b0123456789876543210) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210+ b0123456789876543210.+ (~>) (Pair a0123456789876543210 b0123456789876543210) ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) GHC.Types.Nat ((~>) (Pair a0123456789876543210 b0123456789876543210) ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow (Pair a b) where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ sAList :: Sing AListSym0+ sTuple :: Sing TupleSym0+ sComplex :: Sing ComplexSym0+ sPr :: Sing PrSym0+ sAList+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))))+ SNil))+ sTuple+ = (applySing+ ((applySing ((applySing ((singFun3 @Tuple3Sym0) STuple3)) SFalse))+ ((applySing ((singFun1 @JustSym0) SJust)) SZero)))+ STrue+ sComplex+ = (applySing+ ((applySing ((singFun2 @PairSym0) SPair))+ ((applySing+ ((applySing ((singFun2 @PairSym0) SPair))+ ((applySing ((singFun1 @JustSym0) SJust)) SZero)))+ SZero)))+ SFalse+ sPr+ = (applySing+ ((applySing ((singFun2 @PairSym0) SPair))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero)) SNil)+ data SPair :: forall a b. Pair a b -> GHC.Types.Type+ where+ SPair :: forall a b (n :: a) (n :: b).+ (Sing (n :: a)) -> (Sing (n :: b)) -> SPair (Pair n n)+ type instance Sing @(Pair a b) = SPair+ instance (SingKind a, SingKind b) => SingKind (Pair a b) where+ type Demote (Pair a b) = Pair (Demote a) (Demote b)+ fromSing (SPair b b) = (Pair (fromSing b)) (fromSing b)+ toSing (Pair (b :: Demote a) (b :: Demote b))+ = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SPair c) c) }+ instance (SShow a, SShow b) => SShow (Pair a b) where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: Pair a b) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Pair a b) ((~>) Symbol Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SPair (sArg_0123456789876543210 :: Sing arg_0123456789876543210)+ (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Pair "))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @ShowSpaceSym0) sShowSpace)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))))+ sA_0123456789876543210+ instance (Data.Singletons.ShowSing.ShowSing a,+ Data.Singletons.ShowSing.ShowSing b) =>+ Show (SPair (z :: Pair a b)) where+ showsPrec+ p_0123456789876543210+ (SPair (arg_0123456789876543210 :: Sing argTy_0123456789876543210)+ (arg_0123456789876543210 :: Sing argTy_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 10))+ (((.) (showString "SPair "))+ (((.) ((showsPrec 11) arg_0123456789876543210))+ (((.) GHC.Show.showSpace)+ ((showsPrec 11) arg_0123456789876543210)))) ::+ (Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210,+ Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210) =>+ ShowS+ instance (SingI n, SingI n) => SingI (Pair (n :: a) (n :: b)) where+ sing = (SPair sing) sing+ instance SingI (PairSym0 :: (~>) a ((~>) b (Pair a b))) where+ sing = (singFun2 @PairSym0) SPair+ instance SingI d =>+ SingI (PairSym1 (d :: a) :: (~>) b (Pair a b)) where+ sing = (singFun1 @(PairSym1 (d :: a))) (SPair (sing @d))+Singletons/PatternMatching.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| Pair sz lz = pr+ Pair (Pair jz zz) fls = complex+ (tf, tjz, tt) = tuple+ [_, lsz, (Succ blimy)] = aList+ lsz :: Nat+ fls :: Bool+ foo1 :: (a, b) -> a+ foo1 (x, y) = (\ _ -> x) y+ foo2 :: (# a, b #) -> a+ foo2 t@(# x, y #) = case t of { (# a, b #) -> (\ _ -> a) b }+ silly :: a -> ()+ silly x = case x of { _ -> () } |]+ ======>+ Pair sz lz = pr+ Pair (Pair jz zz) fls = complex+ (tf, tjz, tt) = tuple+ [_, lsz, Succ blimy] = aList+ lsz :: Nat+ fls :: Bool+ foo1 :: (a, b) -> a+ foo1 (x, y) = (\ _ -> x) y+ foo2 :: (# a, b #) -> a+ foo2 t@(# x, y #) = case t of { (# a, b #) -> (\ _ -> a) b }+ silly :: a -> ()+ silly x = case x of { _ -> () }+ type family Case_0123456789876543210 x t where+ Case_0123456789876543210 x _ = Tuple0Sym0+ type Let0123456789876543210TSym2 x0123456789876543210 y0123456789876543210 =+ Let0123456789876543210T x0123456789876543210 y0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210TSym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210TSym1KindInference) ())+ data Let0123456789876543210TSym1 x0123456789876543210 y0123456789876543210+ where+ Let0123456789876543210TSym1KindInference :: forall x0123456789876543210+ y0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210TSym1 x0123456789876543210) arg) (Let0123456789876543210TSym2 x0123456789876543210 arg) =>+ Let0123456789876543210TSym1 x0123456789876543210 y0123456789876543210+ type instance Apply (Let0123456789876543210TSym1 x0123456789876543210) y0123456789876543210 = Let0123456789876543210T x0123456789876543210 y0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210TSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210TSym0KindInference) ())+ data Let0123456789876543210TSym0 x0123456789876543210+ where+ Let0123456789876543210TSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210TSym0 arg) (Let0123456789876543210TSym1 arg) =>+ Let0123456789876543210TSym0 x0123456789876543210+ type instance Apply Let0123456789876543210TSym0 x0123456789876543210 = Let0123456789876543210TSym1 x0123456789876543210+ type family Let0123456789876543210T x y where+ Let0123456789876543210T x y = Apply (Apply Tuple2Sym0 x) y+ type family Case_0123456789876543210 arg_0123456789876543210 a b x y t where+ Case_0123456789876543210 arg_0123456789876543210 a b x y _ = a+ type family Lambda_0123456789876543210 a b x y t where+ Lambda_0123456789876543210 a b x y arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 a b x y arg_0123456789876543210+ type Lambda_0123456789876543210Sym5 a0123456789876543210 b0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 a0123456789876543210 b0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym4 y0123456789876543210 x0123456789876543210 b0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym4KindInference) ())+ data Lambda_0123456789876543210Sym4 a0123456789876543210 b0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym4KindInference :: forall a0123456789876543210+ b0123456789876543210+ x0123456789876543210+ y0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym4 a0123456789876543210 b0123456789876543210 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym5 a0123456789876543210 b0123456789876543210 x0123456789876543210 y0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym4 a0123456789876543210 b0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym4 y0123456789876543210 x0123456789876543210 b0123456789876543210 a0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 b0123456789876543210 a0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 x0123456789876543210 b0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 x0123456789876543210 y0123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall a0123456789876543210+ b0123456789876543210+ x0123456789876543210+ y0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 x0123456789876543210) arg) (Lambda_0123456789876543210Sym4 a0123456789876543210 b0123456789876543210 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 x0123456789876543210 y0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 x0123456789876543210 b0123456789876543210 a0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym4 x0123456789876543210 b0123456789876543210 a0123456789876543210 y0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 x0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ b0123456789876543210+ x0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210) arg) (Lambda_0123456789876543210Sym3 a0123456789876543210 b0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210 x0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 b0123456789876543210 a0123456789876543210) x0123456789876543210 = Lambda_0123456789876543210Sym3 b0123456789876543210 a0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ b0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) arg) (Lambda_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 a0123456789876543210 b0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) b0123456789876543210 = Lambda_0123456789876543210Sym2 a0123456789876543210 b0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 a0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 a0123456789876543210 = Lambda_0123456789876543210Sym1 a0123456789876543210+ type family Case_0123456789876543210 x y t where+ Case_0123456789876543210 x y '(a,+ b) = Apply (Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) b) x) y) b+ type family Case_0123456789876543210 arg_0123456789876543210 x y t where+ Case_0123456789876543210 arg_0123456789876543210 x y _ = x+ type family Lambda_0123456789876543210 x y t where+ Lambda_0123456789876543210 x y arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 x y arg_0123456789876543210+ type Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 y0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210+ y0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 y0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 y0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 y0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ y0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 y0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) y0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 y0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 '[_,+ _,+ 'Succ y_0123456789876543210] = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 '[_,+ y_0123456789876543210,+ 'Succ _] = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 '(_,+ _,+ y_0123456789876543210) = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 '(_,+ y_0123456789876543210,+ _) = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 '(y_0123456789876543210,+ _,+ _) = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 ('Pair ('Pair _ _) y_0123456789876543210) = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 ('Pair ('Pair _ y_0123456789876543210) _) = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 ('Pair ('Pair y_0123456789876543210 _) _) = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 ('Pair _ y_0123456789876543210) = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 ('Pair y_0123456789876543210 _) = y_0123456789876543210+ type SillySym1 (a0123456789876543210 :: a0123456789876543210) =+ Silly a0123456789876543210+ instance SuppressUnusedWarnings SillySym0 where+ suppressUnusedWarnings = snd (((,) SillySym0KindInference) ())+ data SillySym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ()+ where+ SillySym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply SillySym0 arg) (SillySym1 arg) =>+ SillySym0 a0123456789876543210+ type instance Apply SillySym0 a0123456789876543210 = Silly a0123456789876543210+ type Foo2Sym1 (a0123456789876543210 :: (a0123456789876543210,+ b0123456789876543210)) =+ Foo2 a0123456789876543210+ instance SuppressUnusedWarnings Foo2Sym0 where+ suppressUnusedWarnings = snd (((,) Foo2Sym0KindInference) ())+ data Foo2Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) (a0123456789876543210,+ b0123456789876543210) a0123456789876543210+ where+ Foo2Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo2Sym0 arg) (Foo2Sym1 arg) =>+ Foo2Sym0 a0123456789876543210+ type instance Apply Foo2Sym0 a0123456789876543210 = Foo2 a0123456789876543210+ type Foo1Sym1 (a0123456789876543210 :: (a0123456789876543210,+ b0123456789876543210)) =+ Foo1 a0123456789876543210+ instance SuppressUnusedWarnings Foo1Sym0 where+ suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())+ data Foo1Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) (a0123456789876543210,+ b0123456789876543210) a0123456789876543210+ where+ Foo1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>+ Foo1Sym0 a0123456789876543210+ type instance Apply Foo1Sym0 a0123456789876543210 = Foo1 a0123456789876543210+ type BlimySym0 = Blimy+ type LszSym0 = Lsz+ type X_0123456789876543210Sym0 = X_0123456789876543210+ type TtSym0 = Tt+ type TjzSym0 = Tjz+ type TfSym0 = Tf+ type X_0123456789876543210Sym0 = X_0123456789876543210+ type FlsSym0 = Fls+ type ZzSym0 = Zz+ type JzSym0 = Jz+ type X_0123456789876543210Sym0 = X_0123456789876543210+ type LzSym0 = Lz+ type SzSym0 = Sz+ type X_0123456789876543210Sym0 = X_0123456789876543210+ type family Silly (a :: a) :: () where+ Silly x = Case_0123456789876543210 x x+ type family Foo2 (a :: (a, b)) :: a where+ Foo2 '(x,+ y) = Case_0123456789876543210 x y (Let0123456789876543210TSym2 x y)+ type family Foo1 (a :: (a, b)) :: a where+ Foo1 '(x,+ y) = Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) y) y+ type family Blimy where+ Blimy = Case_0123456789876543210 X_0123456789876543210Sym0+ type family Lsz :: Nat where+ Lsz = Case_0123456789876543210 X_0123456789876543210Sym0+ type family X_0123456789876543210 where+ X_0123456789876543210 = AListSym0+ type family Tt where+ Tt = Case_0123456789876543210 X_0123456789876543210Sym0+ type family Tjz where+ Tjz = Case_0123456789876543210 X_0123456789876543210Sym0+ type family Tf where+ Tf = Case_0123456789876543210 X_0123456789876543210Sym0+ type family X_0123456789876543210 where+ X_0123456789876543210 = TupleSym0+ type family Fls :: Bool where+ Fls = Case_0123456789876543210 X_0123456789876543210Sym0+ type family Zz where+ Zz = Case_0123456789876543210 X_0123456789876543210Sym0+ type family Jz where+ Jz = Case_0123456789876543210 X_0123456789876543210Sym0+ type family X_0123456789876543210 where+ X_0123456789876543210 = ComplexSym0+ type family Lz where+ Lz = Case_0123456789876543210 X_0123456789876543210Sym0+ type family Sz where+ Sz = Case_0123456789876543210 X_0123456789876543210Sym0+ type family X_0123456789876543210 where+ X_0123456789876543210 = PrSym0+ sSilly ::+ forall a (t :: a). Sing t -> Sing (Apply SillySym0 t :: ())+ sFoo2 ::+ forall a b (t :: (a, b)). Sing t -> Sing (Apply Foo2Sym0 t :: a)+ sFoo1 ::+ forall a b (t :: (a, b)). Sing t -> Sing (Apply Foo1Sym0 t :: a)+ sBlimy :: Sing BlimySym0+ sLsz :: Sing (LszSym0 :: Nat)+ sX_0123456789876543210 :: Sing X_0123456789876543210Sym0+ sTt :: Sing TtSym0+ sTjz :: Sing TjzSym0+ sTf :: Sing TfSym0+ sX_0123456789876543210 :: Sing X_0123456789876543210Sym0+ sFls :: Sing (FlsSym0 :: Bool)+ sZz :: Sing ZzSym0+ sJz :: Sing JzSym0+ sX_0123456789876543210 :: Sing X_0123456789876543210Sym0+ sLz :: Sing LzSym0+ sSz :: Sing SzSym0+ sX_0123456789876543210 :: Sing X_0123456789876543210Sym0+ sSilly (sX :: Sing x)+ = (id @(Sing (Case_0123456789876543210 x x :: ())))+ (case sX of { _ -> STuple0 })+ sFoo2 (STuple2 (sX :: Sing x) (sY :: Sing y))+ = let+ sT :: Sing (Let0123456789876543210TSym2 x y)+ sT+ = (applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX)) sY+ in+ (id+ @(Sing (Case_0123456789876543210 x y (Let0123456789876543210TSym2 x y) :: a)))+ (case sT of {+ STuple2 (sA :: Sing a) (sB :: Sing b)+ -> (applySing+ ((singFun1+ @(Apply (Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) b) x) y))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 a b x y arg_0123456789876543210)))+ (case sArg_0123456789876543210 of { _ -> sA }) })))+ sB })+ sFoo1 (STuple2 (sX :: Sing x) (sY :: Sing y))+ = (applySing+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 x) y))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 x y arg_0123456789876543210)))+ (case sArg_0123456789876543210 of { _ -> sX }) })))+ sY+ sBlimy+ = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ SCons _+ (SCons _+ (SCons (SSucc (sY_0123456789876543210 :: Sing y_0123456789876543210))+ SNil))+ -> sY_0123456789876543210 })+ sLsz+ = (id+ @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Nat)))+ (case sX_0123456789876543210 of {+ SCons _+ (SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)+ (SCons (SSucc _) SNil))+ -> sY_0123456789876543210 })+ sX_0123456789876543210 = sAList+ sTt+ = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ STuple3 _ _ (sY_0123456789876543210 :: Sing y_0123456789876543210)+ -> sY_0123456789876543210 })+ sTjz+ = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ STuple3 _ (sY_0123456789876543210 :: Sing y_0123456789876543210) _+ -> sY_0123456789876543210 })+ sTf+ = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ STuple3 (sY_0123456789876543210 :: Sing y_0123456789876543210) _ _+ -> sY_0123456789876543210 })+ sX_0123456789876543210 = sTuple+ sFls+ = (id+ @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))+ (case sX_0123456789876543210 of {+ SPair (SPair _ _)+ (sY_0123456789876543210 :: Sing y_0123456789876543210)+ -> sY_0123456789876543210 })+ sZz+ = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ SPair (SPair _+ (sY_0123456789876543210 :: Sing y_0123456789876543210))+ _+ -> sY_0123456789876543210 })+ sJz+ = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ SPair (SPair (sY_0123456789876543210 :: Sing y_0123456789876543210)+ _)+ _+ -> sY_0123456789876543210 })+ sX_0123456789876543210 = sComplex+ sLz+ = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ SPair _ (sY_0123456789876543210 :: Sing y_0123456789876543210)+ -> sY_0123456789876543210 })+ sSz+ = (id @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ SPair (sY_0123456789876543210 :: Sing y_0123456789876543210) _+ -> sY_0123456789876543210 })+ sX_0123456789876543210 = sPr+ instance SingI (SillySym0 :: (~>) a ()) where+ sing = (singFun1 @SillySym0) sSilly+ instance SingI (Foo2Sym0 :: (~>) (a, b) a) where+ sing = (singFun1 @Foo2Sym0) sFoo2+ instance SingI (Foo1Sym0 :: (~>) (a, b) a) where+ sing = (singFun1 @Foo1Sym0) sFoo1
− tests/compile-and-dump/Singletons/PolyKinds.ghc86.template
@@ -1,28 +0,0 @@-Singletons/PolyKinds.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| class Cls (a :: k) where- fff :: Proxy (a :: k) -> () |]- ======>- class Cls (a :: k) where- fff :: Proxy (a :: k) -> ()- type FffSym1 (arg0123456789876543210 :: Proxy (a0123456789876543210 :: k0123456789876543210)) =- Fff arg0123456789876543210- instance SuppressUnusedWarnings FffSym0 where- suppressUnusedWarnings = snd (((,) FffSym0KindInference) ())- data FffSym0 :: forall k0123456789876543210- (a0123456789876543210 :: k0123456789876543210).- (~>) (Proxy (a0123456789876543210 :: k0123456789876543210)) ()- where- FffSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply FffSym0 arg) (FffSym1 arg) =>- FffSym0 arg0123456789876543210- type instance Apply FffSym0 arg0123456789876543210 = Fff arg0123456789876543210- class PCls (a :: k) where- type Fff (arg :: Proxy (a :: k)) :: ()- class SCls (a :: k) where- sFff ::- forall (t :: Proxy (a :: k)).- Sing t -> Sing (Apply FffSym0 t :: ())- instance SCls a =>- SingI (FffSym0 :: (~>) (Proxy (a :: k)) ()) where- sing = (singFun1 @FffSym0) sFff
+ tests/compile-and-dump/Singletons/PolyKinds.ghc88.template view
@@ -0,0 +1,28 @@+Singletons/PolyKinds.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| class Cls (a :: k) where+ fff :: Proxy (a :: k) -> () |]+ ======>+ class Cls (a :: k) where+ fff :: Proxy (a :: k) -> ()+ type FffSym1 (arg0123456789876543210 :: Proxy (a0123456789876543210 :: k0123456789876543210)) =+ Fff arg0123456789876543210+ instance SuppressUnusedWarnings FffSym0 where+ suppressUnusedWarnings = snd (((,) FffSym0KindInference) ())+ data FffSym0 :: forall k0123456789876543210+ (a0123456789876543210 :: k0123456789876543210).+ (~>) (Proxy (a0123456789876543210 :: k0123456789876543210)) ()+ where+ FffSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply FffSym0 arg) (FffSym1 arg) =>+ FffSym0 arg0123456789876543210+ type instance Apply FffSym0 arg0123456789876543210 = Fff arg0123456789876543210+ class PCls (a :: k) where+ type Fff (arg :: Proxy (a :: k)) :: ()+ class SCls (a :: k) where+ sFff ::+ forall (t :: Proxy (a :: k)).+ Sing t -> Sing (Apply FffSym0 t :: ())+ instance SCls a =>+ SingI (FffSym0 :: (~>) (Proxy (a :: k)) ()) where+ sing = (singFun1 @FffSym0) sFff
− tests/compile-and-dump/Singletons/PolyKindsApp.ghc86.template
@@ -1,12 +0,0 @@-Singletons/PolyKindsApp.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| class Cls (a :: k -> Type) where- fff :: (a :: k -> Type) (b :: k) |]- ======>- class Cls (a :: k -> Type) where- fff :: (a :: k -> Type) (b :: k)- type FffSym0 = Fff- class PCls (a :: k -> Type) where- type Fff :: (a :: k -> Type) (b :: k)- class SCls (a :: k -> Type) where- sFff :: forall b. Sing (FffSym0 :: (a :: k -> Type) (b :: k))
+ tests/compile-and-dump/Singletons/PolyKindsApp.ghc88.template view
@@ -0,0 +1,12 @@+Singletons/PolyKindsApp.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| class Cls (a :: k -> Type) where+ fff :: (a :: k -> Type) (b :: k) |]+ ======>+ class Cls (a :: k -> Type) where+ fff :: (a :: k -> Type) (b :: k)+ type FffSym0 = Fff+ class PCls (a :: k -> Type) where+ type Fff :: (a :: k -> Type) (b :: k)+ class SCls (a :: k -> Type) where+ sFff :: forall b. Sing (FffSym0 :: (a :: k -> Type) (b :: k))
− tests/compile-and-dump/Singletons/Records.ghc86.template
@@ -1,79 +0,0 @@-Singletons/Records.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Record a = MkRecord {field1 :: a, field2 :: Bool} |]- ======>- data Record a = MkRecord {field1 :: a, field2 :: Bool}- type Field1Sym1 (a0123456789876543210 :: Record a0123456789876543210) =- Field1 a0123456789876543210- instance SuppressUnusedWarnings Field1Sym0 where- suppressUnusedWarnings = snd (((,) Field1Sym0KindInference) ())- data Field1Sym0 :: forall a0123456789876543210.- (~>) (Record a0123456789876543210) a0123456789876543210- where- Field1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Field1Sym0 arg) (Field1Sym1 arg) =>- Field1Sym0 a0123456789876543210- type instance Apply Field1Sym0 a0123456789876543210 = Field1 a0123456789876543210- type Field2Sym1 (a0123456789876543210 :: Record a0123456789876543210) =- Field2 a0123456789876543210- instance SuppressUnusedWarnings Field2Sym0 where- suppressUnusedWarnings = snd (((,) Field2Sym0KindInference) ())- data Field2Sym0 :: forall a0123456789876543210.- (~>) (Record a0123456789876543210) Bool- where- Field2Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Field2Sym0 arg) (Field2Sym1 arg) =>- Field2Sym0 a0123456789876543210- type instance Apply Field2Sym0 a0123456789876543210 = Field2 a0123456789876543210- type family Field1 (a :: Record a) :: a where- Field1 (MkRecord field _) = field- type family Field2 (a :: Record a) :: Bool where- Field2 (MkRecord _ field) = field- type MkRecordSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: Bool) =- MkRecord t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (MkRecordSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) MkRecordSym1KindInference) ())- data MkRecordSym1 (t0123456789876543210 :: a0123456789876543210) :: (~>) Bool (Record a0123456789876543210)- where- MkRecordSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (MkRecordSym1 t0123456789876543210) arg) (MkRecordSym2 t0123456789876543210 arg) =>- MkRecordSym1 t0123456789876543210 t0123456789876543210- type instance Apply (MkRecordSym1 t0123456789876543210) t0123456789876543210 = MkRecord t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings MkRecordSym0 where- suppressUnusedWarnings = snd (((,) MkRecordSym0KindInference) ())- data MkRecordSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) Bool (Record a0123456789876543210))- where- MkRecordSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkRecordSym0 arg) (MkRecordSym1 arg) =>- MkRecordSym0 t0123456789876543210- type instance Apply MkRecordSym0 t0123456789876543210 = MkRecordSym1 t0123456789876543210- data instance Sing :: Record a -> GHC.Types.Type- where- SMkRecord :: forall a (n :: a) (n :: Bool).- {sField1 :: (Sing (n :: a)), sField2 :: (Sing (n :: Bool))}- -> Sing (MkRecord n n)- type SRecord = (Sing :: Record a -> GHC.Types.Type)- instance SingKind a => SingKind (Record a) where- type Demote (Record a) = Record (Demote a)- fromSing (SMkRecord b b) = (MkRecord (fromSing b)) (fromSing b)- toSing (MkRecord (b :: Demote a) (b :: Demote Bool))- = case- ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing Bool)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkRecord c) c) }- instance (SingI n, SingI n) =>- SingI (MkRecord (n :: a) (n :: Bool)) where- sing = (SMkRecord sing) sing- instance SingI (MkRecordSym0 :: (~>) a ((~>) Bool (Record a))) where- sing = (singFun2 @MkRecordSym0) SMkRecord- instance SingI (TyCon2 MkRecord :: (~>) a ((~>) Bool (Record a))) where- sing = (singFun2 @(TyCon2 MkRecord)) SMkRecord- instance SingI d =>- SingI (MkRecordSym1 (d :: a) :: (~>) Bool (Record a)) where- sing = (singFun1 @(MkRecordSym1 (d :: a))) (SMkRecord (sing @d))- instance SingI d =>- SingI (TyCon1 (MkRecord (d :: a)) :: (~>) Bool (Record a)) where- sing- = (singFun1 @(TyCon1 (MkRecord (d :: a)))) (SMkRecord (sing @d))
+ tests/compile-and-dump/Singletons/Records.ghc88.template view
@@ -0,0 +1,73 @@+Singletons/Records.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Record a = MkRecord {field1 :: a, field2 :: Bool} |]+ ======>+ data Record a = MkRecord {field1 :: a, field2 :: Bool}+ type Field2Sym1 (a0123456789876543210 :: Record a0123456789876543210) =+ Field2 a0123456789876543210+ instance SuppressUnusedWarnings Field2Sym0 where+ suppressUnusedWarnings = snd (((,) Field2Sym0KindInference) ())+ data Field2Sym0 :: forall a0123456789876543210.+ (~>) (Record a0123456789876543210) Bool+ where+ Field2Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Field2Sym0 arg) (Field2Sym1 arg) =>+ Field2Sym0 a0123456789876543210+ type instance Apply Field2Sym0 a0123456789876543210 = Field2 a0123456789876543210+ type Field1Sym1 (a0123456789876543210 :: Record a0123456789876543210) =+ Field1 a0123456789876543210+ instance SuppressUnusedWarnings Field1Sym0 where+ suppressUnusedWarnings = snd (((,) Field1Sym0KindInference) ())+ data Field1Sym0 :: forall a0123456789876543210.+ (~>) (Record a0123456789876543210) a0123456789876543210+ where+ Field1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Field1Sym0 arg) (Field1Sym1 arg) =>+ Field1Sym0 a0123456789876543210+ type instance Apply Field1Sym0 a0123456789876543210 = Field1 a0123456789876543210+ type family Field2 (a :: Record a) :: Bool where+ Field2 (MkRecord _ field) = field+ type family Field1 (a :: Record a) :: a where+ Field1 (MkRecord field _) = field+ type MkRecordSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: Bool) =+ MkRecord t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (MkRecordSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MkRecordSym1KindInference) ())+ data MkRecordSym1 (t0123456789876543210 :: a0123456789876543210) :: (~>) Bool (Record a0123456789876543210)+ where+ MkRecordSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (MkRecordSym1 t0123456789876543210) arg) (MkRecordSym2 t0123456789876543210 arg) =>+ MkRecordSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (MkRecordSym1 t0123456789876543210) t0123456789876543210 = MkRecord t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings MkRecordSym0 where+ suppressUnusedWarnings = snd (((,) MkRecordSym0KindInference) ())+ data MkRecordSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) Bool (Record a0123456789876543210))+ where+ MkRecordSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkRecordSym0 arg) (MkRecordSym1 arg) =>+ MkRecordSym0 t0123456789876543210+ type instance Apply MkRecordSym0 t0123456789876543210 = MkRecordSym1 t0123456789876543210+ data SRecord :: forall a. Record a -> GHC.Types.Type+ where+ SMkRecord :: forall a (n :: a) (n :: Bool).+ {sField1 :: (Sing (n :: a)), sField2 :: (Sing (n :: Bool))}+ -> SRecord (MkRecord n n)+ type instance Sing @(Record a) = SRecord+ instance SingKind a => SingKind (Record a) where+ type Demote (Record a) = Record (Demote a)+ fromSing (SMkRecord b b) = (MkRecord (fromSing b)) (fromSing b)+ toSing (MkRecord (b :: Demote a) (b :: Demote Bool))+ = case+ ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing Bool)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkRecord c) c) }+ instance (SingI n, SingI n) =>+ SingI (MkRecord (n :: a) (n :: Bool)) where+ sing = (SMkRecord sing) sing+ instance SingI (MkRecordSym0 :: (~>) a ((~>) Bool (Record a))) where+ sing = (singFun2 @MkRecordSym0) SMkRecord+ instance SingI d =>+ SingI (MkRecordSym1 (d :: a) :: (~>) Bool (Record a)) where+ sing = (singFun1 @(MkRecordSym1 (d :: a))) (SMkRecord (sing @d))
− tests/compile-and-dump/Singletons/ReturnFunc.ghc86.template
@@ -1,98 +0,0 @@-Singletons/ReturnFunc.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| returnFunc :: Nat -> Nat -> Nat- returnFunc _ = Succ- id :: a -> a- id x = x- idFoo :: c -> a -> a- idFoo _ = id |]- ======>- returnFunc :: Nat -> Nat -> Nat- returnFunc _ = Succ- id :: a -> a- id x = x- idFoo :: c -> a -> a- idFoo _ = id- type IdSym1 (a0123456789876543210 :: a0123456789876543210) =- Id a0123456789876543210- instance SuppressUnusedWarnings IdSym0 where- suppressUnusedWarnings = snd (((,) IdSym0KindInference) ())- data IdSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- IdSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply IdSym0 arg) (IdSym1 arg) =>- IdSym0 a0123456789876543210- type instance Apply IdSym0 a0123456789876543210 = Id a0123456789876543210- type IdFooSym2 (a0123456789876543210 :: c0123456789876543210) (a0123456789876543210 :: a0123456789876543210) =- IdFoo a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (IdFooSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) IdFooSym1KindInference) ())- data IdFooSym1 (a0123456789876543210 :: c0123456789876543210) :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- IdFooSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (IdFooSym1 a0123456789876543210) arg) (IdFooSym2 a0123456789876543210 arg) =>- IdFooSym1 a0123456789876543210 a0123456789876543210- type instance Apply (IdFooSym1 a0123456789876543210) a0123456789876543210 = IdFoo a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings IdFooSym0 where- suppressUnusedWarnings = snd (((,) IdFooSym0KindInference) ())- data IdFooSym0 :: forall a0123456789876543210 c0123456789876543210.- (~>) c0123456789876543210 ((~>) a0123456789876543210 a0123456789876543210)- where- IdFooSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply IdFooSym0 arg) (IdFooSym1 arg) =>- IdFooSym0 a0123456789876543210- type instance Apply IdFooSym0 a0123456789876543210 = IdFooSym1 a0123456789876543210- type ReturnFuncSym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- ReturnFunc a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ReturnFuncSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) ReturnFuncSym1KindInference) ())- data ReturnFuncSym1 (a0123456789876543210 :: Nat) :: (~>) Nat Nat- where- ReturnFuncSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ReturnFuncSym1 a0123456789876543210) arg) (ReturnFuncSym2 a0123456789876543210 arg) =>- ReturnFuncSym1 a0123456789876543210 a0123456789876543210- type instance Apply (ReturnFuncSym1 a0123456789876543210) a0123456789876543210 = ReturnFunc a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ReturnFuncSym0 where- suppressUnusedWarnings = snd (((,) ReturnFuncSym0KindInference) ())- data ReturnFuncSym0 :: (~>) Nat ((~>) Nat Nat)- where- ReturnFuncSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ReturnFuncSym0 arg) (ReturnFuncSym1 arg) =>- ReturnFuncSym0 a0123456789876543210- type instance Apply ReturnFuncSym0 a0123456789876543210 = ReturnFuncSym1 a0123456789876543210- type family Id (a :: a) :: a where- Id x = x- type family IdFoo (a :: c) (a :: a) :: a where- IdFoo _ a_0123456789876543210 = Apply IdSym0 a_0123456789876543210- type family ReturnFunc (a :: Nat) (a :: Nat) :: Nat where- ReturnFunc _ a_0123456789876543210 = Apply SuccSym0 a_0123456789876543210- sId :: forall a (t :: a). Sing t -> Sing (Apply IdSym0 t :: a)- sIdFoo ::- forall c a (t :: c) (t :: a).- Sing t -> Sing t -> Sing (Apply (Apply IdFooSym0 t) t :: a)- sReturnFunc ::- forall (t :: Nat) (t :: Nat).- Sing t -> Sing t -> Sing (Apply (Apply ReturnFuncSym0 t) t :: Nat)- sId (sX :: Sing x) = sX- sIdFoo _ (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing ((singFun1 @IdSym0) sId)) sA_0123456789876543210- sReturnFunc- _- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing ((singFun1 @SuccSym0) SSucc)) sA_0123456789876543210- instance SingI (IdSym0 :: (~>) a a) where- sing = (singFun1 @IdSym0) sId- instance SingI (IdFooSym0 :: (~>) c ((~>) a a)) where- sing = (singFun2 @IdFooSym0) sIdFoo- instance SingI d => SingI (IdFooSym1 (d :: c) :: (~>) a a) where- sing = (singFun1 @(IdFooSym1 (d :: c))) (sIdFoo (sing @d))- instance SingI (ReturnFuncSym0 :: (~>) Nat ((~>) Nat Nat)) where- sing = (singFun2 @ReturnFuncSym0) sReturnFunc- instance SingI d =>- SingI (ReturnFuncSym1 (d :: Nat) :: (~>) Nat Nat) where- sing- = (singFun1 @(ReturnFuncSym1 (d :: Nat))) (sReturnFunc (sing @d))
+ tests/compile-and-dump/Singletons/ReturnFunc.ghc88.template view
@@ -0,0 +1,98 @@+Singletons/ReturnFunc.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| returnFunc :: Nat -> Nat -> Nat+ returnFunc _ = Succ+ id :: a -> a+ id x = x+ idFoo :: c -> a -> a+ idFoo _ = id |]+ ======>+ returnFunc :: Nat -> Nat -> Nat+ returnFunc _ = Succ+ id :: a -> a+ id x = x+ idFoo :: c -> a -> a+ idFoo _ = id+ type IdFooSym2 (a0123456789876543210 :: c0123456789876543210) (a0123456789876543210 :: a0123456789876543210) =+ IdFoo a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (IdFooSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) IdFooSym1KindInference) ())+ data IdFooSym1 (a0123456789876543210 :: c0123456789876543210) :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ IdFooSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (IdFooSym1 a0123456789876543210) arg) (IdFooSym2 a0123456789876543210 arg) =>+ IdFooSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (IdFooSym1 a0123456789876543210) a0123456789876543210 = IdFoo a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings IdFooSym0 where+ suppressUnusedWarnings = snd (((,) IdFooSym0KindInference) ())+ data IdFooSym0 :: forall c0123456789876543210 a0123456789876543210.+ (~>) c0123456789876543210 ((~>) a0123456789876543210 a0123456789876543210)+ where+ IdFooSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply IdFooSym0 arg) (IdFooSym1 arg) =>+ IdFooSym0 a0123456789876543210+ type instance Apply IdFooSym0 a0123456789876543210 = IdFooSym1 a0123456789876543210+ type IdSym1 (a0123456789876543210 :: a0123456789876543210) =+ Id a0123456789876543210+ instance SuppressUnusedWarnings IdSym0 where+ suppressUnusedWarnings = snd (((,) IdSym0KindInference) ())+ data IdSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ IdSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply IdSym0 arg) (IdSym1 arg) =>+ IdSym0 a0123456789876543210+ type instance Apply IdSym0 a0123456789876543210 = Id a0123456789876543210+ type ReturnFuncSym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ ReturnFunc a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ReturnFuncSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ReturnFuncSym1KindInference) ())+ data ReturnFuncSym1 (a0123456789876543210 :: Nat) :: (~>) Nat Nat+ where+ ReturnFuncSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ReturnFuncSym1 a0123456789876543210) arg) (ReturnFuncSym2 a0123456789876543210 arg) =>+ ReturnFuncSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ReturnFuncSym1 a0123456789876543210) a0123456789876543210 = ReturnFunc a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ReturnFuncSym0 where+ suppressUnusedWarnings = snd (((,) ReturnFuncSym0KindInference) ())+ data ReturnFuncSym0 :: (~>) Nat ((~>) Nat Nat)+ where+ ReturnFuncSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ReturnFuncSym0 arg) (ReturnFuncSym1 arg) =>+ ReturnFuncSym0 a0123456789876543210+ type instance Apply ReturnFuncSym0 a0123456789876543210 = ReturnFuncSym1 a0123456789876543210+ type family IdFoo (a :: c) (a :: a) :: a where+ IdFoo _ a_0123456789876543210 = Apply IdSym0 a_0123456789876543210+ type family Id (a :: a) :: a where+ Id x = x+ type family ReturnFunc (a :: Nat) (a :: Nat) :: Nat where+ ReturnFunc _ a_0123456789876543210 = Apply SuccSym0 a_0123456789876543210+ sIdFoo ::+ forall c a (t :: c) (t :: a).+ Sing t -> Sing t -> Sing (Apply (Apply IdFooSym0 t) t :: a)+ sId :: forall a (t :: a). Sing t -> Sing (Apply IdSym0 t :: a)+ sReturnFunc ::+ forall (t :: Nat) (t :: Nat).+ Sing t -> Sing t -> Sing (Apply (Apply ReturnFuncSym0 t) t :: Nat)+ sIdFoo _ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing ((singFun1 @IdSym0) sId)) sA_0123456789876543210+ sId (sX :: Sing x) = sX+ sReturnFunc+ _+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing ((singFun1 @SuccSym0) SSucc)) sA_0123456789876543210+ instance SingI (IdFooSym0 :: (~>) c ((~>) a a)) where+ sing = (singFun2 @IdFooSym0) sIdFoo+ instance SingI d => SingI (IdFooSym1 (d :: c) :: (~>) a a) where+ sing = (singFun1 @(IdFooSym1 (d :: c))) (sIdFoo (sing @d))+ instance SingI (IdSym0 :: (~>) a a) where+ sing = (singFun1 @IdSym0) sId+ instance SingI (ReturnFuncSym0 :: (~>) Nat ((~>) Nat Nat)) where+ sing = (singFun2 @ReturnFuncSym0) sReturnFunc+ instance SingI d =>+ SingI (ReturnFuncSym1 (d :: Nat) :: (~>) Nat Nat) where+ sing+ = (singFun1 @(ReturnFuncSym1 (d :: Nat))) (sReturnFunc (sing @d))
− tests/compile-and-dump/Singletons/Sections.ghc86.template
@@ -1,122 +0,0 @@-Singletons/Sections.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| (+) :: Nat -> Nat -> Nat- Zero + m = m- (Succ n) + m = Succ (n + m)- foo1 :: [Nat]- foo1 = map ((Succ Zero) +) [Zero, Succ Zero]- foo2 :: [Nat]- foo2 = map (+ (Succ Zero)) [Zero, Succ Zero]- foo3 :: [Nat]- foo3 = zipWith (+) [Succ Zero, Succ Zero] [Zero, Succ Zero] |]- ======>- (+) :: Nat -> Nat -> Nat- (+) Zero m = m- (+) (Succ n) m = Succ (n + m)- foo1 :: [Nat]- foo1 = (map (Succ Zero +)) [Zero, Succ Zero]- foo2 :: [Nat]- foo2 = (map (+ Succ Zero)) [Zero, Succ Zero]- foo3 :: [Nat]- foo3 = ((zipWith (+)) [Succ Zero, Succ Zero]) [Zero, Succ Zero]- type family Lambda_0123456789876543210 t where- Lambda_0123456789876543210 lhs_0123456789876543210 = Apply (Apply (+@#@$) lhs_0123456789876543210) (Apply SuccSym0 ZeroSym0)- type Lambda_0123456789876543210Sym1 t0123456789876543210 =- Lambda_0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 t0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 t0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210- type (+@#@$$$) (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- (+) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((+@#@$$) a0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:+@#@$$###)) ())- data (+@#@$$) (a0123456789876543210 :: Nat) :: (~>) Nat Nat- where- (:+@#@$$###) :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((+@#@$$) a0123456789876543210) arg) ((+@#@$$$) a0123456789876543210 arg) =>- (+@#@$$) a0123456789876543210 a0123456789876543210- type instance Apply ((+@#@$$) a0123456789876543210) a0123456789876543210 = (+) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (+@#@$) where- suppressUnusedWarnings = snd (((,) (:+@#@$###)) ())- data (+@#@$) :: (~>) Nat ((~>) Nat Nat)- where- (:+@#@$###) :: forall a0123456789876543210- arg. SameKind (Apply (+@#@$) arg) ((+@#@$$) arg) =>- (+@#@$) a0123456789876543210- type instance Apply (+@#@$) a0123456789876543210 = (+@#@$$) a0123456789876543210- type Foo1Sym0 = Foo1- type Foo2Sym0 = Foo2- type Foo3Sym0 = Foo3- type family (+) (a :: Nat) (a :: Nat) :: Nat where- (+) 'Zero m = m- (+) ( 'Succ n) m = Apply SuccSym0 (Apply (Apply (+@#@$) n) m)- type family Foo1 :: [Nat] where- Foo1 = Apply (Apply MapSym0 (Apply (+@#@$) (Apply SuccSym0 ZeroSym0))) (Apply (Apply (:@#@$) ZeroSym0) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) '[]))- type family Foo2 :: [Nat] where- Foo2 = Apply (Apply MapSym0 Lambda_0123456789876543210Sym0) (Apply (Apply (:@#@$) ZeroSym0) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) '[]))- type family Foo3 :: [Nat] where- Foo3 = Apply (Apply (Apply ZipWithSym0 (+@#@$)) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) '[]))) (Apply (Apply (:@#@$) ZeroSym0) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) '[]))- (%+) ::- forall (t :: Nat) (t :: Nat).- Sing t -> Sing t -> Sing (Apply (Apply (+@#@$) t) t :: Nat)- sFoo1 :: Sing (Foo1Sym0 :: [Nat])- sFoo2 :: Sing (Foo2Sym0 :: [Nat])- sFoo3 :: Sing (Foo3Sym0 :: [Nat])- (%+) SZero (sM :: Sing m) = sM- (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)- = (applySing ((singFun1 @SuccSym0) SSucc))- ((applySing ((applySing ((singFun2 @(+@#@$)) (%+))) sN)) sM)- sFoo1- = (applySing- ((applySing ((singFun2 @MapSym0) sMap))- ((applySing ((singFun2 @(+@#@$)) (%+)))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- SNil))- sFoo2- = (applySing- ((applySing ((singFun2 @MapSym0) sMap))- ((singFun1 @Lambda_0123456789876543210Sym0)- (\ sLhs_0123456789876543210- -> case sLhs_0123456789876543210 of {- (_ :: Sing lhs_0123456789876543210)- -> (applySing- ((applySing ((singFun2 @(+@#@$)) (%+))) sLhs_0123456789876543210))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero) }))))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- SNil))- sFoo3- = (applySing- ((applySing- ((applySing ((singFun3 @ZipWithSym0) sZipWith))- ((singFun2 @(+@#@$)) (%+))))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- SNil))))- ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))- SNil))- instance SingI ((+@#@$) :: (~>) Nat ((~>) Nat Nat)) where- sing = (singFun2 @(+@#@$)) (%+)- instance SingI d =>- SingI ((+@#@$$) (d :: Nat) :: (~>) Nat Nat) where- sing = (singFun1 @((+@#@$$) (d :: Nat))) ((%+) (sing @d))
+ tests/compile-and-dump/Singletons/Sections.ghc88.template view
@@ -0,0 +1,122 @@+Singletons/Sections.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| (+) :: Nat -> Nat -> Nat+ Zero + m = m+ (Succ n) + m = Succ (n + m)+ foo1 :: [Nat]+ foo1 = map ((Succ Zero) +) [Zero, Succ Zero]+ foo2 :: [Nat]+ foo2 = map (+ (Succ Zero)) [Zero, Succ Zero]+ foo3 :: [Nat]+ foo3 = zipWith (+) [Succ Zero, Succ Zero] [Zero, Succ Zero] |]+ ======>+ (+) :: Nat -> Nat -> Nat+ (+) Zero m = m+ (+) (Succ n) m = Succ (n + m)+ foo1 :: [Nat]+ foo1 = (map (Succ Zero +)) [Zero, Succ Zero]+ foo2 :: [Nat]+ foo2 = (map (+ Succ Zero)) [Zero, Succ Zero]+ foo3 :: [Nat]+ foo3 = ((zipWith (+)) [Succ Zero, Succ Zero]) [Zero, Succ Zero]+ type family Lambda_0123456789876543210 t where+ Lambda_0123456789876543210 lhs_0123456789876543210 = Apply (Apply (+@#@$) lhs_0123456789876543210) (Apply SuccSym0 ZeroSym0)+ type Lambda_0123456789876543210Sym1 t0123456789876543210 =+ Lambda_0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 t0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 t0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 t0123456789876543210 = Lambda_0123456789876543210 t0123456789876543210+ type Foo3Sym0 = Foo3+ type Foo2Sym0 = Foo2+ type Foo1Sym0 = Foo1+ type (+@#@$$$) (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ (+) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((+@#@$$) a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:+@#@$$###)) ())+ data (+@#@$$) (a0123456789876543210 :: Nat) :: (~>) Nat Nat+ where+ (:+@#@$$###) :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((+@#@$$) a0123456789876543210) arg) ((+@#@$$$) a0123456789876543210 arg) =>+ (+@#@$$) a0123456789876543210 a0123456789876543210+ type instance Apply ((+@#@$$) a0123456789876543210) a0123456789876543210 = (+) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (+@#@$) where+ suppressUnusedWarnings = snd (((,) (:+@#@$###)) ())+ data (+@#@$) :: (~>) Nat ((~>) Nat Nat)+ where+ (:+@#@$###) :: forall a0123456789876543210+ arg. SameKind (Apply (+@#@$) arg) ((+@#@$$) arg) =>+ (+@#@$) a0123456789876543210+ type instance Apply (+@#@$) a0123456789876543210 = (+@#@$$) a0123456789876543210+ type family Foo3 :: [Nat] where+ Foo3 = Apply (Apply (Apply ZipWithSym0 (+@#@$)) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) '[]))) (Apply (Apply (:@#@$) ZeroSym0) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) '[]))+ type family Foo2 :: [Nat] where+ Foo2 = Apply (Apply MapSym0 Lambda_0123456789876543210Sym0) (Apply (Apply (:@#@$) ZeroSym0) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) '[]))+ type family Foo1 :: [Nat] where+ Foo1 = Apply (Apply MapSym0 (Apply (+@#@$) (Apply SuccSym0 ZeroSym0))) (Apply (Apply (:@#@$) ZeroSym0) (Apply (Apply (:@#@$) (Apply SuccSym0 ZeroSym0)) '[]))+ type family (+) (a :: Nat) (a :: Nat) :: Nat where+ (+) 'Zero m = m+ (+) ('Succ n) m = Apply SuccSym0 (Apply (Apply (+@#@$) n) m)+ sFoo3 :: Sing (Foo3Sym0 :: [Nat])+ sFoo2 :: Sing (Foo2Sym0 :: [Nat])+ sFoo1 :: Sing (Foo1Sym0 :: [Nat])+ (%+) ::+ forall (t :: Nat) (t :: Nat).+ Sing t -> Sing t -> Sing (Apply (Apply (+@#@$) t) t :: Nat)+ sFoo3+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ZipWithSym0) sZipWith))+ ((singFun2 @(+@#@$)) (%+))))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ SNil))))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ SNil))+ sFoo2+ = (applySing+ ((applySing ((singFun2 @MapSym0) sMap))+ ((singFun1 @Lambda_0123456789876543210Sym0)+ (\ sLhs_0123456789876543210+ -> case sLhs_0123456789876543210 of {+ (_ :: Sing lhs_0123456789876543210)+ -> (applySing+ ((applySing ((singFun2 @(+@#@$)) (%+))) sLhs_0123456789876543210))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero) }))))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ SNil))+ sFoo1+ = (applySing+ ((applySing ((singFun2 @MapSym0) sMap))+ ((applySing ((singFun2 @(+@#@$)) (%+)))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero))))+ ((applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SZero))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @SuccSym0) SSucc)) SZero)))+ SNil))+ (%+) SZero (sM :: Sing m) = sM+ (%+) (SSucc (sN :: Sing n)) (sM :: Sing m)+ = (applySing ((singFun1 @SuccSym0) SSucc))+ ((applySing ((applySing ((singFun2 @(+@#@$)) (%+))) sN)) sM)+ instance SingI ((+@#@$) :: (~>) Nat ((~>) Nat Nat)) where+ sing = (singFun2 @(+@#@$)) (%+)+ instance SingI d =>+ SingI ((+@#@$$) (d :: Nat) :: (~>) Nat Nat) where+ sing = (singFun1 @((+@#@$$) (d :: Nat))) ((%+) (sing @d))
− tests/compile-and-dump/Singletons/ShowDeriving.ghc86.template
@@ -1,582 +0,0 @@-Singletons/ShowDeriving.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| infixl 5 `MkFoo2b`, :*:, :&:- - data Foo1- = MkFoo1- deriving Show- data Foo2 a- = MkFoo2a a a | a `MkFoo2b` a | (:*:) a a | a :&: a- deriving Show- data Foo3- = MkFoo3 {getFoo3a :: Bool, *** :: Bool}- deriving Show |]- ======>- data Foo1- = MkFoo1- deriving Show- infixl 5 `MkFoo2b`- infixl 5 :*:- infixl 5 :&:- data Foo2 a- = MkFoo2a a a | a `MkFoo2b` a | (:*:) a a | a :&: a- deriving Show- data Foo3- = MkFoo3 {getFoo3a :: Bool, *** :: Bool}- deriving Show- type GetFoo3aSym1 (a0123456789876543210 :: Foo3) =- GetFoo3a a0123456789876543210- instance SuppressUnusedWarnings GetFoo3aSym0 where- suppressUnusedWarnings = snd (((,) GetFoo3aSym0KindInference) ())- data GetFoo3aSym0 :: (~>) Foo3 Bool- where- GetFoo3aSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply GetFoo3aSym0 arg) (GetFoo3aSym1 arg) =>- GetFoo3aSym0 a0123456789876543210- type instance Apply GetFoo3aSym0 a0123456789876543210 = GetFoo3a a0123456789876543210- type (***@#@$$) (a0123456789876543210 :: Foo3) =- (***) a0123456789876543210- instance SuppressUnusedWarnings (***@#@$) where- suppressUnusedWarnings = snd (((,) (:***@#@$###)) ())- data (***@#@$) :: (~>) Foo3 Bool- where- (:***@#@$###) :: forall a0123456789876543210- arg. SameKind (Apply (***@#@$) arg) ((***@#@$$) arg) =>- (***@#@$) a0123456789876543210- type instance Apply (***@#@$) a0123456789876543210 = (***) a0123456789876543210- type family GetFoo3a (a :: Foo3) :: Bool where- GetFoo3a (MkFoo3 field _) = field- type family (***) (a :: Foo3) :: Bool where- (***) (MkFoo3 _ field) = field- type MkFoo1Sym0 = MkFoo1- type MkFoo2aSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: a0123456789876543210) =- MkFoo2a t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (MkFoo2aSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) MkFoo2aSym1KindInference) ())- data MkFoo2aSym1 (t0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 (Foo2 a0123456789876543210)- where- MkFoo2aSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (MkFoo2aSym1 t0123456789876543210) arg) (MkFoo2aSym2 t0123456789876543210 arg) =>- MkFoo2aSym1 t0123456789876543210 t0123456789876543210- type instance Apply (MkFoo2aSym1 t0123456789876543210) t0123456789876543210 = MkFoo2a t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings MkFoo2aSym0 where- suppressUnusedWarnings = snd (((,) MkFoo2aSym0KindInference) ())- data MkFoo2aSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) a0123456789876543210 (Foo2 a0123456789876543210))- where- MkFoo2aSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkFoo2aSym0 arg) (MkFoo2aSym1 arg) =>- MkFoo2aSym0 t0123456789876543210- type instance Apply MkFoo2aSym0 t0123456789876543210 = MkFoo2aSym1 t0123456789876543210- type MkFoo2bSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: a0123456789876543210) =- MkFoo2b t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (MkFoo2bSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) MkFoo2bSym1KindInference) ())- data MkFoo2bSym1 (t0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 (Foo2 a0123456789876543210)- where- MkFoo2bSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (MkFoo2bSym1 t0123456789876543210) arg) (MkFoo2bSym2 t0123456789876543210 arg) =>- MkFoo2bSym1 t0123456789876543210 t0123456789876543210- type instance Apply (MkFoo2bSym1 t0123456789876543210) t0123456789876543210 = MkFoo2b t0123456789876543210 t0123456789876543210- infixl 5 `MkFoo2bSym1`- instance SuppressUnusedWarnings MkFoo2bSym0 where- suppressUnusedWarnings = snd (((,) MkFoo2bSym0KindInference) ())- data MkFoo2bSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) a0123456789876543210 (Foo2 a0123456789876543210))- where- MkFoo2bSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkFoo2bSym0 arg) (MkFoo2bSym1 arg) =>- MkFoo2bSym0 t0123456789876543210- type instance Apply MkFoo2bSym0 t0123456789876543210 = MkFoo2bSym1 t0123456789876543210- infixl 5 `MkFoo2bSym0`- type (:*:@#@$$$) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: a0123456789876543210) =- (:*:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ((:*:@#@$$) t0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::*:@#@$$###)) ())- data (:*:@#@$$) (t0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 (Foo2 a0123456789876543210)- where- (::*:@#@$$###) :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply ((:*:@#@$$) t0123456789876543210) arg) ((:*:@#@$$$) t0123456789876543210 arg) =>- (:*:@#@$$) t0123456789876543210 t0123456789876543210- type instance Apply ((:*:@#@$$) t0123456789876543210) t0123456789876543210 = (:*:) t0123456789876543210 t0123456789876543210- infixl 5 :*:@#@$$- instance SuppressUnusedWarnings (:*:@#@$) where- suppressUnusedWarnings = snd (((,) (::*:@#@$###)) ())- data (:*:@#@$) :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) a0123456789876543210 (Foo2 a0123456789876543210))- where- (::*:@#@$###) :: forall t0123456789876543210- arg. SameKind (Apply (:*:@#@$) arg) ((:*:@#@$$) arg) =>- (:*:@#@$) t0123456789876543210- type instance Apply (:*:@#@$) t0123456789876543210 = (:*:@#@$$) t0123456789876543210- infixl 5 :*:@#@$- type (:&:@#@$$$) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: a0123456789876543210) =- (:&:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ((:&:@#@$$) t0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::&:@#@$$###)) ())- data (:&:@#@$$) (t0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 (Foo2 a0123456789876543210)- where- (::&:@#@$$###) :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply ((:&:@#@$$) t0123456789876543210) arg) ((:&:@#@$$$) t0123456789876543210 arg) =>- (:&:@#@$$) t0123456789876543210 t0123456789876543210- type instance Apply ((:&:@#@$$) t0123456789876543210) t0123456789876543210 = (:&:) t0123456789876543210 t0123456789876543210- infixl 5 :&:@#@$$- instance SuppressUnusedWarnings (:&:@#@$) where- suppressUnusedWarnings = snd (((,) (::&:@#@$###)) ())- data (:&:@#@$) :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) a0123456789876543210 (Foo2 a0123456789876543210))- where- (::&:@#@$###) :: forall t0123456789876543210- arg. SameKind (Apply (:&:@#@$) arg) ((:&:@#@$$) arg) =>- (:&:@#@$) t0123456789876543210- type instance Apply (:&:@#@$) t0123456789876543210 = (:&:@#@$$) t0123456789876543210- infixl 5 :&:@#@$- type MkFoo3Sym2 (t0123456789876543210 :: Bool) (t0123456789876543210 :: Bool) =- MkFoo3 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (MkFoo3Sym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) MkFoo3Sym1KindInference) ())- data MkFoo3Sym1 (t0123456789876543210 :: Bool) :: (~>) Bool Foo3- where- MkFoo3Sym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (MkFoo3Sym1 t0123456789876543210) arg) (MkFoo3Sym2 t0123456789876543210 arg) =>- MkFoo3Sym1 t0123456789876543210 t0123456789876543210- type instance Apply (MkFoo3Sym1 t0123456789876543210) t0123456789876543210 = MkFoo3 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings MkFoo3Sym0 where- suppressUnusedWarnings = snd (((,) MkFoo3Sym0KindInference) ())- data MkFoo3Sym0 :: (~>) Bool ((~>) Bool Foo3)- where- MkFoo3Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkFoo3Sym0 arg) (MkFoo3Sym1 arg) =>- MkFoo3Sym0 t0123456789876543210- type instance Apply MkFoo3Sym0 t0123456789876543210 = MkFoo3Sym1 t0123456789876543210- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo1) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 _ MkFoo1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "MkFoo1") a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo1) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo1) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Foo1 ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo1 ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow Foo1 where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo2 a) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 p_0123456789876543210 (MkFoo2a arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "MkFoo2a ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210- ShowsPrec_0123456789876543210 p_0123456789876543210 (MkFoo2b argL_0123456789876543210 argR_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 5))) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argL_0123456789876543210)) (Apply (Apply (.@#@$) (Apply ShowStringSym0 " `MkFoo2b` ")) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argR_0123456789876543210)))) a_0123456789876543210- ShowsPrec_0123456789876543210 p_0123456789876543210 ((:*:) arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "(:*:) ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210- ShowsPrec_0123456789876543210 p_0123456789876543210 ((:&:) argL_0123456789876543210 argR_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 5))) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argL_0123456789876543210)) (Apply (Apply (.@#@$) (Apply ShowStringSym0 " :&: ")) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argR_0123456789876543210)))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo2 a0123456789876543210) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo2 a0123456789876543210) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210.- (~>) (Foo2 a0123456789876543210) ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) GHC.Types.Nat ((~>) (Foo2 a0123456789876543210) ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow (Foo2 a) where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo3) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 p_0123456789876543210 (MkFoo3 arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "MkFoo3 ")) (Apply (Apply (.@#@$) (Apply ShowCharSym0 "{")) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "getFoo3a = ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 0)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowCommaSpaceSym0) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "(***) = ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 0)) arg_0123456789876543210)) (Apply ShowCharSym0 "}"))))))))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo3) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo3) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Foo3 ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo3 ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow Foo3 where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- infixl 5 `SMkFoo2b`- infixl 5 :%*:- infixl 5 :%&:- data instance Sing :: Foo1 -> GHC.Types.Type- where SMkFoo1 :: Sing MkFoo1- type SFoo1 = (Sing :: Foo1 -> GHC.Types.Type)- instance SingKind Foo1 where- type Demote Foo1 = Foo1- fromSing SMkFoo1 = MkFoo1- toSing MkFoo1 = SomeSing SMkFoo1- data instance Sing :: Foo2 a -> GHC.Types.Type- where- SMkFoo2a :: forall a (n :: a) (n :: a).- (Sing (n :: a)) -> (Sing (n :: a)) -> Sing (MkFoo2a n n)- SMkFoo2b :: forall a (n :: a) (n :: a).- (Sing (n :: a)) -> (Sing (n :: a)) -> Sing (MkFoo2b n n)- (:%*:) :: forall a (n :: a) (n :: a).- (Sing (n :: a)) -> (Sing (n :: a)) -> Sing ((:*:) n n)- (:%&:) :: forall a (n :: a) (n :: a).- (Sing (n :: a)) -> (Sing (n :: a)) -> Sing ((:&:) n n)- type SFoo2 = (Sing :: Foo2 a -> GHC.Types.Type)- instance SingKind a => SingKind (Foo2 a) where- type Demote (Foo2 a) = Foo2 (Demote a)- fromSing (SMkFoo2a b b) = (MkFoo2a (fromSing b)) (fromSing b)- fromSing (SMkFoo2b b b) = (MkFoo2b (fromSing b)) (fromSing b)- fromSing ((:%*:) b b) = ((:*:) (fromSing b)) (fromSing b)- fromSing ((:%&:) b b) = ((:&:) (fromSing b)) (fromSing b)- toSing (MkFoo2a (b :: Demote a) (b :: Demote a))- = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo2a c) c) }- toSing (MkFoo2b (b :: Demote a) (b :: Demote a))- = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo2b c) c) }- toSing ((:*:) (b :: Demote a) (b :: Demote a))- = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {- (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c) }- toSing ((:&:) (b :: Demote a) (b :: Demote a))- = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {- (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%&:) c) c) }- data instance Sing :: Foo3 -> GHC.Types.Type- where- SMkFoo3 :: forall (n :: Bool) (n :: Bool).- {sGetFoo3a :: (Sing (n :: Bool)), %*** :: (Sing (n :: Bool))}- -> Sing (MkFoo3 n n)- type SFoo3 = (Sing :: Foo3 -> GHC.Types.Type)- instance SingKind Foo3 where- type Demote Foo3 = Foo3- fromSing (SMkFoo3 b b) = (MkFoo3 (fromSing b)) (fromSing b)- toSing (MkFoo3 (b :: Demote Bool) (b :: Demote Bool))- = case- ((,) (toSing b :: SomeSing Bool)) (toSing b :: SomeSing Bool)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo3 c) c) }- instance SShow Foo1 where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: Foo1) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Foo1 ((~>) Symbol Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- _- SMkFoo1- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "MkFoo1")))- sA_0123456789876543210- instance SShow a => SShow (Foo2 a) where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: Foo2 a) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Foo2 a) ((~>) Symbol Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SMkFoo2a (sArg_0123456789876543210 :: Sing arg_0123456789876543210)- (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "MkFoo2a "))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @ShowSpaceSym0) sShowSpace)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))))- sA_0123456789876543210- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SMkFoo2b (sArgL_0123456789876543210 :: Sing argL_0123456789876543210)- (sArgR_0123456789876543210 :: Sing argR_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 5)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 6))))- sArgL_0123456789876543210)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing " `MkFoo2b` "))))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 6))))- sArgR_0123456789876543210)))))- sA_0123456789876543210- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- ((:%*:) (sArg_0123456789876543210 :: Sing arg_0123456789876543210)- (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "(:*:) "))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @ShowSpaceSym0) sShowSpace)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))))- sA_0123456789876543210- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- ((:%&:) (sArgL_0123456789876543210 :: Sing argL_0123456789876543210)- (sArgR_0123456789876543210 :: Sing argR_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 5)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 6))))- sArgL_0123456789876543210)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing " :&: "))))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 6))))- sArgR_0123456789876543210)))))- sA_0123456789876543210- instance SShow Bool => SShow Foo3 where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: Foo3) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Foo3 ((~>) Symbol Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SMkFoo3 (sArg_0123456789876543210 :: Sing arg_0123456789876543210)- (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "MkFoo3 "))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowCharSym0) sShowChar))- (sing :: Sing "{"))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "getFoo3a = "))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 0))))- sArg_0123456789876543210)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @ShowCommaSpaceSym0) sShowCommaSpace)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "(***) = "))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 0))))- sArg_0123456789876543210)))- ((applySing ((singFun2 @ShowCharSym0) sShowChar))- (sing :: Sing "}")))))))))))- sA_0123456789876543210- deriving instance Show (Sing (z :: Foo1))- deriving instance Data.Singletons.ShowSing.ShowSing a =>- Show (Sing (z :: Foo2 a))- deriving instance Data.Singletons.ShowSing.ShowSing Bool =>- Show (Sing (z :: Foo3))- instance SingI MkFoo1 where- sing = SMkFoo1- instance (SingI n, SingI n) =>- SingI (MkFoo2a (n :: a) (n :: a)) where- sing = (SMkFoo2a sing) sing- instance SingI (MkFoo2aSym0 :: (~>) a ((~>) a (Foo2 a))) where- sing = (singFun2 @MkFoo2aSym0) SMkFoo2a- instance SingI (TyCon2 MkFoo2a :: (~>) a ((~>) a (Foo2 a))) where- sing = (singFun2 @(TyCon2 MkFoo2a)) SMkFoo2a- instance SingI d =>- SingI (MkFoo2aSym1 (d :: a) :: (~>) a (Foo2 a)) where- sing = (singFun1 @(MkFoo2aSym1 (d :: a))) (SMkFoo2a (sing @d))- instance SingI d =>- SingI (TyCon1 (MkFoo2a (d :: a)) :: (~>) a (Foo2 a)) where- sing = (singFun1 @(TyCon1 (MkFoo2a (d :: a)))) (SMkFoo2a (sing @d))- instance (SingI n, SingI n) =>- SingI (MkFoo2b (n :: a) (n :: a)) where- sing = (SMkFoo2b sing) sing- instance SingI (MkFoo2bSym0 :: (~>) a ((~>) a (Foo2 a))) where- sing = (singFun2 @MkFoo2bSym0) SMkFoo2b- instance SingI (TyCon2 MkFoo2b :: (~>) a ((~>) a (Foo2 a))) where- sing = (singFun2 @(TyCon2 MkFoo2b)) SMkFoo2b- instance SingI d =>- SingI (MkFoo2bSym1 (d :: a) :: (~>) a (Foo2 a)) where- sing = (singFun1 @(MkFoo2bSym1 (d :: a))) (SMkFoo2b (sing @d))- instance SingI d =>- SingI (TyCon1 (MkFoo2b (d :: a)) :: (~>) a (Foo2 a)) where- sing = (singFun1 @(TyCon1 (MkFoo2b (d :: a)))) (SMkFoo2b (sing @d))- instance (SingI n, SingI n) =>- SingI ((:*:) (n :: a) (n :: a)) where- sing = ((:%*:) sing) sing- instance SingI ((:*:@#@$) :: (~>) a ((~>) a (Foo2 a))) where- sing = (singFun2 @(:*:@#@$)) (:%*:)- instance SingI (TyCon2 (:*:) :: (~>) a ((~>) a (Foo2 a))) where- sing = (singFun2 @(TyCon2 (:*:))) (:%*:)- instance SingI d =>- SingI ((:*:@#@$$) (d :: a) :: (~>) a (Foo2 a)) where- sing = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) (sing @d))- instance SingI d =>- SingI (TyCon1 ((:*:) (d :: a)) :: (~>) a (Foo2 a)) where- sing = (singFun1 @(TyCon1 ((:*:) (d :: a)))) ((:%*:) (sing @d))- instance (SingI n, SingI n) =>- SingI ((:&:) (n :: a) (n :: a)) where- sing = ((:%&:) sing) sing- instance SingI ((:&:@#@$) :: (~>) a ((~>) a (Foo2 a))) where- sing = (singFun2 @(:&:@#@$)) (:%&:)- instance SingI (TyCon2 (:&:) :: (~>) a ((~>) a (Foo2 a))) where- sing = (singFun2 @(TyCon2 (:&:))) (:%&:)- instance SingI d =>- SingI ((:&:@#@$$) (d :: a) :: (~>) a (Foo2 a)) where- sing = (singFun1 @((:&:@#@$$) (d :: a))) ((:%&:) (sing @d))- instance SingI d =>- SingI (TyCon1 ((:&:) (d :: a)) :: (~>) a (Foo2 a)) where- sing = (singFun1 @(TyCon1 ((:&:) (d :: a)))) ((:%&:) (sing @d))- instance (SingI n, SingI n) =>- SingI (MkFoo3 (n :: Bool) (n :: Bool)) where- sing = (SMkFoo3 sing) sing- instance SingI (MkFoo3Sym0 :: (~>) Bool ((~>) Bool Foo3)) where- sing = (singFun2 @MkFoo3Sym0) SMkFoo3- instance SingI (TyCon2 MkFoo3 :: (~>) Bool ((~>) Bool Foo3)) where- sing = (singFun2 @(TyCon2 MkFoo3)) SMkFoo3- instance SingI d =>- SingI (MkFoo3Sym1 (d :: Bool) :: (~>) Bool Foo3) where- sing = (singFun1 @(MkFoo3Sym1 (d :: Bool))) (SMkFoo3 (sing @d))- instance SingI d =>- SingI (TyCon1 (MkFoo3 (d :: Bool)) :: (~>) Bool Foo3) where- sing- = (singFun1 @(TyCon1 (MkFoo3 (d :: Bool)))) (SMkFoo3 (sing @d))
+ tests/compile-and-dump/Singletons/ShowDeriving.ghc88.template view
@@ -0,0 +1,618 @@+Singletons/ShowDeriving.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| infixl 5 `MkFoo2b`, :*:, :&:+ + data Foo1+ = MkFoo1+ deriving Show+ data Foo2 a+ = MkFoo2a a a | a `MkFoo2b` a | (:*:) a a | a :&: a+ deriving Show+ data Foo3+ = MkFoo3 {getFoo3a :: Bool, *** :: Bool}+ deriving Show |]+ ======>+ data Foo1+ = MkFoo1+ deriving Show+ infixl 5 `MkFoo2b`+ infixl 5 :*:+ infixl 5 :&:+ data Foo2 a+ = MkFoo2a a a | a `MkFoo2b` a | (:*:) a a | a :&: a+ deriving Show+ data Foo3+ = MkFoo3 {getFoo3a :: Bool, *** :: Bool}+ deriving Show+ type (***@#@$$) (a0123456789876543210 :: Foo3) =+ (***) a0123456789876543210+ instance SuppressUnusedWarnings (***@#@$) where+ suppressUnusedWarnings = snd (((,) (:***@#@$###)) ())+ data (***@#@$) :: (~>) Foo3 Bool+ where+ (:***@#@$###) :: forall a0123456789876543210+ arg. SameKind (Apply (***@#@$) arg) ((***@#@$$) arg) =>+ (***@#@$) a0123456789876543210+ type instance Apply (***@#@$) a0123456789876543210 = (***) a0123456789876543210+ type GetFoo3aSym1 (a0123456789876543210 :: Foo3) =+ GetFoo3a a0123456789876543210+ instance SuppressUnusedWarnings GetFoo3aSym0 where+ suppressUnusedWarnings = snd (((,) GetFoo3aSym0KindInference) ())+ data GetFoo3aSym0 :: (~>) Foo3 Bool+ where+ GetFoo3aSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply GetFoo3aSym0 arg) (GetFoo3aSym1 arg) =>+ GetFoo3aSym0 a0123456789876543210+ type instance Apply GetFoo3aSym0 a0123456789876543210 = GetFoo3a a0123456789876543210+ type family (***) (a :: Foo3) :: Bool where+ (***) (MkFoo3 _ field) = field+ type family GetFoo3a (a :: Foo3) :: Bool where+ GetFoo3a (MkFoo3 field _) = field+ type MkFoo1Sym0 = MkFoo1+ type MkFoo2aSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: a0123456789876543210) =+ MkFoo2a t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (MkFoo2aSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MkFoo2aSym1KindInference) ())+ data MkFoo2aSym1 (t0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 (Foo2 a0123456789876543210)+ where+ MkFoo2aSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (MkFoo2aSym1 t0123456789876543210) arg) (MkFoo2aSym2 t0123456789876543210 arg) =>+ MkFoo2aSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (MkFoo2aSym1 t0123456789876543210) t0123456789876543210 = MkFoo2a t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings MkFoo2aSym0 where+ suppressUnusedWarnings = snd (((,) MkFoo2aSym0KindInference) ())+ data MkFoo2aSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) a0123456789876543210 (Foo2 a0123456789876543210))+ where+ MkFoo2aSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkFoo2aSym0 arg) (MkFoo2aSym1 arg) =>+ MkFoo2aSym0 t0123456789876543210+ type instance Apply MkFoo2aSym0 t0123456789876543210 = MkFoo2aSym1 t0123456789876543210+ type MkFoo2bSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: a0123456789876543210) =+ MkFoo2b t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (MkFoo2bSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MkFoo2bSym1KindInference) ())+ data MkFoo2bSym1 (t0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 (Foo2 a0123456789876543210)+ where+ MkFoo2bSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (MkFoo2bSym1 t0123456789876543210) arg) (MkFoo2bSym2 t0123456789876543210 arg) =>+ MkFoo2bSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (MkFoo2bSym1 t0123456789876543210) t0123456789876543210 = MkFoo2b t0123456789876543210 t0123456789876543210+ infixl 5 `MkFoo2bSym1`+ instance SuppressUnusedWarnings MkFoo2bSym0 where+ suppressUnusedWarnings = snd (((,) MkFoo2bSym0KindInference) ())+ data MkFoo2bSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) a0123456789876543210 (Foo2 a0123456789876543210))+ where+ MkFoo2bSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkFoo2bSym0 arg) (MkFoo2bSym1 arg) =>+ MkFoo2bSym0 t0123456789876543210+ type instance Apply MkFoo2bSym0 t0123456789876543210 = MkFoo2bSym1 t0123456789876543210+ infixl 5 `MkFoo2bSym0`+ type (:*:@#@$$$) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: a0123456789876543210) =+ (:*:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ((:*:@#@$$) t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::*:@#@$$###)) ())+ data (:*:@#@$$) (t0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 (Foo2 a0123456789876543210)+ where+ (::*:@#@$$###) :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply ((:*:@#@$$) t0123456789876543210) arg) ((:*:@#@$$$) t0123456789876543210 arg) =>+ (:*:@#@$$) t0123456789876543210 t0123456789876543210+ type instance Apply ((:*:@#@$$) t0123456789876543210) t0123456789876543210 = (:*:) t0123456789876543210 t0123456789876543210+ infixl 5 :*:@#@$$+ instance SuppressUnusedWarnings (:*:@#@$) where+ suppressUnusedWarnings = snd (((,) (::*:@#@$###)) ())+ data (:*:@#@$) :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) a0123456789876543210 (Foo2 a0123456789876543210))+ where+ (::*:@#@$###) :: forall t0123456789876543210+ arg. SameKind (Apply (:*:@#@$) arg) ((:*:@#@$$) arg) =>+ (:*:@#@$) t0123456789876543210+ type instance Apply (:*:@#@$) t0123456789876543210 = (:*:@#@$$) t0123456789876543210+ infixl 5 :*:@#@$+ type (:&:@#@$$$) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: a0123456789876543210) =+ (:&:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ((:&:@#@$$) t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::&:@#@$$###)) ())+ data (:&:@#@$$) (t0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 (Foo2 a0123456789876543210)+ where+ (::&:@#@$$###) :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply ((:&:@#@$$) t0123456789876543210) arg) ((:&:@#@$$$) t0123456789876543210 arg) =>+ (:&:@#@$$) t0123456789876543210 t0123456789876543210+ type instance Apply ((:&:@#@$$) t0123456789876543210) t0123456789876543210 = (:&:) t0123456789876543210 t0123456789876543210+ infixl 5 :&:@#@$$+ instance SuppressUnusedWarnings (:&:@#@$) where+ suppressUnusedWarnings = snd (((,) (::&:@#@$###)) ())+ data (:&:@#@$) :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) a0123456789876543210 (Foo2 a0123456789876543210))+ where+ (::&:@#@$###) :: forall t0123456789876543210+ arg. SameKind (Apply (:&:@#@$) arg) ((:&:@#@$$) arg) =>+ (:&:@#@$) t0123456789876543210+ type instance Apply (:&:@#@$) t0123456789876543210 = (:&:@#@$$) t0123456789876543210+ infixl 5 :&:@#@$+ type MkFoo3Sym2 (t0123456789876543210 :: Bool) (t0123456789876543210 :: Bool) =+ MkFoo3 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (MkFoo3Sym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MkFoo3Sym1KindInference) ())+ data MkFoo3Sym1 (t0123456789876543210 :: Bool) :: (~>) Bool Foo3+ where+ MkFoo3Sym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (MkFoo3Sym1 t0123456789876543210) arg) (MkFoo3Sym2 t0123456789876543210 arg) =>+ MkFoo3Sym1 t0123456789876543210 t0123456789876543210+ type instance Apply (MkFoo3Sym1 t0123456789876543210) t0123456789876543210 = MkFoo3 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings MkFoo3Sym0 where+ suppressUnusedWarnings = snd (((,) MkFoo3Sym0KindInference) ())+ data MkFoo3Sym0 :: (~>) Bool ((~>) Bool Foo3)+ where+ MkFoo3Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkFoo3Sym0 arg) (MkFoo3Sym1 arg) =>+ MkFoo3Sym0 t0123456789876543210+ type instance Apply MkFoo3Sym0 t0123456789876543210 = MkFoo3Sym1 t0123456789876543210+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo1) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 _ MkFoo1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "MkFoo1") a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo1) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo1) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Foo1 ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo1 ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow Foo1 where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo2 a) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 p_0123456789876543210 (MkFoo2a arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "MkFoo2a ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210+ ShowsPrec_0123456789876543210 p_0123456789876543210 (MkFoo2b argL_0123456789876543210 argR_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 5))) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argL_0123456789876543210)) (Apply (Apply (.@#@$) (Apply ShowStringSym0 " `MkFoo2b` ")) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argR_0123456789876543210)))) a_0123456789876543210+ ShowsPrec_0123456789876543210 p_0123456789876543210 ((:*:) arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "(:*:) ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210+ ShowsPrec_0123456789876543210 p_0123456789876543210 ((:&:) argL_0123456789876543210 argR_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 5))) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argL_0123456789876543210)) (Apply (Apply (.@#@$) (Apply ShowStringSym0 " :&: ")) (Apply (Apply ShowsPrecSym0 (FromInteger 6)) argR_0123456789876543210)))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo2 a0123456789876543210) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo2 a0123456789876543210) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210.+ (~>) (Foo2 a0123456789876543210) ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) GHC.Types.Nat ((~>) (Foo2 a0123456789876543210) ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow (Foo2 a) where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Foo3) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 p_0123456789876543210 (MkFoo3 arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "MkFoo3 ")) (Apply (Apply (.@#@$) (Apply ShowCharSym0 "{")) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "getFoo3a = ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 0)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowCommaSpaceSym0) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "(***) = ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 0)) arg_0123456789876543210)) (Apply ShowCharSym0 "}"))))))))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo3) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Foo3) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Foo3 ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Foo3 ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow Foo3 where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ infixl 5 :%&:+ infixl 5 :%*:+ infixl 5 `SMkFoo2b`+ data SFoo1 :: Foo1 -> GHC.Types.Type where SMkFoo1 :: SFoo1 MkFoo1+ type instance Sing @Foo1 = SFoo1+ instance SingKind Foo1 where+ type Demote Foo1 = Foo1+ fromSing SMkFoo1 = MkFoo1+ toSing MkFoo1 = SomeSing SMkFoo1+ data SFoo2 :: forall a. Foo2 a -> GHC.Types.Type+ where+ SMkFoo2a :: forall a (n :: a) (n :: a).+ (Sing (n :: a)) -> (Sing (n :: a)) -> SFoo2 (MkFoo2a n n)+ SMkFoo2b :: forall a (n :: a) (n :: a).+ (Sing (n :: a)) -> (Sing (n :: a)) -> SFoo2 (MkFoo2b n n)+ (:%*:) :: forall a (n :: a) (n :: a).+ (Sing (n :: a)) -> (Sing (n :: a)) -> SFoo2 ((:*:) n n)+ (:%&:) :: forall a (n :: a) (n :: a).+ (Sing (n :: a)) -> (Sing (n :: a)) -> SFoo2 ((:&:) n n)+ type instance Sing @(Foo2 a) = SFoo2+ instance SingKind a => SingKind (Foo2 a) where+ type Demote (Foo2 a) = Foo2 (Demote a)+ fromSing (SMkFoo2a b b) = (MkFoo2a (fromSing b)) (fromSing b)+ fromSing (SMkFoo2b b b) = (MkFoo2b (fromSing b)) (fromSing b)+ fromSing ((:%*:) b b) = ((:*:) (fromSing b)) (fromSing b)+ fromSing ((:%&:) b b) = ((:&:) (fromSing b)) (fromSing b)+ toSing (MkFoo2a (b :: Demote a) (b :: Demote a))+ = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo2a c) c) }+ toSing (MkFoo2b (b :: Demote a) (b :: Demote a))+ = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo2b c) c) }+ toSing ((:*:) (b :: Demote a) (b :: Demote a))+ = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c) }+ toSing ((:&:) (b :: Demote a) (b :: Demote a))+ = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing a) of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%&:) c) c) }+ data SFoo3 :: Foo3 -> GHC.Types.Type+ where+ SMkFoo3 :: forall (n :: Bool) (n :: Bool).+ {sGetFoo3a :: (Sing (n :: Bool)), %*** :: (Sing (n :: Bool))}+ -> SFoo3 (MkFoo3 n n)+ type instance Sing @Foo3 = SFoo3+ instance SingKind Foo3 where+ type Demote Foo3 = Foo3+ fromSing (SMkFoo3 b b) = (MkFoo3 (fromSing b)) (fromSing b)+ toSing (MkFoo3 (b :: Demote Bool) (b :: Demote Bool))+ = case+ ((,) (toSing b :: SomeSing Bool)) (toSing b :: SomeSing Bool)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkFoo3 c) c) }+ instance SShow Foo1 where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: Foo1) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Foo1 ((~>) Symbol Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ _+ SMkFoo1+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "MkFoo1")))+ sA_0123456789876543210+ instance SShow a => SShow (Foo2 a) where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: Foo2 a) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Foo2 a) ((~>) Symbol Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SMkFoo2a (sArg_0123456789876543210 :: Sing arg_0123456789876543210)+ (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "MkFoo2a "))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @ShowSpaceSym0) sShowSpace)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))))+ sA_0123456789876543210+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SMkFoo2b (sArgL_0123456789876543210 :: Sing argL_0123456789876543210)+ (sArgR_0123456789876543210 :: Sing argR_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 5)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 6))))+ sArgL_0123456789876543210)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing " `MkFoo2b` "))))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 6))))+ sArgR_0123456789876543210)))))+ sA_0123456789876543210+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ ((:%*:) (sArg_0123456789876543210 :: Sing arg_0123456789876543210)+ (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "(:*:) "))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @ShowSpaceSym0) sShowSpace)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))))+ sA_0123456789876543210+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ ((:%&:) (sArgL_0123456789876543210 :: Sing argL_0123456789876543210)+ (sArgR_0123456789876543210 :: Sing argR_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 5)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 6))))+ sArgL_0123456789876543210)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing " :&: "))))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 6))))+ sArgR_0123456789876543210)))))+ sA_0123456789876543210+ instance SShow Bool => SShow Foo3 where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: Foo3) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Foo3 ((~>) Symbol Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SMkFoo3 (sArg_0123456789876543210 :: Sing arg_0123456789876543210)+ (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "MkFoo3 "))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowCharSym0) sShowChar))+ (sing :: Sing "{"))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "getFoo3a = "))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 0))))+ sArg_0123456789876543210)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @ShowCommaSpaceSym0) sShowCommaSpace)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "(***) = "))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 0))))+ sArg_0123456789876543210)))+ ((applySing ((singFun2 @ShowCharSym0) sShowChar))+ (sing :: Sing "}")))))))))))+ sA_0123456789876543210+ instance Show (SFoo1 (z :: Foo1)) where+ showsPrec _ SMkFoo1 = showString "SMkFoo1"+ instance Data.Singletons.ShowSing.ShowSing a =>+ Show (SFoo2 (z :: Foo2 a)) where+ showsPrec+ p_0123456789876543210+ (SMkFoo2a (arg_0123456789876543210 :: Sing argTy_0123456789876543210)+ (arg_0123456789876543210 :: Sing argTy_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 10))+ (((.) (showString "SMkFoo2a "))+ (((.) ((showsPrec 11) arg_0123456789876543210))+ (((.) GHC.Show.showSpace)+ ((showsPrec 11) arg_0123456789876543210)))) ::+ (Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210,+ Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210) =>+ ShowS+ showsPrec+ p_0123456789876543210+ (SMkFoo2b (argL_0123456789876543210 :: Sing argTyL_0123456789876543210)+ (argR_0123456789876543210 :: Sing argTyR_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 9))+ (((.) ((showsPrec 10) argL_0123456789876543210))+ (((.) (showString " `SMkFoo2b` "))+ ((showsPrec 10) argR_0123456789876543210))) ::+ (Data.Singletons.ShowSing.ShowSing' argTyL_0123456789876543210,+ Data.Singletons.ShowSing.ShowSing' argTyR_0123456789876543210) =>+ ShowS+ showsPrec+ p_0123456789876543210+ ((:%*:) (arg_0123456789876543210 :: Sing argTy_0123456789876543210)+ (arg_0123456789876543210 :: Sing argTy_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 10))+ (((.) (showString "(:%*:) "))+ (((.) ((showsPrec 11) arg_0123456789876543210))+ (((.) GHC.Show.showSpace)+ ((showsPrec 11) arg_0123456789876543210)))) ::+ (Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210,+ Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210) =>+ ShowS+ showsPrec+ p_0123456789876543210+ ((:%&:) (argL_0123456789876543210 :: Sing argTyL_0123456789876543210)+ (argR_0123456789876543210 :: Sing argTyR_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 9))+ (((.) ((showsPrec 10) argL_0123456789876543210))+ (((.) (showString " :%&: "))+ ((showsPrec 10) argR_0123456789876543210))) ::+ (Data.Singletons.ShowSing.ShowSing' argTyL_0123456789876543210,+ Data.Singletons.ShowSing.ShowSing' argTyR_0123456789876543210) =>+ ShowS+ instance Data.Singletons.ShowSing.ShowSing Bool =>+ Show (SFoo3 (z :: Foo3)) where+ showsPrec+ p_0123456789876543210+ (SMkFoo3 (arg_0123456789876543210 :: Sing argTy_0123456789876543210)+ (arg_0123456789876543210 :: Sing argTy_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 10))+ (((.) (showString "SMkFoo3 "))+ (((.) (showChar '{'))+ (((.) (showString "sGetFoo3a = "))+ (((.) ((showsPrec 0) arg_0123456789876543210))+ (((.) GHC.Show.showCommaSpace)+ (((.) (showString "(%***) = "))+ (((.) ((showsPrec 0) arg_0123456789876543210))+ (showChar '}')))))))) ::+ (Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210,+ Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210) =>+ ShowS+ instance SingI MkFoo1 where+ sing = SMkFoo1+ instance (SingI n, SingI n) =>+ SingI (MkFoo2a (n :: a) (n :: a)) where+ sing = (SMkFoo2a sing) sing+ instance SingI (MkFoo2aSym0 :: (~>) a ((~>) a (Foo2 a))) where+ sing = (singFun2 @MkFoo2aSym0) SMkFoo2a+ instance SingI d =>+ SingI (MkFoo2aSym1 (d :: a) :: (~>) a (Foo2 a)) where+ sing = (singFun1 @(MkFoo2aSym1 (d :: a))) (SMkFoo2a (sing @d))+ instance (SingI n, SingI n) =>+ SingI (MkFoo2b (n :: a) (n :: a)) where+ sing = (SMkFoo2b sing) sing+ instance SingI (MkFoo2bSym0 :: (~>) a ((~>) a (Foo2 a))) where+ sing = (singFun2 @MkFoo2bSym0) SMkFoo2b+ instance SingI d =>+ SingI (MkFoo2bSym1 (d :: a) :: (~>) a (Foo2 a)) where+ sing = (singFun1 @(MkFoo2bSym1 (d :: a))) (SMkFoo2b (sing @d))+ instance (SingI n, SingI n) =>+ SingI ((:*:) (n :: a) (n :: a)) where+ sing = ((:%*:) sing) sing+ instance SingI ((:*:@#@$) :: (~>) a ((~>) a (Foo2 a))) where+ sing = (singFun2 @(:*:@#@$)) (:%*:)+ instance SingI d =>+ SingI ((:*:@#@$$) (d :: a) :: (~>) a (Foo2 a)) where+ sing = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) (sing @d))+ instance (SingI n, SingI n) =>+ SingI ((:&:) (n :: a) (n :: a)) where+ sing = ((:%&:) sing) sing+ instance SingI ((:&:@#@$) :: (~>) a ((~>) a (Foo2 a))) where+ sing = (singFun2 @(:&:@#@$)) (:%&:)+ instance SingI d =>+ SingI ((:&:@#@$$) (d :: a) :: (~>) a (Foo2 a)) where+ sing = (singFun1 @((:&:@#@$$) (d :: a))) ((:%&:) (sing @d))+ instance (SingI n, SingI n) =>+ SingI (MkFoo3 (n :: Bool) (n :: Bool)) where+ sing = (SMkFoo3 sing) sing+ instance SingI (MkFoo3Sym0 :: (~>) Bool ((~>) Bool Foo3)) where+ sing = (singFun2 @MkFoo3Sym0) SMkFoo3+ instance SingI d =>+ SingI (MkFoo3Sym1 (d :: Bool) :: (~>) Bool Foo3) where+ sing = (singFun1 @(MkFoo3Sym1 (d :: Bool))) (SMkFoo3 (sing @d))
− tests/compile-and-dump/Singletons/StandaloneDeriving.ghc86.template
@@ -1,447 +0,0 @@-Singletons/StandaloneDeriving.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| infixl 6 :*:- - data T a b = a :*: b- data S = S1 | S2- - deriving instance Enum S- deriving instance Bounded S- deriving instance Show S- deriving instance Ord S- deriving instance Eq S- deriving instance Show a => Show (T a ())- deriving instance Ord a => Ord (T a ())- deriving instance Eq a => Eq (T a ()) |]- ======>- infixl 6 :*:- data T a b = a :*: b- data S = S1 | S2- deriving instance Eq a => Eq (T a ())- deriving instance Ord a => Ord (T a ())- deriving instance Show a => Show (T a ())- deriving instance Eq S- deriving instance Ord S- deriving instance Show S- deriving instance Bounded S- deriving instance Enum S- type (:*:@#@$$$) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =- (:*:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ((:*:@#@$$) t0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::*:@#@$$###)) ())- data (:*:@#@$$) (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 (T a0123456789876543210 b0123456789876543210)- where- (::*:@#@$$###) :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply ((:*:@#@$$) t0123456789876543210) arg) ((:*:@#@$$$) t0123456789876543210 arg) =>- (:*:@#@$$) t0123456789876543210 t0123456789876543210- type instance Apply ((:*:@#@$$) t0123456789876543210) t0123456789876543210 = (:*:) t0123456789876543210 t0123456789876543210- infixl 6 :*:@#@$$- instance SuppressUnusedWarnings (:*:@#@$) where- suppressUnusedWarnings = snd (((,) (::*:@#@$###)) ())- data (:*:@#@$) :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 (T a0123456789876543210 b0123456789876543210))- where- (::*:@#@$###) :: forall t0123456789876543210- arg. SameKind (Apply (:*:@#@$) arg) ((:*:@#@$$) arg) =>- (:*:@#@$) t0123456789876543210- type instance Apply (:*:@#@$) t0123456789876543210 = (:*:@#@$$) t0123456789876543210- infixl 6 :*:@#@$- type S1Sym0 = S1- type S2Sym0 = S2- type family Compare_0123456789876543210 (a :: T a ()) (a :: T a ()) :: Ordering where- Compare_0123456789876543210 ((:*:) a_0123456789876543210 a_0123456789876543210) ((:*:) b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: T a0123456789876543210 ()) (a0123456789876543210 :: T a0123456789876543210 ()) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: T a0123456789876543210 ()) :: (~>) (T a0123456789876543210 ()) Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) (T a0123456789876543210 ()) ((~>) (T a0123456789876543210 ()) Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd (T a ()) where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: T a ()) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 p_0123456789876543210 ((:*:) argL_0123456789876543210 argR_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 6))) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 7)) argL_0123456789876543210)) (Apply (Apply (.@#@$) (Apply ShowStringSym0 " :*: ")) (Apply (Apply ShowsPrecSym0 (FromInteger 7)) argR_0123456789876543210)))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T a0123456789876543210 ()) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T a0123456789876543210 ()) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210.- (~>) (T a0123456789876543210 ()) ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) GHC.Types.Nat ((~>) (T a0123456789876543210 ()) ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow (T a ()) where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family Compare_0123456789876543210 (a :: S) (a :: S) :: Ordering where- Compare_0123456789876543210 S1 S1 = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 S2 S2 = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 S1 S2 = LTSym0- Compare_0123456789876543210 S2 S1 = GTSym0- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: S) (a0123456789876543210 :: S) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: S) :: (~>) S Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: (~>) S ((~>) S Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd S where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: S) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 _ S1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "S1") a_0123456789876543210- ShowsPrec_0123456789876543210 _ S2 a_0123456789876543210 = Apply (Apply ShowStringSym0 "S2") a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: S) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: S) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) S ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) S ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow S where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family MinBound_0123456789876543210 :: S where- MinBound_0123456789876543210 = S1Sym0- type MinBound_0123456789876543210Sym0 =- MinBound_0123456789876543210- type family MaxBound_0123456789876543210 :: S where- MaxBound_0123456789876543210 = S2Sym0- type MaxBound_0123456789876543210Sym0 =- MaxBound_0123456789876543210- instance PBounded S where- type MinBound = MinBound_0123456789876543210Sym0- type MaxBound = MaxBound_0123456789876543210Sym0- type family Case_0123456789876543210 n t where- Case_0123456789876543210 n 'True = S2Sym0- Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"- type family Case_0123456789876543210 n t where- Case_0123456789876543210 n 'True = S1Sym0- Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 1))- type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: S where- ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0))- type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) =- ToEnum_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())- data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat S- where- ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>- ToEnum_0123456789876543210Sym0 a0123456789876543210- type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210- type family FromEnum_0123456789876543210 (a :: S) :: GHC.Types.Nat where- FromEnum_0123456789876543210 S1 = FromInteger 0- FromEnum_0123456789876543210 S2 = FromInteger 1- type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: S) =- FromEnum_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())- data FromEnum_0123456789876543210Sym0 :: (~>) S GHC.Types.Nat- where- FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>- FromEnum_0123456789876543210Sym0 a0123456789876543210- type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210- instance PEnum S where- type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a- type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a- type family Equals_0123456789876543210 (a :: T a ()) (b :: T a ()) :: Bool where- Equals_0123456789876543210 ((:*:) a a) ((:*:) b b) = (&&) ((==) a b) ((==) a b)- Equals_0123456789876543210 (_ :: T a ()) (_ :: T a ()) = FalseSym0- instance PEq (T a ()) where- type (==) a b = Equals_0123456789876543210 a b- type family Equals_0123456789876543210 (a :: S) (b :: S) :: Bool where- Equals_0123456789876543210 S1 S1 = TrueSym0- Equals_0123456789876543210 S2 S2 = TrueSym0- Equals_0123456789876543210 (_ :: S) (_ :: S) = FalseSym0- instance PEq S where- type (==) a b = Equals_0123456789876543210 a b- infixl 6 :%*:- data instance Sing :: T a b -> GHC.Types.Type- where- (:%*:) :: forall a b (n :: a) (n :: b).- (Sing (n :: a)) -> (Sing (n :: b)) -> Sing ((:*:) n n)- type ST = (Sing :: T a b -> GHC.Types.Type)- instance (SingKind a, SingKind b) => SingKind (T a b) where- type Demote (T a b) = T (Demote a) (Demote b)- fromSing ((:%*:) b b) = ((:*:) (fromSing b)) (fromSing b)- toSing ((:*:) (b :: Demote a) (b :: Demote b))- = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {- (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c) }- data instance Sing :: S -> GHC.Types.Type- where- SS1 :: Sing S1- SS2 :: Sing S2- type SS = (Sing :: S -> GHC.Types.Type)- instance SingKind S where- type Demote S = S- fromSing SS1 = S1- fromSing SS2 = S2- toSing S1 = SomeSing SS1- toSing S2 = SomeSing SS2- instance SOrd a => SOrd (T a ()) where- sCompare ::- forall (t1 :: T a ()) (t2 :: T a ()).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun (T a ()) ((~>) (T a ()) Ordering)- -> GHC.Types.Type) t1) t2)- sCompare- ((:%*:) (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- ((:%*:) (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil))- instance SShow a => SShow (T a ()) where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: T a ()) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (T a ()) ((~>) Symbol Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- ((:%*:) (sArgL_0123456789876543210 :: Sing argL_0123456789876543210)- (sArgR_0123456789876543210 :: Sing argR_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 6)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 7))))- sArgL_0123456789876543210)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing " :*: "))))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 7))))- sArgR_0123456789876543210)))))- sA_0123456789876543210- instance SOrd S where- sCompare ::- forall (t1 :: S) (t2 :: S).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun S ((~>) S Ordering)- -> GHC.Types.Type) t1) t2)- sCompare SS1 SS1- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- SNil- sCompare SS2 SS2- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- SNil- sCompare SS1 SS2 = SLT- sCompare SS2 SS1 = SGT- instance SShow S where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: S) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) S ((~>) Symbol Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- _- SS1- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "S1")))- sA_0123456789876543210- sShowsPrec- _- SS2- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "S2")))- sA_0123456789876543210- instance SBounded S where- sMinBound :: Sing (MinBoundSym0 :: S)- sMaxBound :: Sing (MaxBoundSym0 :: S)- sMinBound = SS1- sMaxBound = SS2- instance SEnum S where- sToEnum ::- forall (t :: GHC.Types.Nat).- Sing t- -> Sing (Apply (ToEnumSym0 :: TyFun GHC.Types.Nat S- -> GHC.Types.Type) t)- sFromEnum ::- forall (t :: S).- Sing t- -> Sing (Apply (FromEnumSym0 :: TyFun S GHC.Types.Nat- -> GHC.Types.Type) t)- sToEnum (sN :: Sing n)- = (case- (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))- (sFromInteger (sing :: Sing 0))- of- STrue -> SS1- SFalse- -> (case- (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))- (sFromInteger (sing :: Sing 1))- of- STrue -> SS2- SFalse -> sError (sing :: Sing "toEnum: bad argument")) ::- Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 1)))) ::- Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0)))- sFromEnum SS1 = sFromInteger (sing :: Sing 0)- sFromEnum SS2 = sFromInteger (sing :: Sing 1)- instance SEq a => SEq (T a ()) where- (%==) ((:%*:) a a) ((:%*:) b b)- = ((%&&) (((%==) a) b)) (((%==) a) b)- instance SDecide a => SDecide (T a ()) where- (%~) ((:%*:) a a) ((:%*:) b b)- = case ((,) (((%~) a) b)) (((%~) a) b) of- (,) (Proved Refl) (Proved Refl) -> Proved Refl- (,) (Disproved contra) _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,) _ (Disproved contra)- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- instance SEq S where- (%==) SS1 SS1 = STrue- (%==) SS1 SS2 = SFalse- (%==) SS2 SS1 = SFalse- (%==) SS2 SS2 = STrue- instance SDecide S where- (%~) SS1 SS1 = Proved Refl- (%~) SS1 SS2 = Disproved (\ x -> case x of)- (%~) SS2 SS1 = Disproved (\ x -> case x of)- (%~) SS2 SS2 = Proved Refl- deriving instance Data.Singletons.ShowSing.ShowSing a =>- Show (Sing (z :: T a ()))- deriving instance Show (Sing (z :: S))- instance (SingI n, SingI n) =>- SingI ((:*:) (n :: a) (n :: b)) where- sing = ((:%*:) sing) sing- instance SingI ((:*:@#@$) :: (~>) a ((~>) b (T a b))) where- sing = (singFun2 @(:*:@#@$)) (:%*:)- instance SingI (TyCon2 (:*:) :: (~>) a ((~>) b (T a b))) where- sing = (singFun2 @(TyCon2 (:*:))) (:%*:)- instance SingI d =>- SingI ((:*:@#@$$) (d :: a) :: (~>) b (T a b)) where- sing = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) (sing @d))- instance SingI d =>- SingI (TyCon1 ((:*:) (d :: a)) :: (~>) b (T a b)) where- sing = (singFun1 @(TyCon1 ((:*:) (d :: a)))) ((:%*:) (sing @d))- instance SingI S1 where- sing = SS1- instance SingI S2 where- sing = SS2
+ tests/compile-and-dump/Singletons/StandaloneDeriving.ghc88.template view
@@ -0,0 +1,475 @@+Singletons/StandaloneDeriving.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| infixl 6 :*:+ + data T a b = a :*: b+ data S = S1 | S2+ + deriving instance Enum S+ deriving instance Bounded S+ deriving instance Show S+ deriving instance Ord S+ deriving instance Eq S+ deriving instance Show a => Show (T a ())+ deriving instance Ord a => Ord (T a ())+ deriving instance Eq a => Eq (T a ()) |]+ ======>+ infixl 6 :*:+ data T a b = a :*: b+ data S = S1 | S2+ deriving instance Eq a => Eq (T a ())+ deriving instance Ord a => Ord (T a ())+ deriving instance Show a => Show (T a ())+ deriving instance Eq S+ deriving instance Ord S+ deriving instance Show S+ deriving instance Bounded S+ deriving instance Enum S+ type (:*:@#@$$$) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =+ (:*:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ((:*:@#@$$) t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::*:@#@$$###)) ())+ data (:*:@#@$$) (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 (T a0123456789876543210 b0123456789876543210)+ where+ (::*:@#@$$###) :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply ((:*:@#@$$) t0123456789876543210) arg) ((:*:@#@$$$) t0123456789876543210 arg) =>+ (:*:@#@$$) t0123456789876543210 t0123456789876543210+ type instance Apply ((:*:@#@$$) t0123456789876543210) t0123456789876543210 = (:*:) t0123456789876543210 t0123456789876543210+ infixl 6 :*:@#@$$+ instance SuppressUnusedWarnings (:*:@#@$) where+ suppressUnusedWarnings = snd (((,) (::*:@#@$###)) ())+ data (:*:@#@$) :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 (T a0123456789876543210 b0123456789876543210))+ where+ (::*:@#@$###) :: forall t0123456789876543210+ arg. SameKind (Apply (:*:@#@$) arg) ((:*:@#@$$) arg) =>+ (:*:@#@$) t0123456789876543210+ type instance Apply (:*:@#@$) t0123456789876543210 = (:*:@#@$$) t0123456789876543210+ infixl 6 :*:@#@$+ type S1Sym0 = S1+ type S2Sym0 = S2+ type family Compare_0123456789876543210 (a :: T a ()) (a :: T a ()) :: Ordering where+ Compare_0123456789876543210 ((:*:) a_0123456789876543210 a_0123456789876543210) ((:*:) b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: T a0123456789876543210 ()) (a0123456789876543210 :: T a0123456789876543210 ()) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: T a0123456789876543210 ()) :: (~>) (T a0123456789876543210 ()) Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) (T a0123456789876543210 ()) ((~>) (T a0123456789876543210 ()) Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd (T a ()) where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: T a ()) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 p_0123456789876543210 ((:*:) argL_0123456789876543210 argR_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 6))) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 7)) argL_0123456789876543210)) (Apply (Apply (.@#@$) (Apply ShowStringSym0 " :*: ")) (Apply (Apply ShowsPrecSym0 (FromInteger 7)) argR_0123456789876543210)))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T a0123456789876543210 ()) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T a0123456789876543210 ()) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210.+ (~>) (T a0123456789876543210 ()) ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) GHC.Types.Nat ((~>) (T a0123456789876543210 ()) ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow (T a ()) where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family Compare_0123456789876543210 (a :: S) (a :: S) :: Ordering where+ Compare_0123456789876543210 S1 S1 = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 S2 S2 = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 S1 S2 = LTSym0+ Compare_0123456789876543210 S2 S1 = GTSym0+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: S) (a0123456789876543210 :: S) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: S) :: (~>) S Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: (~>) S ((~>) S Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd S where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: S) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 _ S1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "S1") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ S2 a_0123456789876543210 = Apply (Apply ShowStringSym0 "S2") a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: S) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: S) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) S ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) S ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow S where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family MinBound_0123456789876543210 :: S where+ MinBound_0123456789876543210 = S1Sym0+ type MinBound_0123456789876543210Sym0 =+ MinBound_0123456789876543210+ type family MaxBound_0123456789876543210 :: S where+ MaxBound_0123456789876543210 = S2Sym0+ type MaxBound_0123456789876543210Sym0 =+ MaxBound_0123456789876543210+ instance PBounded S where+ type MinBound = MinBound_0123456789876543210Sym0+ type MaxBound = MaxBound_0123456789876543210Sym0+ type family Case_0123456789876543210 n t where+ Case_0123456789876543210 n 'True = S2Sym0+ Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"+ type family Case_0123456789876543210 n t where+ Case_0123456789876543210 n 'True = S1Sym0+ Case_0123456789876543210 n 'False = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 1))+ type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: S where+ ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0))+ type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) =+ ToEnum_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())+ data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat S+ where+ ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>+ ToEnum_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210+ type family FromEnum_0123456789876543210 (a :: S) :: GHC.Types.Nat where+ FromEnum_0123456789876543210 S1 = FromInteger 0+ FromEnum_0123456789876543210 S2 = FromInteger 1+ type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: S) =+ FromEnum_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())+ data FromEnum_0123456789876543210Sym0 :: (~>) S GHC.Types.Nat+ where+ FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>+ FromEnum_0123456789876543210Sym0 a0123456789876543210+ type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210+ instance PEnum S where+ type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a+ type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a+ type family Equals_0123456789876543210 (a :: T a ()) (b :: T a ()) :: Bool where+ Equals_0123456789876543210 ((:*:) a a) ((:*:) b b) = (&&) ((==) a b) ((==) a b)+ Equals_0123456789876543210 (_ :: T a ()) (_ :: T a ()) = FalseSym0+ instance PEq (T a ()) where+ type (==) a b = Equals_0123456789876543210 a b+ type family Equals_0123456789876543210 (a :: S) (b :: S) :: Bool where+ Equals_0123456789876543210 S1 S1 = TrueSym0+ Equals_0123456789876543210 S2 S2 = TrueSym0+ Equals_0123456789876543210 (_ :: S) (_ :: S) = FalseSym0+ instance PEq S where+ type (==) a b = Equals_0123456789876543210 a b+ infixl 6 :%*:+ data ST :: forall a b. T a b -> GHC.Types.Type+ where+ (:%*:) :: forall a b (n :: a) (n :: b).+ (Sing (n :: a)) -> (Sing (n :: b)) -> ST ((:*:) n n)+ type instance Sing @(T a b) = ST+ instance (SingKind a, SingKind b) => SingKind (T a b) where+ type Demote (T a b) = T (Demote a) (Demote b)+ fromSing ((:%*:) b b) = ((:*:) (fromSing b)) (fromSing b)+ toSing ((:*:) (b :: Demote a) (b :: Demote b))+ = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c) }+ data SS :: S -> GHC.Types.Type+ where+ SS1 :: SS S1+ SS2 :: SS S2+ type instance Sing @S = SS+ instance SingKind S where+ type Demote S = S+ fromSing SS1 = S1+ fromSing SS2 = S2+ toSing S1 = SomeSing SS1+ toSing S2 = SomeSing SS2+ instance SOrd a => SOrd (T a ()) where+ sCompare ::+ forall (t1 :: T a ()) (t2 :: T a ()).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun (T a ()) ((~>) (T a ()) Ordering)+ -> GHC.Types.Type) t1) t2)+ sCompare+ ((:%*:) (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ ((:%*:) (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil))+ instance SShow a => SShow (T a ()) where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: T a ()) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (T a ()) ((~>) Symbol Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ ((:%*:) (sArgL_0123456789876543210 :: Sing argL_0123456789876543210)+ (sArgR_0123456789876543210 :: Sing argR_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 6)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 7))))+ sArgL_0123456789876543210)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing " :*: "))))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 7))))+ sArgR_0123456789876543210)))))+ sA_0123456789876543210+ instance SOrd S where+ sCompare ::+ forall (t1 :: S) (t2 :: S).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun S ((~>) S Ordering)+ -> GHC.Types.Type) t1) t2)+ sCompare SS1 SS1+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ SNil+ sCompare SS2 SS2+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ SNil+ sCompare SS1 SS2 = SLT+ sCompare SS2 SS1 = SGT+ instance SShow S where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: S) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) S ((~>) Symbol Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ _+ SS1+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "S1")))+ sA_0123456789876543210+ sShowsPrec+ _+ SS2+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "S2")))+ sA_0123456789876543210+ instance SBounded S where+ sMinBound :: Sing (MinBoundSym0 :: S)+ sMaxBound :: Sing (MaxBoundSym0 :: S)+ sMinBound = SS1+ sMaxBound = SS2+ instance SEnum S where+ sToEnum ::+ forall (t :: GHC.Types.Nat).+ Sing t+ -> Sing (Apply (ToEnumSym0 :: TyFun GHC.Types.Nat S+ -> GHC.Types.Type) t)+ sFromEnum ::+ forall (t :: S).+ Sing t+ -> Sing (Apply (FromEnumSym0 :: TyFun S GHC.Types.Nat+ -> GHC.Types.Type) t)+ sToEnum (sN :: Sing n)+ = (id+ @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 0)))))+ (case+ (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))+ (sFromInteger (sing :: Sing 0))+ of+ STrue -> SS1+ SFalse+ -> (id+ @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (FromInteger 1)))))+ (case+ (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))+ (sFromInteger (sing :: Sing 1))+ of+ STrue -> SS2+ SFalse -> sError (sing :: Sing "toEnum: bad argument")))+ sFromEnum SS1 = sFromInteger (sing :: Sing 0)+ sFromEnum SS2 = sFromInteger (sing :: Sing 1)+ instance SEq a => SEq (T a ()) where+ (%==) ((:%*:) a a) ((:%*:) b b)+ = ((%&&) (((%==) a) b)) (((%==) a) b)+ instance SDecide a => SDecide (T a ()) where+ (%~) ((:%*:) a a) ((:%*:) b b)+ = case ((,) (((%~) a) b)) (((%~) a) b) of+ (,) (Proved Refl) (Proved Refl) -> Proved Refl+ (,) (Disproved contra) _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,) _ (Disproved contra)+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ instance SDecide a =>+ Data.Type.Equality.TestEquality (ST :: T a ()+ -> GHC.Types.Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance SDecide a =>+ Data.Type.Coercion.TestCoercion (ST :: T a ()+ -> GHC.Types.Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance SEq S where+ (%==) SS1 SS1 = STrue+ (%==) SS1 SS2 = SFalse+ (%==) SS2 SS1 = SFalse+ (%==) SS2 SS2 = STrue+ instance SDecide S where+ (%~) SS1 SS1 = Proved Refl+ (%~) SS1 SS2 = Disproved (\ x -> case x of)+ (%~) SS2 SS1 = Disproved (\ x -> case x of)+ (%~) SS2 SS2 = Proved Refl+ instance Data.Type.Equality.TestEquality (SS :: S+ -> GHC.Types.Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance Data.Type.Coercion.TestCoercion (SS :: S+ -> GHC.Types.Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance Data.Singletons.ShowSing.ShowSing a =>+ Show (ST (z :: T a ())) where+ showsPrec+ p_0123456789876543210+ ((:%*:) (argL_0123456789876543210 :: Sing argTyL_0123456789876543210)+ (argR_0123456789876543210 :: Sing argTyR_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 9))+ (((.) ((showsPrec 10) argL_0123456789876543210))+ (((.) (showString " :%*: "))+ ((showsPrec 10) argR_0123456789876543210))) ::+ (Data.Singletons.ShowSing.ShowSing' argTyL_0123456789876543210,+ Data.Singletons.ShowSing.ShowSing' argTyR_0123456789876543210) =>+ ShowS+ instance Show (SS (z :: S)) where+ showsPrec _ SS1 = showString "SS1"+ showsPrec _ SS2 = showString "SS2"+ instance (SingI n, SingI n) =>+ SingI ((:*:) (n :: a) (n :: b)) where+ sing = ((:%*:) sing) sing+ instance SingI ((:*:@#@$) :: (~>) a ((~>) b (T a b))) where+ sing = (singFun2 @(:*:@#@$)) (:%*:)+ instance SingI d =>+ SingI ((:*:@#@$$) (d :: a) :: (~>) b (T a b)) where+ sing = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) (sing @d))+ instance SingI S1 where+ sing = SS1+ instance SingI S2 where+ sing = SS2
− tests/compile-and-dump/Singletons/Star.ghc86.template
@@ -1,422 +0,0 @@-Singletons/Star.hs:0:0:: Splicing declarations- singletonStar [''Nat, ''Int, ''String, ''Maybe, ''Vec]- ======>- data Rep :: Type- where- Singletons.Star.Nat :: Rep- Singletons.Star.Int :: Rep- Singletons.Star.String :: Rep- Singletons.Star.Maybe :: Rep -> Rep- Singletons.Star.Vec :: Rep -> Nat -> Rep- deriving (Eq, Ord, Read, Show)- type NatSym0 = Nat- type IntSym0 = Int- type StringSym0 = String- type MaybeSym1 (t0123456789876543210 :: Type) =- Maybe t0123456789876543210- instance SuppressUnusedWarnings MaybeSym0 where- suppressUnusedWarnings = snd (((,) MaybeSym0KindInference) ())- data MaybeSym0 :: (~>) Type Type- where- MaybeSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MaybeSym0 arg) (MaybeSym1 arg) =>- MaybeSym0 t0123456789876543210- type instance Apply MaybeSym0 t0123456789876543210 = Maybe t0123456789876543210- type VecSym2 (t0123456789876543210 :: Type) (t0123456789876543210 :: Nat) =- Vec t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (VecSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) VecSym1KindInference) ())- data VecSym1 (t0123456789876543210 :: Type) :: (~>) Nat Type- where- VecSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (VecSym1 t0123456789876543210) arg) (VecSym2 t0123456789876543210 arg) =>- VecSym1 t0123456789876543210 t0123456789876543210- type instance Apply (VecSym1 t0123456789876543210) t0123456789876543210 = Vec t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings VecSym0 where- suppressUnusedWarnings = snd (((,) VecSym0KindInference) ())- data VecSym0 :: (~>) Type ((~>) Nat Type)- where- VecSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply VecSym0 arg) (VecSym1 arg) =>- VecSym0 t0123456789876543210- type instance Apply VecSym0 t0123456789876543210 = VecSym1 t0123456789876543210- type family Equals_0123456789876543210 (a :: Type) (b :: Type) :: Bool where- Equals_0123456789876543210 Nat Nat = TrueSym0- Equals_0123456789876543210 Int Int = TrueSym0- Equals_0123456789876543210 String String = TrueSym0- Equals_0123456789876543210 (Maybe a) (Maybe b) = (==) a b- Equals_0123456789876543210 (Vec a a) (Vec b b) = (&&) ((==) a b) ((==) a b)- Equals_0123456789876543210 (_ :: Type) (_ :: Type) = FalseSym0- instance PEq Type where- type (==) a b = Equals_0123456789876543210 a b- type family Compare_0123456789876543210 (a :: Type) (a :: Type) :: Ordering where- Compare_0123456789876543210 Nat Nat = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 Int Int = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 String String = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 (Maybe a_0123456789876543210) (Maybe b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])- Compare_0123456789876543210 (Vec a_0123456789876543210 a_0123456789876543210) (Vec b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))- Compare_0123456789876543210 Nat Int = LTSym0- Compare_0123456789876543210 Nat String = LTSym0- Compare_0123456789876543210 Nat (Maybe _) = LTSym0- Compare_0123456789876543210 Nat (Vec _ _) = LTSym0- Compare_0123456789876543210 Int Nat = GTSym0- Compare_0123456789876543210 Int String = LTSym0- Compare_0123456789876543210 Int (Maybe _) = LTSym0- Compare_0123456789876543210 Int (Vec _ _) = LTSym0- Compare_0123456789876543210 String Nat = GTSym0- Compare_0123456789876543210 String Int = GTSym0- Compare_0123456789876543210 String (Maybe _) = LTSym0- Compare_0123456789876543210 String (Vec _ _) = LTSym0- Compare_0123456789876543210 (Maybe _) Nat = GTSym0- Compare_0123456789876543210 (Maybe _) Int = GTSym0- Compare_0123456789876543210 (Maybe _) String = GTSym0- Compare_0123456789876543210 (Maybe _) (Vec _ _) = LTSym0- Compare_0123456789876543210 (Vec _ _) Nat = GTSym0- Compare_0123456789876543210 (Vec _ _) Int = GTSym0- Compare_0123456789876543210 (Vec _ _) String = GTSym0- Compare_0123456789876543210 (Vec _ _) (Maybe _) = GTSym0- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Type) (a0123456789876543210 :: Type) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Type) :: (~>) Type Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: (~>) Type ((~>) Type Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd Type where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Type) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 _ Nat a_0123456789876543210 = Apply (Apply ShowStringSym0 "Nat") a_0123456789876543210- ShowsPrec_0123456789876543210 _ Int a_0123456789876543210 = Apply (Apply ShowStringSym0 "Int") a_0123456789876543210- ShowsPrec_0123456789876543210 _ String a_0123456789876543210 = Apply (Apply ShowStringSym0 "String") a_0123456789876543210- ShowsPrec_0123456789876543210 p_0123456789876543210 (Maybe arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Maybe ")) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210- ShowsPrec_0123456789876543210 p_0123456789876543210 (Vec arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Vec ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Type) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Type) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Type ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Type ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow Type where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- data instance Sing :: Type -> Type- where- SNat :: Sing Nat- SInt :: Sing Int- SString :: Sing String- SMaybe :: forall (n :: Type). (Sing (n :: Type)) -> Sing (Maybe n)- SVec :: forall (n :: Type) (n :: Nat).- (Sing (n :: Type)) -> (Sing (n :: Nat)) -> Sing (Vec n n)- type SRep = (Sing :: Type -> Type)- instance SingKind Type where- type Demote Type = Rep- fromSing SNat = Singletons.Star.Nat- fromSing SInt = Singletons.Star.Int- fromSing SString = Singletons.Star.String- fromSing (SMaybe b) = Singletons.Star.Maybe (fromSing b)- fromSing (SVec b b)- = (Singletons.Star.Vec (fromSing b)) (fromSing b)- toSing Singletons.Star.Nat = SomeSing SNat- toSing Singletons.Star.Int = SomeSing SInt- toSing Singletons.Star.String = SomeSing SString- toSing (Singletons.Star.Maybe (b :: Demote Type))- = case toSing b :: SomeSing Type of {- SomeSing c -> SomeSing (SMaybe c) }- toSing (Singletons.Star.Vec (b :: Demote Type) (b :: Demote Nat))- = case- ((,) (toSing b :: SomeSing Type)) (toSing b :: SomeSing Nat)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SVec c) c) }- instance (SEq Type, SEq Nat) => SEq Type where- (%==) SNat SNat = STrue- (%==) SNat SInt = SFalse- (%==) SNat SString = SFalse- (%==) SNat (SMaybe _) = SFalse- (%==) SNat (SVec _ _) = SFalse- (%==) SInt SNat = SFalse- (%==) SInt SInt = STrue- (%==) SInt SString = SFalse- (%==) SInt (SMaybe _) = SFalse- (%==) SInt (SVec _ _) = SFalse- (%==) SString SNat = SFalse- (%==) SString SInt = SFalse- (%==) SString SString = STrue- (%==) SString (SMaybe _) = SFalse- (%==) SString (SVec _ _) = SFalse- (%==) (SMaybe _) SNat = SFalse- (%==) (SMaybe _) SInt = SFalse- (%==) (SMaybe _) SString = SFalse- (%==) (SMaybe a) (SMaybe b) = ((%==) a) b- (%==) (SMaybe _) (SVec _ _) = SFalse- (%==) (SVec _ _) SNat = SFalse- (%==) (SVec _ _) SInt = SFalse- (%==) (SVec _ _) SString = SFalse- (%==) (SVec _ _) (SMaybe _) = SFalse- (%==) (SVec a a) (SVec b b) = ((%&&) (((%==) a) b)) (((%==) a) b)- instance (SDecide Type, SDecide Nat) => SDecide Type where- (%~) SNat SNat = Proved Refl- (%~) SNat SInt = Disproved (\ x -> case x of)- (%~) SNat SString = Disproved (\ x -> case x of)- (%~) SNat (SMaybe _) = Disproved (\ x -> case x of)- (%~) SNat (SVec _ _) = Disproved (\ x -> case x of)- (%~) SInt SNat = Disproved (\ x -> case x of)- (%~) SInt SInt = Proved Refl- (%~) SInt SString = Disproved (\ x -> case x of)- (%~) SInt (SMaybe _) = Disproved (\ x -> case x of)- (%~) SInt (SVec _ _) = Disproved (\ x -> case x of)- (%~) SString SNat = Disproved (\ x -> case x of)- (%~) SString SInt = Disproved (\ x -> case x of)- (%~) SString SString = Proved Refl- (%~) SString (SMaybe _) = Disproved (\ x -> case x of)- (%~) SString (SVec _ _) = Disproved (\ x -> case x of)- (%~) (SMaybe _) SNat = Disproved (\ x -> case x of)- (%~) (SMaybe _) SInt = Disproved (\ x -> case x of)- (%~) (SMaybe _) SString = Disproved (\ x -> case x of)- (%~) (SMaybe a) (SMaybe b)- = case ((%~) a) b of- Proved Refl -> Proved Refl- Disproved contra- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (%~) (SMaybe _) (SVec _ _) = Disproved (\ x -> case x of)- (%~) (SVec _ _) SNat = Disproved (\ x -> case x of)- (%~) (SVec _ _) SInt = Disproved (\ x -> case x of)- (%~) (SVec _ _) SString = Disproved (\ x -> case x of)- (%~) (SVec _ _) (SMaybe _) = Disproved (\ x -> case x of)- (%~) (SVec a a) (SVec b b)- = case ((,) (((%~) a) b)) (((%~) a) b) of- (,) (Proved Refl) (Proved Refl) -> Proved Refl- (,) (Disproved contra) _- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- (,) _ (Disproved contra)- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- instance (SOrd Type, SOrd Nat) => SOrd Type where- sCompare ::- forall (t1 :: Type) (t2 :: Type).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun Type ((~>) Type Ordering)- -> Type) t1) t2)- sCompare SNat SNat- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- SNil- sCompare SInt SInt- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- SNil- sCompare SString SString- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- SNil- sCompare- (SMaybe (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SMaybe (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil)- sCompare- (SVec (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SVec (sB_0123456789876543210 :: Sing b_0123456789876543210)- (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- SNil))- sCompare SNat SInt = SLT- sCompare SNat SString = SLT- sCompare SNat (SMaybe _) = SLT- sCompare SNat (SVec _ _) = SLT- sCompare SInt SNat = SGT- sCompare SInt SString = SLT- sCompare SInt (SMaybe _) = SLT- sCompare SInt (SVec _ _) = SLT- sCompare SString SNat = SGT- sCompare SString SInt = SGT- sCompare SString (SMaybe _) = SLT- sCompare SString (SVec _ _) = SLT- sCompare (SMaybe _) SNat = SGT- sCompare (SMaybe _) SInt = SGT- sCompare (SMaybe _) SString = SGT- sCompare (SMaybe _) (SVec _ _) = SLT- sCompare (SVec _ _) SNat = SGT- sCompare (SVec _ _) SInt = SGT- sCompare (SVec _ _) SString = SGT- sCompare (SVec _ _) (SMaybe _) = SGT- instance (SShow Type, SShow Nat) => SShow Type where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: Type) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Type ((~>) Symbol Symbol))- -> Type) t1) t2) t3)- sShowsPrec- _- SNat- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Nat")))- sA_0123456789876543210- sShowsPrec- _- SInt- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Int")))- sA_0123456789876543210- sShowsPrec- _- SString- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "String")))- sA_0123456789876543210- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SMaybe (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Maybe "))))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))- sA_0123456789876543210- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SVec (sArg_0123456789876543210 :: Sing arg_0123456789876543210)- (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Vec "))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @ShowSpaceSym0) sShowSpace)))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))))- sA_0123456789876543210- instance SingI Nat where- sing = SNat- instance SingI Int where- sing = SInt- instance SingI String where- sing = SString- instance SingI n => SingI (Maybe (n :: Type)) where- sing = SMaybe sing- instance SingI (MaybeSym0 :: (~>) Type Type) where- sing = (singFun1 @MaybeSym0) SMaybe- instance SingI (TyCon1 Maybe :: (~>) Type Type) where- sing = (singFun1 @(TyCon1 Maybe)) SMaybe- instance (SingI n, SingI n) =>- SingI (Vec (n :: Type) (n :: Nat)) where- sing = (SVec sing) sing- instance SingI (VecSym0 :: (~>) Type ((~>) Nat Type)) where- sing = (singFun2 @VecSym0) SVec- instance SingI (TyCon2 Vec :: (~>) Type ((~>) Nat Type)) where- sing = (singFun2 @(TyCon2 Vec)) SVec- instance SingI d =>- SingI (VecSym1 (d :: Type) :: (~>) Nat Type) where- sing = (singFun1 @(VecSym1 (d :: Type))) (SVec (sing @d))- instance SingI d =>- SingI (TyCon1 (Vec (d :: Type)) :: (~>) Nat Type) where- sing = (singFun1 @(TyCon1 (Vec (d :: Type)))) (SVec (sing @d))
+ tests/compile-and-dump/Singletons/Star.ghc88.template view
@@ -0,0 +1,421 @@+Singletons/Star.hs:0:0:: Splicing declarations+ singletonStar [''Nat, ''Int, ''String, ''Maybe, ''Vec]+ ======>+ data Rep :: Type+ where+ Singletons.Star.Nat :: Rep+ Singletons.Star.Int :: Rep+ Singletons.Star.String :: Rep+ Singletons.Star.Maybe :: Rep -> Rep+ Singletons.Star.Vec :: Rep -> Nat -> Rep+ deriving (Eq, Ord, Read, Show)+ type NatSym0 = Nat+ type IntSym0 = Int+ type StringSym0 = String+ type MaybeSym1 (t0123456789876543210 :: Type) =+ Maybe t0123456789876543210+ instance SuppressUnusedWarnings MaybeSym0 where+ suppressUnusedWarnings = snd (((,) MaybeSym0KindInference) ())+ data MaybeSym0 :: (~>) Type Type+ where+ MaybeSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MaybeSym0 arg) (MaybeSym1 arg) =>+ MaybeSym0 t0123456789876543210+ type instance Apply MaybeSym0 t0123456789876543210 = Maybe t0123456789876543210+ type VecSym2 (t0123456789876543210 :: Type) (t0123456789876543210 :: Nat) =+ Vec t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (VecSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) VecSym1KindInference) ())+ data VecSym1 (t0123456789876543210 :: Type) :: (~>) Nat Type+ where+ VecSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (VecSym1 t0123456789876543210) arg) (VecSym2 t0123456789876543210 arg) =>+ VecSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (VecSym1 t0123456789876543210) t0123456789876543210 = Vec t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings VecSym0 where+ suppressUnusedWarnings = snd (((,) VecSym0KindInference) ())+ data VecSym0 :: (~>) Type ((~>) Nat Type)+ where+ VecSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply VecSym0 arg) (VecSym1 arg) =>+ VecSym0 t0123456789876543210+ type instance Apply VecSym0 t0123456789876543210 = VecSym1 t0123456789876543210+ type family Equals_0123456789876543210 (a :: Type) (b :: Type) :: Bool where+ Equals_0123456789876543210 Nat Nat = TrueSym0+ Equals_0123456789876543210 Int Int = TrueSym0+ Equals_0123456789876543210 String String = TrueSym0+ Equals_0123456789876543210 (Maybe a) (Maybe b) = (==) a b+ Equals_0123456789876543210 (Vec a a) (Vec b b) = (&&) ((==) a b) ((==) a b)+ Equals_0123456789876543210 (_ :: Type) (_ :: Type) = FalseSym0+ instance PEq Type where+ type (==) a b = Equals_0123456789876543210 a b+ type family Compare_0123456789876543210 (a :: Type) (a :: Type) :: Ordering where+ Compare_0123456789876543210 Nat Nat = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 Int Int = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 String String = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 (Maybe a_0123456789876543210) (Maybe b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])+ Compare_0123456789876543210 (Vec a_0123456789876543210 a_0123456789876543210) (Vec b_0123456789876543210 b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[]))+ Compare_0123456789876543210 Nat Int = LTSym0+ Compare_0123456789876543210 Nat String = LTSym0+ Compare_0123456789876543210 Nat (Maybe _) = LTSym0+ Compare_0123456789876543210 Nat (Vec _ _) = LTSym0+ Compare_0123456789876543210 Int Nat = GTSym0+ Compare_0123456789876543210 Int String = LTSym0+ Compare_0123456789876543210 Int (Maybe _) = LTSym0+ Compare_0123456789876543210 Int (Vec _ _) = LTSym0+ Compare_0123456789876543210 String Nat = GTSym0+ Compare_0123456789876543210 String Int = GTSym0+ Compare_0123456789876543210 String (Maybe _) = LTSym0+ Compare_0123456789876543210 String (Vec _ _) = LTSym0+ Compare_0123456789876543210 (Maybe _) Nat = GTSym0+ Compare_0123456789876543210 (Maybe _) Int = GTSym0+ Compare_0123456789876543210 (Maybe _) String = GTSym0+ Compare_0123456789876543210 (Maybe _) (Vec _ _) = LTSym0+ Compare_0123456789876543210 (Vec _ _) Nat = GTSym0+ Compare_0123456789876543210 (Vec _ _) Int = GTSym0+ Compare_0123456789876543210 (Vec _ _) String = GTSym0+ Compare_0123456789876543210 (Vec _ _) (Maybe _) = GTSym0+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Type) (a0123456789876543210 :: Type) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Type) :: (~>) Type Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: (~>) Type ((~>) Type Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd Type where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Type) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 _ Nat a_0123456789876543210 = Apply (Apply ShowStringSym0 "Nat") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ Int a_0123456789876543210 = Apply (Apply ShowStringSym0 "Int") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ String a_0123456789876543210 = Apply (Apply ShowStringSym0 "String") a_0123456789876543210+ ShowsPrec_0123456789876543210 p_0123456789876543210 (Maybe arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Maybe ")) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210+ ShowsPrec_0123456789876543210 p_0123456789876543210 (Vec arg_0123456789876543210 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Vec ")) (Apply (Apply (.@#@$) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210)) (Apply (Apply (.@#@$) ShowSpaceSym0) (Apply (Apply ShowsPrecSym0 (FromInteger 11)) arg_0123456789876543210))))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Type) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Type) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) Type ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) Type ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow Type where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ data SRep :: Type -> Type+ where+ SNat :: SRep Nat+ SInt :: SRep Int+ SString :: SRep String+ SMaybe :: forall (n :: Type). (Sing (n :: Type)) -> SRep (Maybe n)+ SVec :: forall (n :: Type) (n :: Nat).+ (Sing (n :: Type)) -> (Sing (n :: Nat)) -> SRep (Vec n n)+ type instance Sing @Type = SRep+ instance SingKind Type where+ type Demote Type = Rep+ fromSing SNat = Singletons.Star.Nat+ fromSing SInt = Singletons.Star.Int+ fromSing SString = Singletons.Star.String+ fromSing (SMaybe b) = Singletons.Star.Maybe (fromSing b)+ fromSing (SVec b b)+ = (Singletons.Star.Vec (fromSing b)) (fromSing b)+ toSing Singletons.Star.Nat = SomeSing SNat+ toSing Singletons.Star.Int = SomeSing SInt+ toSing Singletons.Star.String = SomeSing SString+ toSing (Singletons.Star.Maybe (b :: Demote Type))+ = case toSing b :: SomeSing Type of {+ SomeSing c -> SomeSing (SMaybe c) }+ toSing (Singletons.Star.Vec (b :: Demote Type) (b :: Demote Nat))+ = case+ ((,) (toSing b :: SomeSing Type)) (toSing b :: SomeSing Nat)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SVec c) c) }+ instance (SEq Type, SEq Nat) => SEq Type where+ (%==) SNat SNat = STrue+ (%==) SNat SInt = SFalse+ (%==) SNat SString = SFalse+ (%==) SNat (SMaybe _) = SFalse+ (%==) SNat (SVec _ _) = SFalse+ (%==) SInt SNat = SFalse+ (%==) SInt SInt = STrue+ (%==) SInt SString = SFalse+ (%==) SInt (SMaybe _) = SFalse+ (%==) SInt (SVec _ _) = SFalse+ (%==) SString SNat = SFalse+ (%==) SString SInt = SFalse+ (%==) SString SString = STrue+ (%==) SString (SMaybe _) = SFalse+ (%==) SString (SVec _ _) = SFalse+ (%==) (SMaybe _) SNat = SFalse+ (%==) (SMaybe _) SInt = SFalse+ (%==) (SMaybe _) SString = SFalse+ (%==) (SMaybe a) (SMaybe b) = ((%==) a) b+ (%==) (SMaybe _) (SVec _ _) = SFalse+ (%==) (SVec _ _) SNat = SFalse+ (%==) (SVec _ _) SInt = SFalse+ (%==) (SVec _ _) SString = SFalse+ (%==) (SVec _ _) (SMaybe _) = SFalse+ (%==) (SVec a a) (SVec b b) = ((%&&) (((%==) a) b)) (((%==) a) b)+ instance (SDecide Type, SDecide Nat) => SDecide Type where+ (%~) SNat SNat = Proved Refl+ (%~) SNat SInt = Disproved (\ x -> case x of)+ (%~) SNat SString = Disproved (\ x -> case x of)+ (%~) SNat (SMaybe _) = Disproved (\ x -> case x of)+ (%~) SNat (SVec _ _) = Disproved (\ x -> case x of)+ (%~) SInt SNat = Disproved (\ x -> case x of)+ (%~) SInt SInt = Proved Refl+ (%~) SInt SString = Disproved (\ x -> case x of)+ (%~) SInt (SMaybe _) = Disproved (\ x -> case x of)+ (%~) SInt (SVec _ _) = Disproved (\ x -> case x of)+ (%~) SString SNat = Disproved (\ x -> case x of)+ (%~) SString SInt = Disproved (\ x -> case x of)+ (%~) SString SString = Proved Refl+ (%~) SString (SMaybe _) = Disproved (\ x -> case x of)+ (%~) SString (SVec _ _) = Disproved (\ x -> case x of)+ (%~) (SMaybe _) SNat = Disproved (\ x -> case x of)+ (%~) (SMaybe _) SInt = Disproved (\ x -> case x of)+ (%~) (SMaybe _) SString = Disproved (\ x -> case x of)+ (%~) (SMaybe a) (SMaybe b)+ = case ((%~) a) b of+ Proved Refl -> Proved Refl+ Disproved contra+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (%~) (SMaybe _) (SVec _ _) = Disproved (\ x -> case x of)+ (%~) (SVec _ _) SNat = Disproved (\ x -> case x of)+ (%~) (SVec _ _) SInt = Disproved (\ x -> case x of)+ (%~) (SVec _ _) SString = Disproved (\ x -> case x of)+ (%~) (SVec _ _) (SMaybe _) = Disproved (\ x -> case x of)+ (%~) (SVec a a) (SVec b b)+ = case ((,) (((%~) a) b)) (((%~) a) b) of+ (,) (Proved Refl) (Proved Refl) -> Proved Refl+ (,) (Disproved contra) _+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ (,) _ (Disproved contra)+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ instance (SDecide Type, SDecide Nat) =>+ Data.Type.Equality.TestEquality (SRep :: Type -> Type) where+ Data.Type.Equality.testEquality = decideEquality+ instance (SDecide Type, SDecide Nat) =>+ Data.Type.Coercion.TestCoercion (SRep :: Type -> Type) where+ Data.Type.Coercion.testCoercion = decideCoercion+ instance (SOrd Type, SOrd Nat) => SOrd Type where+ sCompare ::+ forall (t1 :: Type) (t2 :: Type).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun Type ((~>) Type Ordering)+ -> Type) t1) t2)+ sCompare SNat SNat+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ SNil+ sCompare SInt SInt+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ SNil+ sCompare SString SString+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ SNil+ sCompare+ (SMaybe (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SMaybe (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil)+ sCompare+ (SVec (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SVec (sB_0123456789876543210 :: Sing b_0123456789876543210)+ (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ SNil))+ sCompare SNat SInt = SLT+ sCompare SNat SString = SLT+ sCompare SNat (SMaybe _) = SLT+ sCompare SNat (SVec _ _) = SLT+ sCompare SInt SNat = SGT+ sCompare SInt SString = SLT+ sCompare SInt (SMaybe _) = SLT+ sCompare SInt (SVec _ _) = SLT+ sCompare SString SNat = SGT+ sCompare SString SInt = SGT+ sCompare SString (SMaybe _) = SLT+ sCompare SString (SVec _ _) = SLT+ sCompare (SMaybe _) SNat = SGT+ sCompare (SMaybe _) SInt = SGT+ sCompare (SMaybe _) SString = SGT+ sCompare (SMaybe _) (SVec _ _) = SLT+ sCompare (SVec _ _) SNat = SGT+ sCompare (SVec _ _) SInt = SGT+ sCompare (SVec _ _) SString = SGT+ sCompare (SVec _ _) (SMaybe _) = SGT+ instance (SShow Type, SShow Nat) => SShow Type where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: Type) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) Type ((~>) Symbol Symbol))+ -> Type) t1) t2) t3)+ sShowsPrec+ _+ SNat+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Nat")))+ sA_0123456789876543210+ sShowsPrec+ _+ SInt+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Int")))+ sA_0123456789876543210+ sShowsPrec+ _+ SString+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "String")))+ sA_0123456789876543210+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SMaybe (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Maybe "))))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))+ sA_0123456789876543210+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SVec (sArg_0123456789876543210 :: Sing arg_0123456789876543210)+ (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Vec "))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @ShowSpaceSym0) sShowSpace)))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))))+ sA_0123456789876543210+ instance SingI Nat where+ sing = SNat+ instance SingI Int where+ sing = SInt+ instance SingI String where+ sing = SString+ instance SingI n => SingI (Maybe (n :: Type)) where+ sing = SMaybe sing+ instance SingI (MaybeSym0 :: (~>) Type Type) where+ sing = (singFun1 @MaybeSym0) SMaybe+ instance (SingI n, SingI n) =>+ SingI (Vec (n :: Type) (n :: Nat)) where+ sing = (SVec sing) sing+ instance SingI (VecSym0 :: (~>) Type ((~>) Nat Type)) where+ sing = (singFun2 @VecSym0) SVec+ instance SingI d =>+ SingI (VecSym1 (d :: Type) :: (~>) Nat Type) where+ sing = (singFun1 @(VecSym1 (d :: Type))) (SVec (sing @d))
− tests/compile-and-dump/Singletons/T124.ghc86.template
@@ -1,33 +0,0 @@-Singletons/T124.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo :: Bool -> ()- foo True = ()- foo False = () |]- ======>- foo :: Bool -> ()- foo True = ()- foo False = ()- type FooSym1 (a0123456789876543210 :: Bool) =- Foo a0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: (~>) Bool ()- where- FooSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 a0123456789876543210- type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210- type family Foo (a :: Bool) :: () where- Foo 'True = Tuple0Sym0- Foo 'False = Tuple0Sym0- sFoo :: forall (t :: Bool). Sing t -> Sing (Apply FooSym0 t :: ())- sFoo STrue = STuple0- sFoo SFalse = STuple0- instance SingI (FooSym0 :: (~>) Bool ()) where- sing = (singFun1 @FooSym0) sFoo-Singletons/T124.hs:0:0:: Splicing expression- sCases ''Bool [| b |] [| STuple0 |]- ======>- case b of- SFalse -> STuple0- STrue -> STuple0
+ tests/compile-and-dump/Singletons/T124.ghc88.template view
@@ -0,0 +1,33 @@+Singletons/T124.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo :: Bool -> ()+ foo True = ()+ foo False = () |]+ ======>+ foo :: Bool -> ()+ foo True = ()+ foo False = ()+ type FooSym1 (a0123456789876543210 :: Bool) =+ Foo a0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: (~>) Bool ()+ where+ FooSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 a0123456789876543210+ type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210+ type family Foo (a :: Bool) :: () where+ Foo 'True = Tuple0Sym0+ Foo 'False = Tuple0Sym0+ sFoo :: forall (t :: Bool). Sing t -> Sing (Apply FooSym0 t :: ())+ sFoo STrue = STuple0+ sFoo SFalse = STuple0+ instance SingI (FooSym0 :: (~>) Bool ()) where+ sing = (singFun1 @FooSym0) sFoo+Singletons/T124.hs:0:0:: Splicing expression+ sCases ''Bool [| b |] [| STuple0 |]+ ======>+ case b of+ SFalse -> STuple0+ STrue -> STuple0
− tests/compile-and-dump/Singletons/T136.ghc86.template
@@ -1,171 +0,0 @@-Singletons/T136.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| instance Enum BiNat where- succ [] = [True]- succ (False : as) = True : as- succ (True : as) = False : succ as- pred [] = error "pred 0"- pred (False : as) = True : pred as- pred (True : as) = False : as- toEnum i- | i < 0 = error "negative toEnum"- | i == 0 = []- | otherwise = succ (toEnum (pred i))- fromEnum [] = 0- fromEnum (False : as) = 2 * fromEnum as- fromEnum (True : as) = 1 + 2 * fromEnum as |]- ======>- instance Enum BiNat where- succ [] = [True]- succ (False : as) = (True : as)- succ (True : as) = (False : succ as)- pred [] = error "pred 0"- pred (False : as) = (True : pred as)- pred (True : as) = (False : as)- toEnum i- | (i < 0) = error "negative toEnum"- | (i == 0) = []- | otherwise = succ (toEnum (pred i))- fromEnum [] = 0- fromEnum (False : as) = (2 * fromEnum as)- fromEnum (True : as) = (1 + (2 * fromEnum as))- type family Succ_0123456789876543210 (a :: [Bool]) :: [Bool] where- Succ_0123456789876543210 '[] = Apply (Apply (:@#@$) TrueSym0) '[]- Succ_0123456789876543210 ( '(:) 'False as) = Apply (Apply (:@#@$) TrueSym0) as- Succ_0123456789876543210 ( '(:) 'True as) = Apply (Apply (:@#@$) FalseSym0) (Apply SuccSym0 as)- type Succ_0123456789876543210Sym1 (a0123456789876543210 :: [Bool]) =- Succ_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Succ_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Succ_0123456789876543210Sym0KindInference) ())- data Succ_0123456789876543210Sym0 :: (~>) [Bool] [Bool]- where- Succ_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Succ_0123456789876543210Sym0 arg) (Succ_0123456789876543210Sym1 arg) =>- Succ_0123456789876543210Sym0 a0123456789876543210- type instance Apply Succ_0123456789876543210Sym0 a0123456789876543210 = Succ_0123456789876543210 a0123456789876543210- type family Pred_0123456789876543210 (a :: [Bool]) :: [Bool] where- Pred_0123456789876543210 '[] = Apply ErrorSym0 "pred 0"- Pred_0123456789876543210 ( '(:) 'False as) = Apply (Apply (:@#@$) TrueSym0) (Apply PredSym0 as)- Pred_0123456789876543210 ( '(:) 'True as) = Apply (Apply (:@#@$) FalseSym0) as- type Pred_0123456789876543210Sym1 (a0123456789876543210 :: [Bool]) =- Pred_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Pred_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Pred_0123456789876543210Sym0KindInference) ())- data Pred_0123456789876543210Sym0 :: (~>) [Bool] [Bool]- where- Pred_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Pred_0123456789876543210Sym0 arg) (Pred_0123456789876543210Sym1 arg) =>- Pred_0123456789876543210Sym0 a0123456789876543210- type instance Apply Pred_0123456789876543210Sym0 a0123456789876543210 = Pred_0123456789876543210 a0123456789876543210- type family Case_0123456789876543210 i arg_0123456789876543210 t where- Case_0123456789876543210 i arg_0123456789876543210 'True = '[]- Case_0123456789876543210 i arg_0123456789876543210 'False = Apply SuccSym0 (Apply ToEnumSym0 (Apply PredSym0 i))- type family Case_0123456789876543210 i arg_0123456789876543210 t where- Case_0123456789876543210 i arg_0123456789876543210 'True = Apply ErrorSym0 "negative toEnum"- Case_0123456789876543210 i arg_0123456789876543210 'False = Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (==@#@$) i) (FromInteger 0))- type family Case_0123456789876543210 arg_0123456789876543210 t where- Case_0123456789876543210 arg_0123456789876543210 i = Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (<@#@$) i) (FromInteger 0))- type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: [Bool] where- ToEnum_0123456789876543210 arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 arg_0123456789876543210- type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) =- ToEnum_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())- data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat [Bool]- where- ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>- ToEnum_0123456789876543210Sym0 a0123456789876543210- type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210- type family FromEnum_0123456789876543210 (a :: [Bool]) :: GHC.Types.Nat where- FromEnum_0123456789876543210 '[] = FromInteger 0- FromEnum_0123456789876543210 ( '(:) 'False as) = Apply (Apply (*@#@$) (FromInteger 2)) (Apply FromEnumSym0 as)- FromEnum_0123456789876543210 ( '(:) 'True as) = Apply (Apply (+@#@$) (FromInteger 1)) (Apply (Apply (*@#@$) (FromInteger 2)) (Apply FromEnumSym0 as))- type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: [Bool]) =- FromEnum_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())- data FromEnum_0123456789876543210Sym0 :: (~>) [Bool] GHC.Types.Nat- where- FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>- FromEnum_0123456789876543210Sym0 a0123456789876543210- type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210- instance PEnum [Bool] where- type Succ a = Apply Succ_0123456789876543210Sym0 a- type Pred a = Apply Pred_0123456789876543210Sym0 a- type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a- type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a- instance SEnum [Bool] where- sSucc ::- forall (t :: [Bool]).- Sing t- -> Sing (Apply (SuccSym0 :: TyFun [Bool] [Bool]- -> GHC.Types.Type) t)- sPred ::- forall (t :: [Bool]).- Sing t- -> Sing (Apply (PredSym0 :: TyFun [Bool] [Bool]- -> GHC.Types.Type) t)- sToEnum ::- forall (t :: GHC.Types.Nat).- Sing t- -> Sing (Apply (ToEnumSym0 :: TyFun GHC.Types.Nat [Bool]- -> GHC.Types.Type) t)- sFromEnum ::- forall (t :: [Bool]).- Sing t- -> Sing (Apply (FromEnumSym0 :: TyFun [Bool] GHC.Types.Nat- -> GHC.Types.Type) t)- sSucc SNil- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) STrue)) SNil- sSucc (SCons SFalse (sAs :: Sing as))- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) STrue)) sAs- sSucc (SCons STrue (sAs :: Sing as))- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SFalse))- ((applySing ((singFun1 @SuccSym0) sSucc)) sAs)- sPred SNil = sError (sing :: Sing "pred 0")- sPred (SCons SFalse (sAs :: Sing as))- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) STrue))- ((applySing ((singFun1 @PredSym0) sPred)) sAs)- sPred (SCons STrue (sAs :: Sing as))- = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SFalse)) sAs- sToEnum (sArg_0123456789876543210 :: Sing arg_0123456789876543210)- = (case sArg_0123456789876543210 of {- (sI :: Sing i)- -> (case- (applySing ((applySing ((singFun2 @(<@#@$)) (%<))) sI))- (sFromInteger (sing :: Sing 0))- of- STrue -> sError (sing :: Sing "negative toEnum")- SFalse- -> (case- (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sI))- (sFromInteger (sing :: Sing 0))- of- STrue -> SNil- SFalse- -> (applySing ((singFun1 @SuccSym0) sSucc))- ((applySing ((singFun1 @ToEnumSym0) sToEnum))- ((applySing ((singFun1 @PredSym0) sPred)) sI))) ::- Sing (Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (==@#@$) i) (FromInteger 0)))) ::- Sing (Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (<@#@$) i) (FromInteger 0))) }) ::- Sing (Case_0123456789876543210 arg_0123456789876543210 arg_0123456789876543210)- sFromEnum SNil = sFromInteger (sing :: Sing 0)- sFromEnum (SCons SFalse (sAs :: Sing as))- = (applySing- ((applySing ((singFun2 @(*@#@$)) (%*)))- (sFromInteger (sing :: Sing 2))))- ((applySing ((singFun1 @FromEnumSym0) sFromEnum)) sAs)- sFromEnum (SCons STrue (sAs :: Sing as))- = (applySing- ((applySing ((singFun2 @(+@#@$)) (%+)))- (sFromInteger (sing :: Sing 1))))- ((applySing- ((applySing ((singFun2 @(*@#@$)) (%*)))- (sFromInteger (sing :: Sing 2))))- ((applySing ((singFun1 @FromEnumSym0) sFromEnum)) sAs))
+ tests/compile-and-dump/Singletons/T136.ghc88.template view
@@ -0,0 +1,174 @@+Singletons/T136.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| instance Enum BiNat where+ succ [] = [True]+ succ (False : as) = True : as+ succ (True : as) = False : succ as+ pred [] = error "pred 0"+ pred (False : as) = True : pred as+ pred (True : as) = False : as+ toEnum i+ | i < 0 = error "negative toEnum"+ | i == 0 = []+ | otherwise = succ (toEnum (pred i))+ fromEnum [] = 0+ fromEnum (False : as) = 2 * fromEnum as+ fromEnum (True : as) = 1 + 2 * fromEnum as |]+ ======>+ instance Enum BiNat where+ succ [] = [True]+ succ (False : as) = (True : as)+ succ (True : as) = (False : succ as)+ pred [] = error "pred 0"+ pred (False : as) = (True : pred as)+ pred (True : as) = (False : as)+ toEnum i+ | (i < 0) = error "negative toEnum"+ | (i == 0) = []+ | otherwise = succ (toEnum (pred i))+ fromEnum [] = 0+ fromEnum (False : as) = (2 * fromEnum as)+ fromEnum (True : as) = (1 + (2 * fromEnum as))+ type family Succ_0123456789876543210 (a :: [Bool]) :: [Bool] where+ Succ_0123456789876543210 '[] = Apply (Apply (:@#@$) TrueSym0) '[]+ Succ_0123456789876543210 ('(:) 'False as) = Apply (Apply (:@#@$) TrueSym0) as+ Succ_0123456789876543210 ('(:) 'True as) = Apply (Apply (:@#@$) FalseSym0) (Apply SuccSym0 as)+ type Succ_0123456789876543210Sym1 (a0123456789876543210 :: [Bool]) =+ Succ_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Succ_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Succ_0123456789876543210Sym0KindInference) ())+ data Succ_0123456789876543210Sym0 :: (~>) [Bool] [Bool]+ where+ Succ_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Succ_0123456789876543210Sym0 arg) (Succ_0123456789876543210Sym1 arg) =>+ Succ_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Succ_0123456789876543210Sym0 a0123456789876543210 = Succ_0123456789876543210 a0123456789876543210+ type family Pred_0123456789876543210 (a :: [Bool]) :: [Bool] where+ Pred_0123456789876543210 '[] = Apply ErrorSym0 "pred 0"+ Pred_0123456789876543210 ('(:) 'False as) = Apply (Apply (:@#@$) TrueSym0) (Apply PredSym0 as)+ Pred_0123456789876543210 ('(:) 'True as) = Apply (Apply (:@#@$) FalseSym0) as+ type Pred_0123456789876543210Sym1 (a0123456789876543210 :: [Bool]) =+ Pred_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Pred_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Pred_0123456789876543210Sym0KindInference) ())+ data Pred_0123456789876543210Sym0 :: (~>) [Bool] [Bool]+ where+ Pred_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Pred_0123456789876543210Sym0 arg) (Pred_0123456789876543210Sym1 arg) =>+ Pred_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Pred_0123456789876543210Sym0 a0123456789876543210 = Pred_0123456789876543210 a0123456789876543210+ type family Case_0123456789876543210 i arg_0123456789876543210 t where+ Case_0123456789876543210 i arg_0123456789876543210 'True = '[]+ Case_0123456789876543210 i arg_0123456789876543210 'False = Apply SuccSym0 (Apply ToEnumSym0 (Apply PredSym0 i))+ type family Case_0123456789876543210 i arg_0123456789876543210 t where+ Case_0123456789876543210 i arg_0123456789876543210 'True = Apply ErrorSym0 "negative toEnum"+ Case_0123456789876543210 i arg_0123456789876543210 'False = Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (==@#@$) i) (FromInteger 0))+ type family Case_0123456789876543210 arg_0123456789876543210 t where+ Case_0123456789876543210 arg_0123456789876543210 i = Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (<@#@$) i) (FromInteger 0))+ type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: [Bool] where+ ToEnum_0123456789876543210 arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 arg_0123456789876543210+ type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) =+ ToEnum_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())+ data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat [Bool]+ where+ ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>+ ToEnum_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210+ type family FromEnum_0123456789876543210 (a :: [Bool]) :: GHC.Types.Nat where+ FromEnum_0123456789876543210 '[] = FromInteger 0+ FromEnum_0123456789876543210 ('(:) 'False as) = Apply (Apply (*@#@$) (FromInteger 2)) (Apply FromEnumSym0 as)+ FromEnum_0123456789876543210 ('(:) 'True as) = Apply (Apply (+@#@$) (FromInteger 1)) (Apply (Apply (*@#@$) (FromInteger 2)) (Apply FromEnumSym0 as))+ type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: [Bool]) =+ FromEnum_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())+ data FromEnum_0123456789876543210Sym0 :: (~>) [Bool] GHC.Types.Nat+ where+ FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>+ FromEnum_0123456789876543210Sym0 a0123456789876543210+ type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210+ instance PEnum [Bool] where+ type Succ a = Apply Succ_0123456789876543210Sym0 a+ type Pred a = Apply Pred_0123456789876543210Sym0 a+ type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a+ type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a+ instance SEnum [Bool] where+ sSucc ::+ forall (t :: [Bool]).+ Sing t+ -> Sing (Apply (SuccSym0 :: TyFun [Bool] [Bool]+ -> GHC.Types.Type) t)+ sPred ::+ forall (t :: [Bool]).+ Sing t+ -> Sing (Apply (PredSym0 :: TyFun [Bool] [Bool]+ -> GHC.Types.Type) t)+ sToEnum ::+ forall (t :: GHC.Types.Nat).+ Sing t+ -> Sing (Apply (ToEnumSym0 :: TyFun GHC.Types.Nat [Bool]+ -> GHC.Types.Type) t)+ sFromEnum ::+ forall (t :: [Bool]).+ Sing t+ -> Sing (Apply (FromEnumSym0 :: TyFun [Bool] GHC.Types.Nat+ -> GHC.Types.Type) t)+ sSucc SNil+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) STrue)) SNil+ sSucc (SCons SFalse (sAs :: Sing as))+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) STrue)) sAs+ sSucc (SCons STrue (sAs :: Sing as))+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SFalse))+ ((applySing ((singFun1 @SuccSym0) sSucc)) sAs)+ sPred SNil = sError (sing :: Sing "pred 0")+ sPred (SCons SFalse (sAs :: Sing as))+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) STrue))+ ((applySing ((singFun1 @PredSym0) sPred)) sAs)+ sPred (SCons STrue (sAs :: Sing as))+ = (applySing ((applySing ((singFun2 @(:@#@$)) SCons)) SFalse)) sAs+ sToEnum (sArg_0123456789876543210 :: Sing arg_0123456789876543210)+ = (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 arg_0123456789876543210)))+ (case sArg_0123456789876543210 of {+ (sI :: Sing i)+ -> (id+ @(Sing (Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (<@#@$) i) (FromInteger 0)))))+ (case+ (applySing ((applySing ((singFun2 @(<@#@$)) (%<))) sI))+ (sFromInteger (sing :: Sing 0))+ of+ STrue -> sError (sing :: Sing "negative toEnum")+ SFalse+ -> (id+ @(Sing (Case_0123456789876543210 i arg_0123456789876543210 (Apply (Apply (==@#@$) i) (FromInteger 0)))))+ (case+ (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sI))+ (sFromInteger (sing :: Sing 0))+ of+ STrue -> SNil+ SFalse+ -> (applySing ((singFun1 @SuccSym0) sSucc))+ ((applySing ((singFun1 @ToEnumSym0) sToEnum))+ ((applySing ((singFun1 @PredSym0) sPred)) sI)))) })+ sFromEnum SNil = sFromInteger (sing :: Sing 0)+ sFromEnum (SCons SFalse (sAs :: Sing as))+ = (applySing+ ((applySing ((singFun2 @(*@#@$)) (%*)))+ (sFromInteger (sing :: Sing 2))))+ ((applySing ((singFun1 @FromEnumSym0) sFromEnum)) sAs)+ sFromEnum (SCons STrue (sAs :: Sing as))+ = (applySing+ ((applySing ((singFun2 @(+@#@$)) (%+)))+ (sFromInteger (sing :: Sing 1))))+ ((applySing+ ((applySing ((singFun2 @(*@#@$)) (%*)))+ (sFromInteger (sing :: Sing 2))))+ ((applySing ((singFun1 @FromEnumSym0) sFromEnum)) sAs))
− tests/compile-and-dump/Singletons/T136b.ghc86.template
@@ -1,53 +0,0 @@-Singletons/T136b.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| class C a where- meth :: a -> a |]- ======>- class C a where- meth :: a -> a- type MethSym1 (arg0123456789876543210 :: a0123456789876543210) =- Meth arg0123456789876543210- instance SuppressUnusedWarnings MethSym0 where- suppressUnusedWarnings = snd (((,) MethSym0KindInference) ())- data MethSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- MethSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply MethSym0 arg) (MethSym1 arg) =>- MethSym0 arg0123456789876543210- type instance Apply MethSym0 arg0123456789876543210 = Meth arg0123456789876543210- class PC (a :: GHC.Types.Type) where- type Meth (arg :: a) :: a- class SC a where- sMeth :: forall (t :: a). Sing t -> Sing (Apply MethSym0 t :: a)- instance SC a => SingI (MethSym0 :: (~>) a a) where- sing = (singFun1 @MethSym0) sMeth-Singletons/T136b.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| instance C Bool where- meth = not |]- ======>- instance C Bool where- meth = not- type family Meth_0123456789876543210 (a :: Bool) :: Bool where- Meth_0123456789876543210 a_0123456789876543210 = Apply NotSym0 a_0123456789876543210- type Meth_0123456789876543210Sym1 (a0123456789876543210 :: Bool) =- Meth_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Meth_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Meth_0123456789876543210Sym0KindInference) ())- data Meth_0123456789876543210Sym0 :: (~>) Bool Bool- where- Meth_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Meth_0123456789876543210Sym0 arg) (Meth_0123456789876543210Sym1 arg) =>- Meth_0123456789876543210Sym0 a0123456789876543210- type instance Apply Meth_0123456789876543210Sym0 a0123456789876543210 = Meth_0123456789876543210 a0123456789876543210- instance PC Bool where- type Meth a = Apply Meth_0123456789876543210Sym0 a- instance SC Bool where- sMeth ::- forall (t :: Bool).- Sing t- -> Sing (Apply (MethSym0 :: TyFun Bool Bool -> GHC.Types.Type) t)- sMeth (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing ((singFun1 @NotSym0) sNot)) sA_0123456789876543210
+ tests/compile-and-dump/Singletons/T136b.ghc88.template view
@@ -0,0 +1,53 @@+Singletons/T136b.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| class C a where+ meth :: a -> a |]+ ======>+ class C a where+ meth :: a -> a+ type MethSym1 (arg0123456789876543210 :: a0123456789876543210) =+ Meth arg0123456789876543210+ instance SuppressUnusedWarnings MethSym0 where+ suppressUnusedWarnings = snd (((,) MethSym0KindInference) ())+ data MethSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ MethSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply MethSym0 arg) (MethSym1 arg) =>+ MethSym0 arg0123456789876543210+ type instance Apply MethSym0 arg0123456789876543210 = Meth arg0123456789876543210+ class PC (a :: GHC.Types.Type) where+ type Meth (arg :: a) :: a+ class SC a where+ sMeth :: forall (t :: a). Sing t -> Sing (Apply MethSym0 t :: a)+ instance SC a => SingI (MethSym0 :: (~>) a a) where+ sing = (singFun1 @MethSym0) sMeth+Singletons/T136b.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| instance C Bool where+ meth = not |]+ ======>+ instance C Bool where+ meth = not+ type family Meth_0123456789876543210 (a :: Bool) :: Bool where+ Meth_0123456789876543210 a_0123456789876543210 = Apply NotSym0 a_0123456789876543210+ type Meth_0123456789876543210Sym1 (a0123456789876543210 :: Bool) =+ Meth_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Meth_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Meth_0123456789876543210Sym0KindInference) ())+ data Meth_0123456789876543210Sym0 :: (~>) Bool Bool+ where+ Meth_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Meth_0123456789876543210Sym0 arg) (Meth_0123456789876543210Sym1 arg) =>+ Meth_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Meth_0123456789876543210Sym0 a0123456789876543210 = Meth_0123456789876543210 a0123456789876543210+ instance PC Bool where+ type Meth a = Apply Meth_0123456789876543210Sym0 a+ instance SC Bool where+ sMeth ::+ forall (t :: Bool).+ Sing t+ -> Sing (Apply (MethSym0 :: TyFun Bool Bool -> GHC.Types.Type) t)+ sMeth (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing ((singFun1 @NotSym0) sNot)) sA_0123456789876543210
− tests/compile-and-dump/Singletons/T145.ghc86.template
@@ -1,39 +0,0 @@-Singletons/T145.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| class Column (f :: Type -> Type) where- col :: f a -> a -> Bool |]- ======>- class Column (f :: Type -> Type) where- col :: f a -> a -> Bool- type ColSym2 (arg0123456789876543210 :: f0123456789876543210 a0123456789876543210) (arg0123456789876543210 :: a0123456789876543210) =- Col arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (ColSym1 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) ColSym1KindInference) ())- data ColSym1 (arg0123456789876543210 :: f0123456789876543210 a0123456789876543210) :: (~>) a0123456789876543210 Bool- where- ColSym1KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (ColSym1 arg0123456789876543210) arg) (ColSym2 arg0123456789876543210 arg) =>- ColSym1 arg0123456789876543210 arg0123456789876543210- type instance Apply (ColSym1 arg0123456789876543210) arg0123456789876543210 = Col arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings ColSym0 where- suppressUnusedWarnings = snd (((,) ColSym0KindInference) ())- data ColSym0 :: forall a0123456789876543210 f0123456789876543210.- (~>) (f0123456789876543210 a0123456789876543210) ((~>) a0123456789876543210 Bool)- where- ColSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply ColSym0 arg) (ColSym1 arg) =>- ColSym0 arg0123456789876543210- type instance Apply ColSym0 arg0123456789876543210 = ColSym1 arg0123456789876543210- class PColumn (f :: Type -> Type) where- type Col (arg :: f a) (arg :: a) :: Bool- class SColumn (f :: Type -> Type) where- sCol ::- forall a (t :: f a) (t :: a).- Sing t -> Sing t -> Sing (Apply (Apply ColSym0 t) t :: Bool)- instance SColumn f =>- SingI (ColSym0 :: (~>) (f a) ((~>) a Bool)) where- sing = (singFun2 @ColSym0) sCol- instance (SColumn f, SingI d) =>- SingI (ColSym1 (d :: f a) :: (~>) a Bool) where- sing = (singFun1 @(ColSym1 (d :: f a))) (sCol (sing @d))
+ tests/compile-and-dump/Singletons/T145.ghc88.template view
@@ -0,0 +1,39 @@+Singletons/T145.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| class Column (f :: Type -> Type) where+ col :: f a -> a -> Bool |]+ ======>+ class Column (f :: Type -> Type) where+ col :: f a -> a -> Bool+ type ColSym2 (arg0123456789876543210 :: f0123456789876543210 a0123456789876543210) (arg0123456789876543210 :: a0123456789876543210) =+ Col arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (ColSym1 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) ColSym1KindInference) ())+ data ColSym1 (arg0123456789876543210 :: f0123456789876543210 a0123456789876543210) :: (~>) a0123456789876543210 Bool+ where+ ColSym1KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (ColSym1 arg0123456789876543210) arg) (ColSym2 arg0123456789876543210 arg) =>+ ColSym1 arg0123456789876543210 arg0123456789876543210+ type instance Apply (ColSym1 arg0123456789876543210) arg0123456789876543210 = Col arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings ColSym0 where+ suppressUnusedWarnings = snd (((,) ColSym0KindInference) ())+ data ColSym0 :: forall f0123456789876543210 a0123456789876543210.+ (~>) (f0123456789876543210 a0123456789876543210) ((~>) a0123456789876543210 Bool)+ where+ ColSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply ColSym0 arg) (ColSym1 arg) =>+ ColSym0 arg0123456789876543210+ type instance Apply ColSym0 arg0123456789876543210 = ColSym1 arg0123456789876543210+ class PColumn (f :: Type -> Type) where+ type Col (arg :: f a) (arg :: a) :: Bool+ class SColumn (f :: Type -> Type) where+ sCol ::+ forall a (t :: f a) (t :: a).+ Sing t -> Sing t -> Sing (Apply (Apply ColSym0 t) t :: Bool)+ instance SColumn f =>+ SingI (ColSym0 :: (~>) (f a) ((~>) a Bool)) where+ sing = (singFun2 @ColSym0) sCol+ instance (SColumn f, SingI d) =>+ SingI (ColSym1 (d :: f a) :: (~>) a Bool) where+ sing = (singFun1 @(ColSym1 (d :: f a))) (sCol (sing @d))
− tests/compile-and-dump/Singletons/T153.ghc86.template
+ tests/compile-and-dump/Singletons/T153.ghc88.template view
− tests/compile-and-dump/Singletons/T157.ghc86.template
+ tests/compile-and-dump/Singletons/T157.ghc88.template view
− tests/compile-and-dump/Singletons/T159.ghc86.template
@@ -1,245 +0,0 @@-Singletons/T159.hs:0:0:: Splicing declarations- genSingletons [''T0, ''T1]- ======>- type ASym0 = 'A- type BSym0 = 'B- type CSym0 = 'C- type DSym0 = 'D- type ESym0 = 'E- type FSym0 = 'F- data instance Sing :: T0 -> GHC.Types.Type- where- SA :: Sing 'A- SB :: Sing 'B- SC :: Sing 'C- SD :: Sing 'D- SE :: Sing 'E- SF :: Sing 'F- type ST0 = (Sing :: T0 -> GHC.Types.Type)- instance SingKind T0 where- type Demote T0 = T0- fromSing SA = A- fromSing SB = B- fromSing SC = C- fromSing SD = D- fromSing SE = E- fromSing SF = F- toSing A = SomeSing SA- toSing B = SomeSing SB- toSing C = SomeSing SC- toSing D = SomeSing SD- toSing E = SomeSing SE- toSing F = SomeSing SF- instance SingI 'A where- sing = SA- instance SingI 'B where- sing = SB- instance SingI 'C where- sing = SC- instance SingI 'D where- sing = SD- instance SingI 'E where- sing = SE- instance SingI 'F where- sing = SF- type N1Sym0 = 'N1- type C1Sym2 (t0123456789876543210 :: T0) (t0123456789876543210 :: T1) =- 'C1 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (C1Sym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) C1Sym1KindInference) ())- data C1Sym1 (t0123456789876543210 :: T0) :: (~>) T1 T1- where- C1Sym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (C1Sym1 t0123456789876543210) arg) (C1Sym2 t0123456789876543210 arg) =>- C1Sym1 t0123456789876543210 t0123456789876543210- type instance Apply (C1Sym1 t0123456789876543210) t0123456789876543210 = 'C1 t0123456789876543210 t0123456789876543210- infixr 5 `C1Sym1`- instance SuppressUnusedWarnings C1Sym0 where- suppressUnusedWarnings = snd (((,) C1Sym0KindInference) ())- data C1Sym0 :: (~>) T0 ((~>) T1 T1)- where- C1Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply C1Sym0 arg) (C1Sym1 arg) =>- C1Sym0 t0123456789876543210- type instance Apply C1Sym0 t0123456789876543210 = C1Sym1 t0123456789876543210- infixr 5 `C1Sym0`- type (:&&@#@$$$) (t0123456789876543210 :: T0) (t0123456789876543210 :: T1) =- '(:&&) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ((:&&@#@$$) t0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::&&@#@$$###)) ())- data (:&&@#@$$) (t0123456789876543210 :: T0) :: (~>) T1 T1- where- (::&&@#@$$###) :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply ((:&&@#@$$) t0123456789876543210) arg) ((:&&@#@$$$) t0123456789876543210 arg) =>- (:&&@#@$$) t0123456789876543210 t0123456789876543210- type instance Apply ((:&&@#@$$) t0123456789876543210) t0123456789876543210 = '(:&&) t0123456789876543210 t0123456789876543210- infixr 5 :&&@#@$$- instance SuppressUnusedWarnings (:&&@#@$) where- suppressUnusedWarnings = snd (((,) (::&&@#@$###)) ())- data (:&&@#@$) :: (~>) T0 ((~>) T1 T1)- where- (::&&@#@$###) :: forall t0123456789876543210- arg. SameKind (Apply (:&&@#@$) arg) ((:&&@#@$$) arg) =>- (:&&@#@$) t0123456789876543210- type instance Apply (:&&@#@$) t0123456789876543210 = (:&&@#@$$) t0123456789876543210- infixr 5 :&&@#@$- data instance Sing :: T1 -> GHC.Types.Type- where- SN1 :: Sing 'N1- SC1 :: forall (n :: T0) (n :: T1).- (Sing (n :: T0)) -> (Sing (n :: T1)) -> Sing ( 'C1 n n)- (:%&&) :: forall (n :: T0) (n :: T1).- (Sing (n :: T0)) -> (Sing (n :: T1)) -> Sing ( '(:&&) n n)- type ST1 = (Sing :: T1 -> GHC.Types.Type)- instance SingKind T1 where- type Demote T1 = T1- fromSing SN1 = N1- fromSing (SC1 b b) = (C1 (fromSing b)) (fromSing b)- fromSing ((:%&&) b b) = ((:&&) (fromSing b)) (fromSing b)- toSing N1 = SomeSing SN1- toSing (C1 (b :: Demote T0) (b :: Demote T1))- = case- ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T1)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SC1 c) c) }- toSing ((:&&) (b :: Demote T0) (b :: Demote T1))- = case- ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T1)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%&&) c) c) }- infixr 5 `SC1`- infixr 5 :%&&- instance SingI 'N1 where- sing = SN1- instance (SingI n, SingI n) =>- SingI ( 'C1 (n :: T0) (n :: T1)) where- sing = (SC1 sing) sing- instance SingI (C1Sym0 :: (~>) T0 ((~>) T1 T1)) where- sing = (singFun2 @C1Sym0) SC1- instance SingI (TyCon2 'C1 :: (~>) T0 ((~>) T1 T1)) where- sing = (singFun2 @(TyCon2 'C1)) SC1- instance SingI d => SingI (C1Sym1 (d :: T0) :: (~>) T1 T1) where- sing = (singFun1 @(C1Sym1 (d :: T0))) (SC1 (sing @d))- instance SingI d =>- SingI (TyCon1 ( 'C1 (d :: T0)) :: (~>) T1 T1) where- sing = (singFun1 @(TyCon1 ( 'C1 (d :: T0)))) (SC1 (sing @d))- instance (SingI n, SingI n) =>- SingI ( '(:&&) (n :: T0) (n :: T1)) where- sing = ((:%&&) sing) sing- instance SingI ((:&&@#@$) :: (~>) T0 ((~>) T1 T1)) where- sing = (singFun2 @(:&&@#@$)) (:%&&)- instance SingI (TyCon2 '(:&&) :: (~>) T0 ((~>) T1 T1)) where- sing = (singFun2 @(TyCon2 '(:&&))) (:%&&)- instance SingI d =>- SingI ((:&&@#@$$) (d :: T0) :: (~>) T1 T1) where- sing = (singFun1 @((:&&@#@$$) (d :: T0))) ((:%&&) (sing @d))- instance SingI d =>- SingI (TyCon1 ( '(:&&) (d :: T0)) :: (~>) T1 T1) where- sing = (singFun1 @(TyCon1 ( '(:&&) (d :: T0)))) ((:%&&) (sing @d))-Singletons/T159.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| infixr 5 :||- infixr 5 `C2`- - data T2 = N2 | C2 T0 T2 | T0 :|| T2 |]- ======>- data T2 = N2 | C2 T0 T2 | T0 :|| T2- infixr 5 `C2`- infixr 5 :||- type N2Sym0 = N2- type C2Sym2 (t0123456789876543210 :: T0) (t0123456789876543210 :: T2) =- C2 t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (C2Sym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) C2Sym1KindInference) ())- data C2Sym1 (t0123456789876543210 :: T0) :: (~>) T2 T2- where- C2Sym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (C2Sym1 t0123456789876543210) arg) (C2Sym2 t0123456789876543210 arg) =>- C2Sym1 t0123456789876543210 t0123456789876543210- type instance Apply (C2Sym1 t0123456789876543210) t0123456789876543210 = C2 t0123456789876543210 t0123456789876543210- infixr 5 `C2Sym1`- instance SuppressUnusedWarnings C2Sym0 where- suppressUnusedWarnings = snd (((,) C2Sym0KindInference) ())- data C2Sym0 :: (~>) T0 ((~>) T2 T2)- where- C2Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply C2Sym0 arg) (C2Sym1 arg) =>- C2Sym0 t0123456789876543210- type instance Apply C2Sym0 t0123456789876543210 = C2Sym1 t0123456789876543210- infixr 5 `C2Sym0`- type (:||@#@$$$) (t0123456789876543210 :: T0) (t0123456789876543210 :: T2) =- (:||) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ((:||@#@$$) t0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::||@#@$$###)) ())- data (:||@#@$$) (t0123456789876543210 :: T0) :: (~>) T2 T2- where- (::||@#@$$###) :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply ((:||@#@$$) t0123456789876543210) arg) ((:||@#@$$$) t0123456789876543210 arg) =>- (:||@#@$$) t0123456789876543210 t0123456789876543210- type instance Apply ((:||@#@$$) t0123456789876543210) t0123456789876543210 = (:||) t0123456789876543210 t0123456789876543210- infixr 5 :||@#@$$- instance SuppressUnusedWarnings (:||@#@$) where- suppressUnusedWarnings = snd (((,) (::||@#@$###)) ())- data (:||@#@$) :: (~>) T0 ((~>) T2 T2)- where- (::||@#@$###) :: forall t0123456789876543210- arg. SameKind (Apply (:||@#@$) arg) ((:||@#@$$) arg) =>- (:||@#@$) t0123456789876543210- type instance Apply (:||@#@$) t0123456789876543210 = (:||@#@$$) t0123456789876543210- infixr 5 :||@#@$- infixr 5 `SC2`- infixr 5 :%||- data instance Sing :: T2 -> GHC.Types.Type- where- SN2 :: Sing N2- SC2 :: forall (n :: T0) (n :: T2).- (Sing (n :: T0)) -> (Sing (n :: T2)) -> Sing (C2 n n)- (:%||) :: forall (n :: T0) (n :: T2).- (Sing (n :: T0)) -> (Sing (n :: T2)) -> Sing ((:||) n n)- type ST2 = (Sing :: T2 -> GHC.Types.Type)- instance SingKind T2 where- type Demote T2 = T2- fromSing SN2 = N2- fromSing (SC2 b b) = (C2 (fromSing b)) (fromSing b)- fromSing ((:%||) b b) = ((:||) (fromSing b)) (fromSing b)- toSing N2 = SomeSing SN2- toSing (C2 (b :: Demote T0) (b :: Demote T2))- = case- ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T2)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SC2 c) c) }- toSing ((:||) (b :: Demote T0) (b :: Demote T2))- = case- ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T2)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%||) c) c) }- instance SingI N2 where- sing = SN2- instance (SingI n, SingI n) => SingI (C2 (n :: T0) (n :: T2)) where- sing = (SC2 sing) sing- instance SingI (C2Sym0 :: (~>) T0 ((~>) T2 T2)) where- sing = (singFun2 @C2Sym0) SC2- instance SingI (TyCon2 C2 :: (~>) T0 ((~>) T2 T2)) where- sing = (singFun2 @(TyCon2 C2)) SC2- instance SingI d => SingI (C2Sym1 (d :: T0) :: (~>) T2 T2) where- sing = (singFun1 @(C2Sym1 (d :: T0))) (SC2 (sing @d))- instance SingI d =>- SingI (TyCon1 (C2 (d :: T0)) :: (~>) T2 T2) where- sing = (singFun1 @(TyCon1 (C2 (d :: T0)))) (SC2 (sing @d))- instance (SingI n, SingI n) =>- SingI ((:||) (n :: T0) (n :: T2)) where- sing = ((:%||) sing) sing- instance SingI ((:||@#@$) :: (~>) T0 ((~>) T2 T2)) where- sing = (singFun2 @(:||@#@$)) (:%||)- instance SingI (TyCon2 (:||) :: (~>) T0 ((~>) T2 T2)) where- sing = (singFun2 @(TyCon2 (:||))) (:%||)- instance SingI d =>- SingI ((:||@#@$$) (d :: T0) :: (~>) T2 T2) where- sing = (singFun1 @((:||@#@$$) (d :: T0))) ((:%||) (sing @d))- instance SingI d =>- SingI (TyCon1 ((:||) (d :: T0)) :: (~>) T2 T2) where- sing = (singFun1 @(TyCon1 ((:||) (d :: T0)))) ((:%||) (sing @d))
+ tests/compile-and-dump/Singletons/T159.ghc88.template view
@@ -0,0 +1,225 @@+Singletons/T159.hs:0:0:: Splicing declarations+ genSingletons [''T0, ''T1]+ ======>+ type ASym0 = 'A+ type BSym0 = 'B+ type CSym0 = 'C+ type DSym0 = 'D+ type ESym0 = 'E+ type FSym0 = 'F+ data ST0 :: T0 -> GHC.Types.Type+ where+ SA :: ST0 'A+ SB :: ST0 'B+ SC :: ST0 'C+ SD :: ST0 'D+ SE :: ST0 'E+ SF :: ST0 'F+ type instance Sing @T0 = ST0+ instance SingKind T0 where+ type Demote T0 = T0+ fromSing SA = A+ fromSing SB = B+ fromSing SC = C+ fromSing SD = D+ fromSing SE = E+ fromSing SF = F+ toSing A = SomeSing SA+ toSing B = SomeSing SB+ toSing C = SomeSing SC+ toSing D = SomeSing SD+ toSing E = SomeSing SE+ toSing F = SomeSing SF+ instance SingI 'A where+ sing = SA+ instance SingI 'B where+ sing = SB+ instance SingI 'C where+ sing = SC+ instance SingI 'D where+ sing = SD+ instance SingI 'E where+ sing = SE+ instance SingI 'F where+ sing = SF+ type N1Sym0 = 'N1+ type C1Sym2 (t0123456789876543210 :: T0) (t0123456789876543210 :: T1) =+ 'C1 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (C1Sym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) C1Sym1KindInference) ())+ data C1Sym1 (t0123456789876543210 :: T0) :: (~>) T1 T1+ where+ C1Sym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (C1Sym1 t0123456789876543210) arg) (C1Sym2 t0123456789876543210 arg) =>+ C1Sym1 t0123456789876543210 t0123456789876543210+ type instance Apply (C1Sym1 t0123456789876543210) t0123456789876543210 = 'C1 t0123456789876543210 t0123456789876543210+ infixr 5 `C1Sym1`+ instance SuppressUnusedWarnings C1Sym0 where+ suppressUnusedWarnings = snd (((,) C1Sym0KindInference) ())+ data C1Sym0 :: (~>) T0 ((~>) T1 T1)+ where+ C1Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply C1Sym0 arg) (C1Sym1 arg) =>+ C1Sym0 t0123456789876543210+ type instance Apply C1Sym0 t0123456789876543210 = C1Sym1 t0123456789876543210+ infixr 5 `C1Sym0`+ type (:&&@#@$$$) (t0123456789876543210 :: T0) (t0123456789876543210 :: T1) =+ '(:&&) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ((:&&@#@$$) t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::&&@#@$$###)) ())+ data (:&&@#@$$) (t0123456789876543210 :: T0) :: (~>) T1 T1+ where+ (::&&@#@$$###) :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply ((:&&@#@$$) t0123456789876543210) arg) ((:&&@#@$$$) t0123456789876543210 arg) =>+ (:&&@#@$$) t0123456789876543210 t0123456789876543210+ type instance Apply ((:&&@#@$$) t0123456789876543210) t0123456789876543210 = '(:&&) t0123456789876543210 t0123456789876543210+ infixr 5 :&&@#@$$+ instance SuppressUnusedWarnings (:&&@#@$) where+ suppressUnusedWarnings = snd (((,) (::&&@#@$###)) ())+ data (:&&@#@$) :: (~>) T0 ((~>) T1 T1)+ where+ (::&&@#@$###) :: forall t0123456789876543210+ arg. SameKind (Apply (:&&@#@$) arg) ((:&&@#@$$) arg) =>+ (:&&@#@$) t0123456789876543210+ type instance Apply (:&&@#@$) t0123456789876543210 = (:&&@#@$$) t0123456789876543210+ infixr 5 :&&@#@$+ data ST1 :: T1 -> GHC.Types.Type+ where+ SN1 :: ST1 'N1+ SC1 :: forall (n :: T0) (n :: T1).+ (Sing (n :: T0)) -> (Sing (n :: T1)) -> ST1 ('C1 n n)+ (:%&&) :: forall (n :: T0) (n :: T1).+ (Sing (n :: T0)) -> (Sing (n :: T1)) -> ST1 ('(:&&) n n)+ type instance Sing @T1 = ST1+ instance SingKind T1 where+ type Demote T1 = T1+ fromSing SN1 = N1+ fromSing (SC1 b b) = (C1 (fromSing b)) (fromSing b)+ fromSing ((:%&&) b b) = ((:&&) (fromSing b)) (fromSing b)+ toSing N1 = SomeSing SN1+ toSing (C1 (b :: Demote T0) (b :: Demote T1))+ = case+ ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T1)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SC1 c) c) }+ toSing ((:&&) (b :: Demote T0) (b :: Demote T1))+ = case+ ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T1)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%&&) c) c) }+ infixr 5 `SC1`+ infixr 5 :%&&+ instance SingI 'N1 where+ sing = SN1+ instance (SingI n, SingI n) =>+ SingI ('C1 (n :: T0) (n :: T1)) where+ sing = (SC1 sing) sing+ instance SingI (C1Sym0 :: (~>) T0 ((~>) T1 T1)) where+ sing = (singFun2 @C1Sym0) SC1+ instance SingI d => SingI (C1Sym1 (d :: T0) :: (~>) T1 T1) where+ sing = (singFun1 @(C1Sym1 (d :: T0))) (SC1 (sing @d))+ instance (SingI n, SingI n) =>+ SingI ('(:&&) (n :: T0) (n :: T1)) where+ sing = ((:%&&) sing) sing+ instance SingI ((:&&@#@$) :: (~>) T0 ((~>) T1 T1)) where+ sing = (singFun2 @(:&&@#@$)) (:%&&)+ instance SingI d =>+ SingI ((:&&@#@$$) (d :: T0) :: (~>) T1 T1) where+ sing = (singFun1 @((:&&@#@$$) (d :: T0))) ((:%&&) (sing @d))+Singletons/T159.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| infixr 5 :||+ infixr 5 `C2`+ + data T2 = N2 | C2 T0 T2 | T0 :|| T2 |]+ ======>+ data T2 = N2 | C2 T0 T2 | T0 :|| T2+ infixr 5 `C2`+ infixr 5 :||+ type N2Sym0 = N2+ type C2Sym2 (t0123456789876543210 :: T0) (t0123456789876543210 :: T2) =+ C2 t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (C2Sym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) C2Sym1KindInference) ())+ data C2Sym1 (t0123456789876543210 :: T0) :: (~>) T2 T2+ where+ C2Sym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (C2Sym1 t0123456789876543210) arg) (C2Sym2 t0123456789876543210 arg) =>+ C2Sym1 t0123456789876543210 t0123456789876543210+ type instance Apply (C2Sym1 t0123456789876543210) t0123456789876543210 = C2 t0123456789876543210 t0123456789876543210+ infixr 5 `C2Sym1`+ instance SuppressUnusedWarnings C2Sym0 where+ suppressUnusedWarnings = snd (((,) C2Sym0KindInference) ())+ data C2Sym0 :: (~>) T0 ((~>) T2 T2)+ where+ C2Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply C2Sym0 arg) (C2Sym1 arg) =>+ C2Sym0 t0123456789876543210+ type instance Apply C2Sym0 t0123456789876543210 = C2Sym1 t0123456789876543210+ infixr 5 `C2Sym0`+ type (:||@#@$$$) (t0123456789876543210 :: T0) (t0123456789876543210 :: T2) =+ (:||) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ((:||@#@$$) t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::||@#@$$###)) ())+ data (:||@#@$$) (t0123456789876543210 :: T0) :: (~>) T2 T2+ where+ (::||@#@$$###) :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply ((:||@#@$$) t0123456789876543210) arg) ((:||@#@$$$) t0123456789876543210 arg) =>+ (:||@#@$$) t0123456789876543210 t0123456789876543210+ type instance Apply ((:||@#@$$) t0123456789876543210) t0123456789876543210 = (:||) t0123456789876543210 t0123456789876543210+ infixr 5 :||@#@$$+ instance SuppressUnusedWarnings (:||@#@$) where+ suppressUnusedWarnings = snd (((,) (::||@#@$###)) ())+ data (:||@#@$) :: (~>) T0 ((~>) T2 T2)+ where+ (::||@#@$###) :: forall t0123456789876543210+ arg. SameKind (Apply (:||@#@$) arg) ((:||@#@$$) arg) =>+ (:||@#@$) t0123456789876543210+ type instance Apply (:||@#@$) t0123456789876543210 = (:||@#@$$) t0123456789876543210+ infixr 5 :||@#@$+ infixr 5 :%||+ infixr 5 `SC2`+ data ST2 :: T2 -> GHC.Types.Type+ where+ SN2 :: ST2 N2+ SC2 :: forall (n :: T0) (n :: T2).+ (Sing (n :: T0)) -> (Sing (n :: T2)) -> ST2 (C2 n n)+ (:%||) :: forall (n :: T0) (n :: T2).+ (Sing (n :: T0)) -> (Sing (n :: T2)) -> ST2 ((:||) n n)+ type instance Sing @T2 = ST2+ instance SingKind T2 where+ type Demote T2 = T2+ fromSing SN2 = N2+ fromSing (SC2 b b) = (C2 (fromSing b)) (fromSing b)+ fromSing ((:%||) b b) = ((:||) (fromSing b)) (fromSing b)+ toSing N2 = SomeSing SN2+ toSing (C2 (b :: Demote T0) (b :: Demote T2))+ = case+ ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T2)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SC2 c) c) }+ toSing ((:||) (b :: Demote T0) (b :: Demote T2))+ = case+ ((,) (toSing b :: SomeSing T0)) (toSing b :: SomeSing T2)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%||) c) c) }+ instance SingI N2 where+ sing = SN2+ instance (SingI n, SingI n) => SingI (C2 (n :: T0) (n :: T2)) where+ sing = (SC2 sing) sing+ instance SingI (C2Sym0 :: (~>) T0 ((~>) T2 T2)) where+ sing = (singFun2 @C2Sym0) SC2+ instance SingI d => SingI (C2Sym1 (d :: T0) :: (~>) T2 T2) where+ sing = (singFun1 @(C2Sym1 (d :: T0))) (SC2 (sing @d))+ instance (SingI n, SingI n) =>+ SingI ((:||) (n :: T0) (n :: T2)) where+ sing = ((:%||) sing) sing+ instance SingI ((:||@#@$) :: (~>) T0 ((~>) T2 T2)) where+ sing = (singFun2 @(:||@#@$)) (:%||)+ instance SingI d =>+ SingI ((:||@#@$$) (d :: T0) :: (~>) T2 T2) where+ sing = (singFun1 @((:||@#@$$) (d :: T0))) ((:%||) (sing @d))
− tests/compile-and-dump/Singletons/T160.ghc86.template
@@ -1,85 +0,0 @@-Singletons/T160.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo :: (Num a, Eq a) => a -> a- foo x = if x == 0 then 1 else typeError $ ShowType x |]- ======>- foo :: (Num a, Eq a) => a -> a- foo x = if (x == 0) then 1 else (typeError $ ShowType x)- type Let0123456789876543210Scrutinee_0123456789876543210Sym1 x0123456789876543210 =- Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210- type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210- type family Let0123456789876543210Scrutinee_0123456789876543210 x where- Let0123456789876543210Scrutinee_0123456789876543210 x = Apply (Apply (==@#@$) x) (FromInteger 0)- type family Case_0123456789876543210 x t where- Case_0123456789876543210 x 'True = FromInteger 1- Case_0123456789876543210 x 'False = Apply (Apply ($@#@$) TypeErrorSym0) (Apply ShowTypeSym0 x)- type FooSym1 (a0123456789876543210 :: a0123456789876543210) =- Foo a0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- FooSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 a0123456789876543210- type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210- type family Foo (a :: a) :: a where- Foo x = Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)- sFoo ::- forall a (t :: a).- (SNum a, SEq a) => Sing t -> Sing (Apply FooSym0 t :: a)- sFoo (sX :: Sing x)- = let- sScrutinee_0123456789876543210 ::- Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)- sScrutinee_0123456789876543210- = (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sX))- (sFromInteger (sing :: Sing 0))- in (case sScrutinee_0123456789876543210 of- STrue -> sFromInteger (sing :: Sing 1)- SFalse- -> (applySing ((applySing ((singFun2 @($@#@$)) (%$))) sTypeError))- ((applySing ((singFun1 @ShowTypeSym0) SShowType)) sX)) ::- Sing (Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x) :: a)- instance (SNum a, SEq a) => SingI (FooSym0 :: (~>) a a) where- sing = (singFun1 @FooSym0) sFoo--Singletons/T160.hs:0:0: error:- • t- • In the expression:- (applySing ((applySing ((singFun2 @($@#@$)) (%$))) sTypeError))- ((applySing ((singFun1 @ShowTypeSym0) SShowType)) sX)- In a case alternative:- SFalse- -> (applySing ((applySing ((singFun2 @($@#@$)) (%$))) sTypeError))- ((applySing ((singFun1 @ShowTypeSym0) SShowType)) sX)- In the expression:- (case sScrutinee_0123456789876543210 of- STrue -> sFromInteger (sing :: Sing 1)- SFalse- -> (applySing ((applySing ((singFun2 @($@#@$)) (%$))) sTypeError))- ((applySing ((singFun1 @ShowTypeSym0) SShowType)) sX)) ::- Sing (Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x) :: a)- |-7 | $(singletons- | ^^^^^^^^^^...--Singletons/T160.hs:0:0: error:- • 1- • In the expression: Refl- In an equation for ‘f’: f = Refl- |-13 | f = Refl- | ^^^^
+ tests/compile-and-dump/Singletons/T160.ghc88.template view
@@ -0,0 +1,69 @@+Singletons/T160.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo :: (Num a, Eq a) => a -> a+ foo x = if x == 0 then 1 else typeError $ ShowType x |]+ ======>+ foo :: (Num a, Eq a) => a -> a+ foo x = if (x == 0) then 1 else (typeError $ ShowType x)+ type Let0123456789876543210Scrutinee_0123456789876543210Sym1 x0123456789876543210 =+ Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210+ type family Let0123456789876543210Scrutinee_0123456789876543210 x where+ Let0123456789876543210Scrutinee_0123456789876543210 x = Apply (Apply (==@#@$) x) (FromInteger 0)+ type family Case_0123456789876543210 x t where+ Case_0123456789876543210 x 'True = FromInteger 1+ Case_0123456789876543210 x 'False = Apply (Apply ($@#@$) TypeErrorSym0) (Apply ShowTypeSym0 x)+ type FooSym1 (a0123456789876543210 :: a0123456789876543210) =+ Foo a0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ FooSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 a0123456789876543210+ type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210+ type family Foo (a :: a) :: a where+ Foo x = Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)+ sFoo ::+ forall a (t :: a).+ (SNum a, SEq a) => Sing t -> Sing (Apply FooSym0 t :: a)+ sFoo (sX :: Sing x)+ = let+ sScrutinee_0123456789876543210 ::+ Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)+ sScrutinee_0123456789876543210+ = (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sX))+ (sFromInteger (sing :: Sing 0))+ in+ (id+ @(Sing (Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x) :: a)))+ (case sScrutinee_0123456789876543210 of+ STrue -> sFromInteger (sing :: Sing 1)+ SFalse+ -> (applySing+ ((applySing ((singFun2 @($@#@$)) (%$)))+ ((singFun1 @TypeErrorSym0) sTypeError)))+ ((applySing ((singFun1 @ShowTypeSym0) SShowType)) sX))+ instance (SNum a, SEq a) => SingI (FooSym0 :: (~>) a a) where+ sing = (singFun1 @FooSym0) sFoo++Singletons/T160.hs:0:0: error:+ • 1+ • In the expression: Refl+ In an equation for ‘f’: f = Refl+ |+13 | f = Refl+ | ^^^^
− tests/compile-and-dump/Singletons/T163.ghc86.template
@@ -1,51 +0,0 @@-Singletons/T163.hs:0:0:: Splicing declarations- singletons [d| data a + b = L a | R b |]- ======>- data (+) a b = L a | R b- type LSym1 (t0123456789876543210 :: a0123456789876543210) =- L t0123456789876543210- instance SuppressUnusedWarnings LSym0 where- suppressUnusedWarnings = snd (((,) LSym0KindInference) ())- data LSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((+) a0123456789876543210 b0123456789876543210)- where- LSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply LSym0 arg) (LSym1 arg) =>- LSym0 t0123456789876543210- type instance Apply LSym0 t0123456789876543210 = L t0123456789876543210- type RSym1 (t0123456789876543210 :: b0123456789876543210) =- R t0123456789876543210- instance SuppressUnusedWarnings RSym0 where- suppressUnusedWarnings = snd (((,) RSym0KindInference) ())- data RSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) b0123456789876543210 ((+) a0123456789876543210 b0123456789876543210)- where- RSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply RSym0 arg) (RSym1 arg) =>- RSym0 t0123456789876543210- type instance Apply RSym0 t0123456789876543210 = R t0123456789876543210- data instance Sing :: (+) a b -> GHC.Types.Type- where- SL :: forall a (n :: a). (Sing (n :: a)) -> Sing (L n)- SR :: forall b (n :: b). (Sing (n :: b)) -> Sing (R n)- type (%+) = (Sing :: (+) a b -> GHC.Types.Type)- instance (SingKind a, SingKind b) => SingKind ((+) a b) where- type Demote ((+) a b) = (+) (Demote a) (Demote b)- fromSing (SL b) = L (fromSing b)- fromSing (SR b) = R (fromSing b)- toSing (L (b :: Demote a))- = case toSing b :: SomeSing a of { SomeSing c -> SomeSing (SL c) }- toSing (R (b :: Demote b))- = case toSing b :: SomeSing b of { SomeSing c -> SomeSing (SR c) }- instance SingI n => SingI (L (n :: a)) where- sing = SL sing- instance SingI (LSym0 :: (~>) a ((+) a b)) where- sing = (singFun1 @LSym0) SL- instance SingI (TyCon1 L :: (~>) a ((+) a b)) where- sing = (singFun1 @(TyCon1 L)) SL- instance SingI n => SingI (R (n :: b)) where- sing = SR sing- instance SingI (RSym0 :: (~>) b ((+) a b)) where- sing = (singFun1 @RSym0) SR- instance SingI (TyCon1 R :: (~>) b ((+) a b)) where- sing = (singFun1 @(TyCon1 R)) SR
+ tests/compile-and-dump/Singletons/T163.ghc88.template view
@@ -0,0 +1,47 @@+Singletons/T163.hs:0:0:: Splicing declarations+ singletons [d| data a + b = L a | R b |]+ ======>+ data (+) a b = L a | R b+ type LSym1 (t0123456789876543210 :: a0123456789876543210) =+ L t0123456789876543210+ instance SuppressUnusedWarnings LSym0 where+ suppressUnusedWarnings = snd (((,) LSym0KindInference) ())+ data LSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((+) a0123456789876543210 b0123456789876543210)+ where+ LSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply LSym0 arg) (LSym1 arg) =>+ LSym0 t0123456789876543210+ type instance Apply LSym0 t0123456789876543210 = L t0123456789876543210+ type RSym1 (t0123456789876543210 :: b0123456789876543210) =+ R t0123456789876543210+ instance SuppressUnusedWarnings RSym0 where+ suppressUnusedWarnings = snd (((,) RSym0KindInference) ())+ data RSym0 :: forall b0123456789876543210 a0123456789876543210.+ (~>) b0123456789876543210 ((+) a0123456789876543210 b0123456789876543210)+ where+ RSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply RSym0 arg) (RSym1 arg) =>+ RSym0 t0123456789876543210+ type instance Apply RSym0 t0123456789876543210 = R t0123456789876543210+ data (%+) :: forall a b. (+) a b -> GHC.Types.Type+ where+ SL :: forall a (n :: a). (Sing (n :: a)) -> (%+) (L n)+ SR :: forall b (n :: b). (Sing (n :: b)) -> (%+) (R n)+ type instance Sing @((+) a b) = (%+)+ instance (SingKind a, SingKind b) => SingKind ((+) a b) where+ type Demote ((+) a b) = (+) (Demote a) (Demote b)+ fromSing (SL b) = L (fromSing b)+ fromSing (SR b) = R (fromSing b)+ toSing (L (b :: Demote a))+ = case toSing b :: SomeSing a of { SomeSing c -> SomeSing (SL c) }+ toSing (R (b :: Demote b))+ = case toSing b :: SomeSing b of { SomeSing c -> SomeSing (SR c) }+ instance SingI n => SingI (L (n :: a)) where+ sing = SL sing+ instance SingI (LSym0 :: (~>) a ((+) a b)) where+ sing = (singFun1 @LSym0) SL+ instance SingI n => SingI (R (n :: b)) where+ sing = SR sing+ instance SingI (RSym0 :: (~>) b ((+) a b)) where+ sing = (singFun1 @RSym0) SR
− tests/compile-and-dump/Singletons/T166.ghc86.template
@@ -1,139 +0,0 @@-Singletons/T166.hs:(0,0)-(0,0): Splicing declarations- singletonsOnly- [d| class Foo a where- foosPrec :: Nat -> a -> [Bool] -> [Bool]- foo :: a -> [Bool]- foo x s = foosPrec 0 x s |]- ======>- type FoosPrecSym3 (arg0123456789876543210 :: Nat) (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: [Bool]) =- FoosPrec arg0123456789876543210 arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) FoosPrecSym2KindInference) ())- data FoosPrecSym2 (arg0123456789876543210 :: Nat) (arg0123456789876543210 :: a0123456789876543210) :: (~>) [Bool] [Bool]- where- FoosPrecSym2KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) arg) (FoosPrecSym3 arg0123456789876543210 arg0123456789876543210 arg) =>- FoosPrecSym2 arg0123456789876543210 arg0123456789876543210 arg0123456789876543210- type instance Apply (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) arg0123456789876543210 = FoosPrec arg0123456789876543210 arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (FoosPrecSym1 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) FoosPrecSym1KindInference) ())- data FoosPrecSym1 (arg0123456789876543210 :: Nat) :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) [Bool] [Bool])- where- FoosPrecSym1KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (FoosPrecSym1 arg0123456789876543210) arg) (FoosPrecSym2 arg0123456789876543210 arg) =>- FoosPrecSym1 arg0123456789876543210 arg0123456789876543210- type instance Apply (FoosPrecSym1 arg0123456789876543210) arg0123456789876543210 = FoosPrecSym2 arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings FoosPrecSym0 where- suppressUnusedWarnings = snd (((,) FoosPrecSym0KindInference) ())- data FoosPrecSym0 :: forall a0123456789876543210.- (~>) Nat ((~>) a0123456789876543210 ((~>) [Bool] [Bool]))- where- FoosPrecSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply FoosPrecSym0 arg) (FoosPrecSym1 arg) =>- FoosPrecSym0 arg0123456789876543210- type instance Apply FoosPrecSym0 arg0123456789876543210 = FoosPrecSym1 arg0123456789876543210- type FooSym1 (arg0123456789876543210 :: a0123456789876543210) =- Foo arg0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 [Bool]- where- FooSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 arg0123456789876543210- type instance Apply FooSym0 arg0123456789876543210 = Foo arg0123456789876543210- type family Lambda_0123456789876543210 x t where- Lambda_0123456789876543210 x s = Apply (Apply (Apply FoosPrecSym0 (Data.Singletons.Prelude.Num.FromInteger 0)) x) s- type Lambda_0123456789876543210Sym2 x0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type family Foo_0123456789876543210 (a :: a) :: [Bool] where- Foo_0123456789876543210 x = Apply Lambda_0123456789876543210Sym0 x- type Foo_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) =- Foo_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Foo_0123456789876543210Sym0KindInference) ())- data Foo_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 [Bool]- where- Foo_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo_0123456789876543210Sym0 arg) (Foo_0123456789876543210Sym1 arg) =>- Foo_0123456789876543210Sym0 a0123456789876543210- type instance Apply Foo_0123456789876543210Sym0 a0123456789876543210 = Foo_0123456789876543210 a0123456789876543210- class PFoo (a :: GHC.Types.Type) where- type FoosPrec (arg :: Nat) (arg :: a) (arg :: [Bool]) :: [Bool]- type Foo (arg :: a) :: [Bool]- type Foo a = Apply Foo_0123456789876543210Sym0 a- class SFoo a where- sFoosPrec ::- forall (t :: Nat) (t :: a) (t :: [Bool]).- Sing t- -> Sing t- -> Sing t- -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])- sFoo :: forall (t :: a). Sing t -> Sing (Apply FooSym0 t :: [Bool])- default sFoo ::- forall (t :: a).- (Apply FooSym0 t :: [Bool])- ~ Apply Foo_0123456789876543210Sym0 t =>- Sing t -> Sing (Apply FooSym0 t :: [Bool])- sFoo (sX :: Sing x)- = (singFun1 @(Apply Lambda_0123456789876543210Sym0 x))- (\ sS- -> case sS of {- (_ :: Sing s)- -> (applySing- ((applySing- ((applySing ((singFun3 @FoosPrecSym0) sFoosPrec))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0))))- sX))- sS })- instance SFoo a =>- SingI (FoosPrecSym0 :: (~>) Nat ((~>) a ((~>) [Bool] [Bool]))) where- sing = (singFun3 @FoosPrecSym0) sFoosPrec- instance (SFoo a, SingI d) =>- SingI (FoosPrecSym1 (d :: Nat) :: (~>) a ((~>) [Bool] [Bool])) where- sing = (singFun2 @(FoosPrecSym1 (d :: Nat))) (sFoosPrec (sing @d))- instance (SFoo a, SingI d, SingI d) =>- SingI (FoosPrecSym2 (d :: Nat) (d :: a) :: (~>) [Bool] [Bool]) where- sing- = (singFun1 @(FoosPrecSym2 (d :: Nat) (d :: a)))- ((sFoosPrec (sing @d)) (sing @d))- instance SFoo a => SingI (FooSym0 :: (~>) a [Bool]) where- sing = (singFun1 @FooSym0) sFoo--Singletons/T166.hs:0:0: error:- • Expecting one more argument to ‘Apply Lambda_0123456789876543210Sym0 x’- Expected kind ‘[Bool]’,- but ‘Apply Lambda_0123456789876543210Sym0 x’ has kind ‘TyFun- [Bool] [Bool]- -> Type’- • In the type ‘Apply Lambda_0123456789876543210Sym0 x’- In the type family declaration for ‘Foo_0123456789876543210’- |-14 | $(singletonsOnly [d|- | ^^^^^^^^^^^^^^^^^^...
+ tests/compile-and-dump/Singletons/T166.ghc88.template view
@@ -0,0 +1,139 @@+Singletons/T166.hs:(0,0)-(0,0): Splicing declarations+ singletonsOnly+ [d| class Foo a where+ foosPrec :: Nat -> a -> [Bool] -> [Bool]+ foo :: a -> [Bool]+ foo x s = foosPrec 0 x s |]+ ======>+ type FoosPrecSym3 (arg0123456789876543210 :: Nat) (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: [Bool]) =+ FoosPrec arg0123456789876543210 arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FoosPrecSym2KindInference) ())+ data FoosPrecSym2 (arg0123456789876543210 :: Nat) (arg0123456789876543210 :: a0123456789876543210) :: (~>) [Bool] [Bool]+ where+ FoosPrecSym2KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) arg) (FoosPrecSym3 arg0123456789876543210 arg0123456789876543210 arg) =>+ FoosPrecSym2 arg0123456789876543210 arg0123456789876543210 arg0123456789876543210+ type instance Apply (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) arg0123456789876543210 = FoosPrec arg0123456789876543210 arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (FoosPrecSym1 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FoosPrecSym1KindInference) ())+ data FoosPrecSym1 (arg0123456789876543210 :: Nat) :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) [Bool] [Bool])+ where+ FoosPrecSym1KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (FoosPrecSym1 arg0123456789876543210) arg) (FoosPrecSym2 arg0123456789876543210 arg) =>+ FoosPrecSym1 arg0123456789876543210 arg0123456789876543210+ type instance Apply (FoosPrecSym1 arg0123456789876543210) arg0123456789876543210 = FoosPrecSym2 arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings FoosPrecSym0 where+ suppressUnusedWarnings = snd (((,) FoosPrecSym0KindInference) ())+ data FoosPrecSym0 :: forall a0123456789876543210.+ (~>) Nat ((~>) a0123456789876543210 ((~>) [Bool] [Bool]))+ where+ FoosPrecSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply FoosPrecSym0 arg) (FoosPrecSym1 arg) =>+ FoosPrecSym0 arg0123456789876543210+ type instance Apply FoosPrecSym0 arg0123456789876543210 = FoosPrecSym1 arg0123456789876543210+ type FooSym1 (arg0123456789876543210 :: a0123456789876543210) =+ Foo arg0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 [Bool]+ where+ FooSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 arg0123456789876543210+ type instance Apply FooSym0 arg0123456789876543210 = Foo arg0123456789876543210+ type family Lambda_0123456789876543210 x t where+ Lambda_0123456789876543210 x s = Apply (Apply (Apply FoosPrecSym0 (Data.Singletons.Prelude.Num.FromInteger 0)) x) s+ type Lambda_0123456789876543210Sym2 x0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Foo_0123456789876543210 (a :: a) :: [Bool] where+ Foo_0123456789876543210 x = Apply Lambda_0123456789876543210Sym0 x+ type Foo_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) =+ Foo_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Foo_0123456789876543210Sym0KindInference) ())+ data Foo_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 [Bool]+ where+ Foo_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo_0123456789876543210Sym0 arg) (Foo_0123456789876543210Sym1 arg) =>+ Foo_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Foo_0123456789876543210Sym0 a0123456789876543210 = Foo_0123456789876543210 a0123456789876543210+ class PFoo (a :: GHC.Types.Type) where+ type FoosPrec (arg :: Nat) (arg :: a) (arg :: [Bool]) :: [Bool]+ type Foo (arg :: a) :: [Bool]+ type Foo a = Apply Foo_0123456789876543210Sym0 a+ class SFoo a where+ sFoosPrec ::+ forall (t :: Nat) (t :: a) (t :: [Bool]).+ Sing t+ -> Sing t+ -> Sing t+ -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])+ sFoo :: forall (t :: a). Sing t -> Sing (Apply FooSym0 t :: [Bool])+ default sFoo ::+ forall (t :: a).+ ((Apply FooSym0 t :: [Bool])+ ~ Apply Foo_0123456789876543210Sym0 t) =>+ Sing t -> Sing (Apply FooSym0 t :: [Bool])+ sFoo (sX :: Sing x)+ = (singFun1 @(Apply Lambda_0123456789876543210Sym0 x))+ (\ sS+ -> case sS of {+ (_ :: Sing s)+ -> (applySing+ ((applySing+ ((applySing ((singFun3 @FoosPrecSym0) sFoosPrec))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0))))+ sX))+ sS })+ instance SFoo a =>+ SingI (FoosPrecSym0 :: (~>) Nat ((~>) a ((~>) [Bool] [Bool]))) where+ sing = (singFun3 @FoosPrecSym0) sFoosPrec+ instance (SFoo a, SingI d) =>+ SingI (FoosPrecSym1 (d :: Nat) :: (~>) a ((~>) [Bool] [Bool])) where+ sing = (singFun2 @(FoosPrecSym1 (d :: Nat))) (sFoosPrec (sing @d))+ instance (SFoo a, SingI d, SingI d) =>+ SingI (FoosPrecSym2 (d :: Nat) (d :: a) :: (~>) [Bool] [Bool]) where+ sing+ = (singFun1 @(FoosPrecSym2 (d :: Nat) (d :: a)))+ ((sFoosPrec (sing @d)) (sing @d))+ instance SFoo a => SingI (FooSym0 :: (~>) a [Bool]) where+ sing = (singFun1 @FooSym0) sFoo++Singletons/T166.hs:0:0: error:+ • Expecting one more argument to ‘Apply Lambda_0123456789876543210Sym0 x’+ Expected kind ‘[Bool]’,+ but ‘Apply Lambda_0123456789876543210Sym0 x’ has kind ‘TyFun+ [Bool] [Bool]+ -> Type’+ • In the type ‘Apply Lambda_0123456789876543210Sym0 x’+ In the type family declaration for ‘Foo_0123456789876543210’+ |+14 | $(singletonsOnly [d|+ | ^^^^^^^^^^^^^^^^^^...
− tests/compile-and-dump/Singletons/T167.ghc86.template
@@ -1,178 +0,0 @@-Singletons/T167.hs:(0,0)-(0,0): Splicing declarations- singletonsOnly- [d| class Foo a where- foosPrec :: Nat -> a -> DiffList- fooList :: a -> DiffList- fooList = undefined- - instance Foo a => Foo [a] where- foosPrec _ = fooList |]- ======>- type FoosPrecSym3 (arg0123456789876543210 :: Nat) (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: [Bool]) =- FoosPrec arg0123456789876543210 arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) FoosPrecSym2KindInference) ())- data FoosPrecSym2 (arg0123456789876543210 :: Nat) (arg0123456789876543210 :: a0123456789876543210) :: (~>) [Bool] [Bool]- where- FoosPrecSym2KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) arg) (FoosPrecSym3 arg0123456789876543210 arg0123456789876543210 arg) =>- FoosPrecSym2 arg0123456789876543210 arg0123456789876543210 arg0123456789876543210- type instance Apply (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) arg0123456789876543210 = FoosPrec arg0123456789876543210 arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (FoosPrecSym1 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) FoosPrecSym1KindInference) ())- data FoosPrecSym1 (arg0123456789876543210 :: Nat) :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) [Bool] [Bool])- where- FoosPrecSym1KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (FoosPrecSym1 arg0123456789876543210) arg) (FoosPrecSym2 arg0123456789876543210 arg) =>- FoosPrecSym1 arg0123456789876543210 arg0123456789876543210- type instance Apply (FoosPrecSym1 arg0123456789876543210) arg0123456789876543210 = FoosPrecSym2 arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings FoosPrecSym0 where- suppressUnusedWarnings = snd (((,) FoosPrecSym0KindInference) ())- data FoosPrecSym0 :: forall a0123456789876543210.- (~>) Nat ((~>) a0123456789876543210 ((~>) [Bool] [Bool]))- where- FoosPrecSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply FoosPrecSym0 arg) (FoosPrecSym1 arg) =>- FoosPrecSym0 arg0123456789876543210- type instance Apply FoosPrecSym0 arg0123456789876543210 = FoosPrecSym1 arg0123456789876543210- type FooListSym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: [Bool]) =- FooList arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (FooListSym1 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) FooListSym1KindInference) ())- data FooListSym1 (arg0123456789876543210 :: a0123456789876543210) :: (~>) [Bool] [Bool]- where- FooListSym1KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (FooListSym1 arg0123456789876543210) arg) (FooListSym2 arg0123456789876543210 arg) =>- FooListSym1 arg0123456789876543210 arg0123456789876543210- type instance Apply (FooListSym1 arg0123456789876543210) arg0123456789876543210 = FooList arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings FooListSym0 where- suppressUnusedWarnings = snd (((,) FooListSym0KindInference) ())- data FooListSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) [Bool] [Bool])- where- FooListSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply FooListSym0 arg) (FooListSym1 arg) =>- FooListSym0 arg0123456789876543210- type instance Apply FooListSym0 arg0123456789876543210 = FooListSym1 arg0123456789876543210- type family FooList_0123456789876543210 (a :: a) (a :: [Bool]) :: [Bool] where- FooList_0123456789876543210 a_0123456789876543210 a_0123456789876543210 = Apply (Apply UndefinedSym0 a_0123456789876543210) a_0123456789876543210- type FooList_0123456789876543210Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: [Bool]) =- FooList_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (FooList_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) FooList_0123456789876543210Sym1KindInference) ())- data FooList_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) [Bool] [Bool]- where- FooList_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (FooList_0123456789876543210Sym1 a0123456789876543210) arg) (FooList_0123456789876543210Sym2 a0123456789876543210 arg) =>- FooList_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (FooList_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = FooList_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FooList_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) FooList_0123456789876543210Sym0KindInference) ())- data FooList_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) [Bool] [Bool])- where- FooList_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FooList_0123456789876543210Sym0 arg) (FooList_0123456789876543210Sym1 arg) =>- FooList_0123456789876543210Sym0 a0123456789876543210- type instance Apply FooList_0123456789876543210Sym0 a0123456789876543210 = FooList_0123456789876543210Sym1 a0123456789876543210- class PFoo (a :: GHC.Types.Type) where- type FoosPrec (arg :: Nat) (arg :: a) (arg :: [Bool]) :: [Bool]- type FooList (arg :: a) (arg :: [Bool]) :: [Bool]- type FooList a a = Apply (Apply FooList_0123456789876543210Sym0 a) a- type family FoosPrec_0123456789876543210 (a :: Nat) (a :: [a]) (a :: [Bool]) :: [Bool] where- FoosPrec_0123456789876543210 _ a_0123456789876543210 a_0123456789876543210 = Apply (Apply FooListSym0 a_0123456789876543210) a_0123456789876543210- type FoosPrec_0123456789876543210Sym3 (a0123456789876543210 :: Nat) (a0123456789876543210 :: [a0123456789876543210]) (a0123456789876543210 :: [Bool]) =- FoosPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) FoosPrec_0123456789876543210Sym2KindInference) ())- data FoosPrec_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: [a0123456789876543210]) :: (~>) [Bool] [Bool]- where- FoosPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (FoosPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = FoosPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (FoosPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) FoosPrec_0123456789876543210Sym1KindInference) ())- data FoosPrec_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: forall a0123456789876543210.- (~>) [a0123456789876543210] ((~>) [Bool] [Bool])- where- FoosPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (FoosPrec_0123456789876543210Sym1 a0123456789876543210) arg) (FoosPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- FoosPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (FoosPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FoosPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) FoosPrec_0123456789876543210Sym0KindInference) ())- data FoosPrec_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) Nat ((~>) [a0123456789876543210] ((~>) [Bool] [Bool]))- where- FoosPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FoosPrec_0123456789876543210Sym0 arg) (FoosPrec_0123456789876543210Sym1 arg) =>- FoosPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply FoosPrec_0123456789876543210Sym0 a0123456789876543210 = FoosPrec_0123456789876543210Sym1 a0123456789876543210- instance PFoo [a] where- type FoosPrec a a a = Apply (Apply (Apply FoosPrec_0123456789876543210Sym0 a) a) a- class SFoo a where- sFoosPrec ::- forall (t :: Nat) (t :: a) (t :: [Bool]).- Sing t- -> Sing t- -> Sing t- -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])- sFooList ::- forall (t :: a) (t :: [Bool]).- Sing t -> Sing t -> Sing (Apply (Apply FooListSym0 t) t :: [Bool])- default sFooList ::- forall (t :: a) (t :: [Bool]).- (Apply (Apply FooListSym0 t) t :: [Bool])- ~ Apply (Apply FooList_0123456789876543210Sym0 t) t =>- Sing t -> Sing t -> Sing (Apply (Apply FooListSym0 t) t :: [Bool])- sFooList- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (sUndefined sA_0123456789876543210) sA_0123456789876543210- instance SFoo a => SFoo [a] where- sFoosPrec ::- forall (t :: Nat) (t :: [a]) (t :: [Bool]).- Sing t- -> Sing t- -> Sing t- -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])- sFoosPrec- _- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @FooListSym0) sFooList))- sA_0123456789876543210))- sA_0123456789876543210- instance SFoo a =>- SingI (FoosPrecSym0 :: (~>) Nat ((~>) a ((~>) [Bool] [Bool]))) where- sing = (singFun3 @FoosPrecSym0) sFoosPrec- instance (SFoo a, SingI d) =>- SingI (FoosPrecSym1 (d :: Nat) :: (~>) a ((~>) [Bool] [Bool])) where- sing = (singFun2 @(FoosPrecSym1 (d :: Nat))) (sFoosPrec (sing @d))- instance (SFoo a, SingI d, SingI d) =>- SingI (FoosPrecSym2 (d :: Nat) (d :: a) :: (~>) [Bool] [Bool]) where- sing- = (singFun1 @(FoosPrecSym2 (d :: Nat) (d :: a)))- ((sFoosPrec (sing @d)) (sing @d))- instance SFoo a =>- SingI (FooListSym0 :: (~>) a ((~>) [Bool] [Bool])) where- sing = (singFun2 @FooListSym0) sFooList- instance (SFoo a, SingI d) =>- SingI (FooListSym1 (d :: a) :: (~>) [Bool] [Bool]) where- sing = (singFun1 @(FooListSym1 (d :: a))) (sFooList (sing @d))
+ tests/compile-and-dump/Singletons/T167.ghc88.template view
@@ -0,0 +1,178 @@+Singletons/T167.hs:(0,0)-(0,0): Splicing declarations+ singletonsOnly+ [d| class Foo a where+ foosPrec :: Nat -> a -> DiffList+ fooList :: a -> DiffList+ fooList = undefined+ + instance Foo a => Foo [a] where+ foosPrec _ = fooList |]+ ======>+ type FoosPrecSym3 (arg0123456789876543210 :: Nat) (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: [Bool]) =+ FoosPrec arg0123456789876543210 arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FoosPrecSym2KindInference) ())+ data FoosPrecSym2 (arg0123456789876543210 :: Nat) (arg0123456789876543210 :: a0123456789876543210) :: (~>) [Bool] [Bool]+ where+ FoosPrecSym2KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) arg) (FoosPrecSym3 arg0123456789876543210 arg0123456789876543210 arg) =>+ FoosPrecSym2 arg0123456789876543210 arg0123456789876543210 arg0123456789876543210+ type instance Apply (FoosPrecSym2 arg0123456789876543210 arg0123456789876543210) arg0123456789876543210 = FoosPrec arg0123456789876543210 arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (FoosPrecSym1 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FoosPrecSym1KindInference) ())+ data FoosPrecSym1 (arg0123456789876543210 :: Nat) :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) [Bool] [Bool])+ where+ FoosPrecSym1KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (FoosPrecSym1 arg0123456789876543210) arg) (FoosPrecSym2 arg0123456789876543210 arg) =>+ FoosPrecSym1 arg0123456789876543210 arg0123456789876543210+ type instance Apply (FoosPrecSym1 arg0123456789876543210) arg0123456789876543210 = FoosPrecSym2 arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings FoosPrecSym0 where+ suppressUnusedWarnings = snd (((,) FoosPrecSym0KindInference) ())+ data FoosPrecSym0 :: forall a0123456789876543210.+ (~>) Nat ((~>) a0123456789876543210 ((~>) [Bool] [Bool]))+ where+ FoosPrecSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply FoosPrecSym0 arg) (FoosPrecSym1 arg) =>+ FoosPrecSym0 arg0123456789876543210+ type instance Apply FoosPrecSym0 arg0123456789876543210 = FoosPrecSym1 arg0123456789876543210+ type FooListSym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: [Bool]) =+ FooList arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (FooListSym1 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FooListSym1KindInference) ())+ data FooListSym1 (arg0123456789876543210 :: a0123456789876543210) :: (~>) [Bool] [Bool]+ where+ FooListSym1KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (FooListSym1 arg0123456789876543210) arg) (FooListSym2 arg0123456789876543210 arg) =>+ FooListSym1 arg0123456789876543210 arg0123456789876543210+ type instance Apply (FooListSym1 arg0123456789876543210) arg0123456789876543210 = FooList arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings FooListSym0 where+ suppressUnusedWarnings = snd (((,) FooListSym0KindInference) ())+ data FooListSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) [Bool] [Bool])+ where+ FooListSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply FooListSym0 arg) (FooListSym1 arg) =>+ FooListSym0 arg0123456789876543210+ type instance Apply FooListSym0 arg0123456789876543210 = FooListSym1 arg0123456789876543210+ type family FooList_0123456789876543210 (a :: a) (a :: [Bool]) :: [Bool] where+ FooList_0123456789876543210 a_0123456789876543210 a_0123456789876543210 = Apply (Apply UndefinedSym0 a_0123456789876543210) a_0123456789876543210+ type FooList_0123456789876543210Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: [Bool]) =+ FooList_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (FooList_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) FooList_0123456789876543210Sym1KindInference) ())+ data FooList_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) :: (~>) [Bool] [Bool]+ where+ FooList_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (FooList_0123456789876543210Sym1 a0123456789876543210) arg) (FooList_0123456789876543210Sym2 a0123456789876543210 arg) =>+ FooList_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (FooList_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = FooList_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FooList_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) FooList_0123456789876543210Sym0KindInference) ())+ data FooList_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) [Bool] [Bool])+ where+ FooList_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FooList_0123456789876543210Sym0 arg) (FooList_0123456789876543210Sym1 arg) =>+ FooList_0123456789876543210Sym0 a0123456789876543210+ type instance Apply FooList_0123456789876543210Sym0 a0123456789876543210 = FooList_0123456789876543210Sym1 a0123456789876543210+ class PFoo (a :: GHC.Types.Type) where+ type FoosPrec (arg :: Nat) (arg :: a) (arg :: [Bool]) :: [Bool]+ type FooList (arg :: a) (arg :: [Bool]) :: [Bool]+ type FooList a a = Apply (Apply FooList_0123456789876543210Sym0 a) a+ type family FoosPrec_0123456789876543210 (a :: Nat) (a :: [a]) (a :: [Bool]) :: [Bool] where+ FoosPrec_0123456789876543210 _ a_0123456789876543210 a_0123456789876543210 = Apply (Apply FooListSym0 a_0123456789876543210) a_0123456789876543210+ type FoosPrec_0123456789876543210Sym3 (a0123456789876543210 :: Nat) (a0123456789876543210 :: [a0123456789876543210]) (a0123456789876543210 :: [Bool]) =+ FoosPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) FoosPrec_0123456789876543210Sym2KindInference) ())+ data FoosPrec_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: [a0123456789876543210]) :: (~>) [Bool] [Bool]+ where+ FoosPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (FoosPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = FoosPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (FoosPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) FoosPrec_0123456789876543210Sym1KindInference) ())+ data FoosPrec_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: forall a0123456789876543210.+ (~>) [a0123456789876543210] ((~>) [Bool] [Bool])+ where+ FoosPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (FoosPrec_0123456789876543210Sym1 a0123456789876543210) arg) (FoosPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ FoosPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (FoosPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = FoosPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FoosPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) FoosPrec_0123456789876543210Sym0KindInference) ())+ data FoosPrec_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) Nat ((~>) [a0123456789876543210] ((~>) [Bool] [Bool]))+ where+ FoosPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FoosPrec_0123456789876543210Sym0 arg) (FoosPrec_0123456789876543210Sym1 arg) =>+ FoosPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply FoosPrec_0123456789876543210Sym0 a0123456789876543210 = FoosPrec_0123456789876543210Sym1 a0123456789876543210+ instance PFoo [a] where+ type FoosPrec a a a = Apply (Apply (Apply FoosPrec_0123456789876543210Sym0 a) a) a+ class SFoo a where+ sFoosPrec ::+ forall (t :: Nat) (t :: a) (t :: [Bool]).+ Sing t+ -> Sing t+ -> Sing t+ -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])+ sFooList ::+ forall (t :: a) (t :: [Bool]).+ Sing t -> Sing t -> Sing (Apply (Apply FooListSym0 t) t :: [Bool])+ default sFooList ::+ forall (t :: a) (t :: [Bool]).+ ((Apply (Apply FooListSym0 t) t :: [Bool])+ ~ Apply (Apply FooList_0123456789876543210Sym0 t) t) =>+ Sing t -> Sing t -> Sing (Apply (Apply FooListSym0 t) t :: [Bool])+ sFooList+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (sUndefined sA_0123456789876543210) sA_0123456789876543210+ instance SFoo a => SFoo [a] where+ sFoosPrec ::+ forall (t :: Nat) (t :: [a]) (t :: [Bool]).+ Sing t+ -> Sing t+ -> Sing t+ -> Sing (Apply (Apply (Apply FoosPrecSym0 t) t) t :: [Bool])+ sFoosPrec+ _+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @FooListSym0) sFooList))+ sA_0123456789876543210))+ sA_0123456789876543210+ instance SFoo a =>+ SingI (FoosPrecSym0 :: (~>) Nat ((~>) a ((~>) [Bool] [Bool]))) where+ sing = (singFun3 @FoosPrecSym0) sFoosPrec+ instance (SFoo a, SingI d) =>+ SingI (FoosPrecSym1 (d :: Nat) :: (~>) a ((~>) [Bool] [Bool])) where+ sing = (singFun2 @(FoosPrecSym1 (d :: Nat))) (sFoosPrec (sing @d))+ instance (SFoo a, SingI d, SingI d) =>+ SingI (FoosPrecSym2 (d :: Nat) (d :: a) :: (~>) [Bool] [Bool]) where+ sing+ = (singFun1 @(FoosPrecSym2 (d :: Nat) (d :: a)))+ ((sFoosPrec (sing @d)) (sing @d))+ instance SFoo a =>+ SingI (FooListSym0 :: (~>) a ((~>) [Bool] [Bool])) where+ sing = (singFun2 @FooListSym0) sFooList+ instance (SFoo a, SingI d) =>+ SingI (FooListSym1 (d :: a) :: (~>) [Bool] [Bool]) where+ sing = (singFun1 @(FooListSym1 (d :: a))) (sFooList (sing @d))
− tests/compile-and-dump/Singletons/T172.ghc86.template
@@ -1,40 +0,0 @@-Singletons/T172.hs:(0,0)-(0,0): Splicing declarations- singletonsOnly- [d| ($>) :: Nat -> Nat -> Nat- ($>) = (+) |]- ======>- type ($>@#@$$$) (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =- ($>) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (($>@#@$$) a0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:$>@#@$$###)) ())- data ($>@#@$$) (a0123456789876543210 :: Nat) :: (~>) Nat Nat- where- (:$>@#@$$###) :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (($>@#@$$) a0123456789876543210) arg) (($>@#@$$$) a0123456789876543210 arg) =>- ($>@#@$$) a0123456789876543210 a0123456789876543210- type instance Apply (($>@#@$$) a0123456789876543210) a0123456789876543210 = ($>) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ($>@#@$) where- suppressUnusedWarnings = snd (((,) (:$>@#@$###)) ())- data ($>@#@$) :: (~>) Nat ((~>) Nat Nat)- where- (:$>@#@$###) :: forall a0123456789876543210- arg. SameKind (Apply ($>@#@$) arg) (($>@#@$$) arg) =>- ($>@#@$) a0123456789876543210- type instance Apply ($>@#@$) a0123456789876543210 = ($>@#@$$) a0123456789876543210- type family ($>) (a :: Nat) (a :: Nat) :: Nat where- ($>) a_0123456789876543210 a_0123456789876543210 = Apply (Apply (+@#@$) a_0123456789876543210) a_0123456789876543210- (%$>) ::- forall (t :: Nat) (t :: Nat).- Sing t -> Sing t -> Sing (Apply (Apply ($>@#@$) t) t :: Nat)- (%$>)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @(+@#@$)) (%+))) sA_0123456789876543210))- sA_0123456789876543210- instance SingI (($>@#@$) :: (~>) Nat ((~>) Nat Nat)) where- sing = (singFun2 @($>@#@$)) (%$>)- instance SingI d =>- SingI (($>@#@$$) (d :: Nat) :: (~>) Nat Nat) where- sing = (singFun1 @(($>@#@$$) (d :: Nat))) ((%$>) (sing @d))
+ tests/compile-and-dump/Singletons/T172.ghc88.template view
@@ -0,0 +1,40 @@+Singletons/T172.hs:(0,0)-(0,0): Splicing declarations+ singletonsOnly+ [d| ($>) :: Nat -> Nat -> Nat+ ($>) = (+) |]+ ======>+ type ($>@#@$$$) (a0123456789876543210 :: Nat) (a0123456789876543210 :: Nat) =+ ($>) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (($>@#@$$) a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:$>@#@$$###)) ())+ data ($>@#@$$) (a0123456789876543210 :: Nat) :: (~>) Nat Nat+ where+ (:$>@#@$$###) :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (($>@#@$$) a0123456789876543210) arg) (($>@#@$$$) a0123456789876543210 arg) =>+ ($>@#@$$) a0123456789876543210 a0123456789876543210+ type instance Apply (($>@#@$$) a0123456789876543210) a0123456789876543210 = ($>) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ($>@#@$) where+ suppressUnusedWarnings = snd (((,) (:$>@#@$###)) ())+ data ($>@#@$) :: (~>) Nat ((~>) Nat Nat)+ where+ (:$>@#@$###) :: forall a0123456789876543210+ arg. SameKind (Apply ($>@#@$) arg) (($>@#@$$) arg) =>+ ($>@#@$) a0123456789876543210+ type instance Apply ($>@#@$) a0123456789876543210 = ($>@#@$$) a0123456789876543210+ type family ($>) (a :: Nat) (a :: Nat) :: Nat where+ ($>) a_0123456789876543210 a_0123456789876543210 = Apply (Apply (+@#@$) a_0123456789876543210) a_0123456789876543210+ (%$>) ::+ forall (t :: Nat) (t :: Nat).+ Sing t -> Sing t -> Sing (Apply (Apply ($>@#@$) t) t :: Nat)+ (%$>)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @(+@#@$)) (%+))) sA_0123456789876543210))+ sA_0123456789876543210+ instance SingI (($>@#@$) :: (~>) Nat ((~>) Nat Nat)) where+ sing = (singFun2 @($>@#@$)) (%$>)+ instance SingI d =>+ SingI (($>@#@$$) (d :: Nat) :: (~>) Nat Nat) where+ sing = (singFun1 @(($>@#@$$) (d :: Nat))) ((%$>) (sing @d))
− tests/compile-and-dump/Singletons/T175.ghc86.template
@@ -1,45 +0,0 @@-Singletons/T175.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| quux2 :: Bar2 a => a- quux2 = baz- - class Foo a where- baz :: a- class Foo a => Bar1 a where- quux1 :: a- quux1 = baz- class Foo a => Bar2 a |]- ======>- class Foo a where- baz :: a- class Foo a => Bar1 a where- quux1 :: a- quux1 = baz- class Foo a => Bar2 a- quux2 :: Bar2 a => a- quux2 = baz- type Quux2Sym0 = Quux2- type family Quux2 :: a where- Quux2 = BazSym0- type BazSym0 = Baz- class PFoo (a :: GHC.Types.Type) where- type Baz :: a- type Quux1Sym0 = Quux1- type family Quux1_0123456789876543210 :: a where- Quux1_0123456789876543210 = BazSym0- type Quux1_0123456789876543210Sym0 = Quux1_0123456789876543210- class PFoo a => PBar1 (a :: GHC.Types.Type) where- type Quux1 :: a- type Quux1 = Quux1_0123456789876543210Sym0- class PFoo a => PBar2 (a :: GHC.Types.Type)- sQuux2 :: forall a. SBar2 a => Sing (Quux2Sym0 :: a)- sQuux2 = sBaz- class SFoo a where- sBaz :: Sing (BazSym0 :: a)- class SFoo a => SBar1 a where- sQuux1 :: Sing (Quux1Sym0 :: a)- default sQuux1 ::- (Quux1Sym0 :: a) ~ Quux1_0123456789876543210Sym0 =>- Sing (Quux1Sym0 :: a)- sQuux1 = sBaz- class SFoo a => SBar2 a
+ tests/compile-and-dump/Singletons/T175.ghc88.template view
@@ -0,0 +1,45 @@+Singletons/T175.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| quux2 :: Bar2 a => a+ quux2 = baz+ + class Foo a where+ baz :: a+ class Foo a => Bar1 a where+ quux1 :: a+ quux1 = baz+ class Foo a => Bar2 a |]+ ======>+ class Foo a where+ baz :: a+ class Foo a => Bar1 a where+ quux1 :: a+ quux1 = baz+ class Foo a => Bar2 a+ quux2 :: Bar2 a => a+ quux2 = baz+ type Quux2Sym0 = Quux2+ type family Quux2 :: a where+ Quux2 = BazSym0+ type BazSym0 = Baz+ class PFoo (a :: GHC.Types.Type) where+ type Baz :: a+ type Quux1Sym0 = Quux1+ type family Quux1_0123456789876543210 :: a where+ Quux1_0123456789876543210 = BazSym0+ type Quux1_0123456789876543210Sym0 = Quux1_0123456789876543210+ class PBar1 (a :: GHC.Types.Type) where+ type Quux1 :: a+ type Quux1 = Quux1_0123456789876543210Sym0+ class PBar2 (a :: GHC.Types.Type)+ sQuux2 :: forall a. SBar2 a => Sing (Quux2Sym0 :: a)+ sQuux2 = sBaz+ class SFoo a where+ sBaz :: Sing (BazSym0 :: a)+ class SFoo a => SBar1 a where+ sQuux1 :: Sing (Quux1Sym0 :: a)+ default sQuux1 ::+ ((Quux1Sym0 :: a) ~ Quux1_0123456789876543210Sym0) =>+ Sing (Quux1Sym0 :: a)+ sQuux1 = sBaz+ class SFoo a => SBar2 a
− tests/compile-and-dump/Singletons/T176.ghc86.template
@@ -1,166 +0,0 @@-Singletons/T176.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| quux1 :: Foo1 a => a -> a- quux1 x = x `bar1` \ _ -> baz1- quux2 :: Foo2 a => a -> a- quux2 x = x `bar2` baz2- - class Foo1 a where- bar1 :: a -> (a -> b) -> b- baz1 :: a- class Foo2 a where- bar2 :: a -> b -> b- baz2 :: a |]- ======>- class Foo1 a where- bar1 :: a -> (a -> b) -> b- baz1 :: a- quux1 :: Foo1 a => a -> a- quux1 x = (x `bar1` (\ _ -> baz1))- class Foo2 a where- bar2 :: a -> b -> b- baz2 :: a- quux2 :: Foo2 a => a -> a- quux2 x = (x `bar2` baz2)- type family Case_0123456789876543210 x arg_0123456789876543210 t where- Case_0123456789876543210 x arg_0123456789876543210 _ = Baz1Sym0- type family Lambda_0123456789876543210 x t where- Lambda_0123456789876543210 x arg_0123456789876543210 = Case_0123456789876543210 x arg_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym2 x0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 x0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 x0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210- type Quux2Sym1 (a0123456789876543210 :: a0123456789876543210) =- Quux2 a0123456789876543210- instance SuppressUnusedWarnings Quux2Sym0 where- suppressUnusedWarnings = snd (((,) Quux2Sym0KindInference) ())- data Quux2Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- Quux2Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Quux2Sym0 arg) (Quux2Sym1 arg) =>- Quux2Sym0 a0123456789876543210- type instance Apply Quux2Sym0 a0123456789876543210 = Quux2 a0123456789876543210- type Quux1Sym1 (a0123456789876543210 :: a0123456789876543210) =- Quux1 a0123456789876543210- instance SuppressUnusedWarnings Quux1Sym0 where- suppressUnusedWarnings = snd (((,) Quux1Sym0KindInference) ())- data Quux1Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- Quux1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Quux1Sym0 arg) (Quux1Sym1 arg) =>- Quux1Sym0 a0123456789876543210- type instance Apply Quux1Sym0 a0123456789876543210 = Quux1 a0123456789876543210- type family Quux2 (a :: a) :: a where- Quux2 x = Apply (Apply Bar2Sym0 x) Baz2Sym0- type family Quux1 (a :: a) :: a where- Quux1 x = Apply (Apply Bar1Sym0 x) (Apply Lambda_0123456789876543210Sym0 x)- type Bar1Sym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) =- Bar1 arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (Bar1Sym1 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) Bar1Sym1KindInference) ())- data Bar1Sym1 (arg0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) ((~>) a0123456789876543210 b0123456789876543210) b0123456789876543210- where- Bar1Sym1KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (Bar1Sym1 arg0123456789876543210) arg) (Bar1Sym2 arg0123456789876543210 arg) =>- Bar1Sym1 arg0123456789876543210 arg0123456789876543210- type instance Apply (Bar1Sym1 arg0123456789876543210) arg0123456789876543210 = Bar1 arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings Bar1Sym0 where- suppressUnusedWarnings = snd (((,) Bar1Sym0KindInference) ())- data Bar1Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) ((~>) a0123456789876543210 b0123456789876543210) b0123456789876543210)- where- Bar1Sym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply Bar1Sym0 arg) (Bar1Sym1 arg) =>- Bar1Sym0 arg0123456789876543210- type instance Apply Bar1Sym0 arg0123456789876543210 = Bar1Sym1 arg0123456789876543210- type Baz1Sym0 = Baz1- class PFoo1 (a :: Type) where- type Bar1 (arg :: a) (arg :: (~>) a b) :: b- type Baz1 :: a- type Bar2Sym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: b0123456789876543210) =- Bar2 arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (Bar2Sym1 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) Bar2Sym1KindInference) ())- data Bar2Sym1 (arg0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 b0123456789876543210- where- Bar2Sym1KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (Bar2Sym1 arg0123456789876543210) arg) (Bar2Sym2 arg0123456789876543210 arg) =>- Bar2Sym1 arg0123456789876543210 arg0123456789876543210- type instance Apply (Bar2Sym1 arg0123456789876543210) arg0123456789876543210 = Bar2 arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings Bar2Sym0 where- suppressUnusedWarnings = snd (((,) Bar2Sym0KindInference) ())- data Bar2Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)- where- Bar2Sym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply Bar2Sym0 arg) (Bar2Sym1 arg) =>- Bar2Sym0 arg0123456789876543210- type instance Apply Bar2Sym0 arg0123456789876543210 = Bar2Sym1 arg0123456789876543210- type Baz2Sym0 = Baz2- class PFoo2 (a :: Type) where- type Bar2 (arg :: a) (arg :: b) :: b- type Baz2 :: a- sQuux2 ::- forall a (t :: a).- SFoo2 a => Sing t -> Sing (Apply Quux2Sym0 t :: a)- sQuux1 ::- forall a (t :: a).- SFoo1 a => Sing t -> Sing (Apply Quux1Sym0 t :: a)- sQuux2 (sX :: Sing x)- = (applySing ((applySing ((singFun2 @Bar2Sym0) sBar2)) sX)) sBaz2- sQuux1 (sX :: Sing x)- = (applySing ((applySing ((singFun2 @Bar1Sym0) sBar1)) sX))- ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of { _ -> sBaz1 }) ::- Sing (Case_0123456789876543210 x arg_0123456789876543210 arg_0123456789876543210) }))- instance SFoo2 a => SingI (Quux2Sym0 :: (~>) a a) where- sing = (singFun1 @Quux2Sym0) sQuux2- instance SFoo1 a => SingI (Quux1Sym0 :: (~>) a a) where- sing = (singFun1 @Quux1Sym0) sQuux1- class SFoo1 a where- sBar1 ::- forall b (t :: a) (t :: (~>) a b).- Sing t -> Sing t -> Sing (Apply (Apply Bar1Sym0 t) t :: b)- sBaz1 :: Sing (Baz1Sym0 :: a)- class SFoo2 a where- sBar2 ::- forall b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply Bar2Sym0 t) t :: b)- sBaz2 :: Sing (Baz2Sym0 :: a)- instance SFoo1 a =>- SingI (Bar1Sym0 :: (~>) a ((~>) ((~>) a b) b)) where- sing = (singFun2 @Bar1Sym0) sBar1- instance (SFoo1 a, SingI d) =>- SingI (Bar1Sym1 (d :: a) :: (~>) ((~>) a b) b) where- sing = (singFun1 @(Bar1Sym1 (d :: a))) (sBar1 (sing @d))- instance SFoo2 a => SingI (Bar2Sym0 :: (~>) a ((~>) b b)) where- sing = (singFun2 @Bar2Sym0) sBar2- instance (SFoo2 a, SingI d) =>- SingI (Bar2Sym1 (d :: a) :: (~>) b b) where- sing = (singFun1 @(Bar2Sym1 (d :: a))) (sBar2 (sing @d))
+ tests/compile-and-dump/Singletons/T176.ghc88.template view
@@ -0,0 +1,167 @@+Singletons/T176.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| quux1 :: Foo1 a => a -> a+ quux1 x = x `bar1` \ _ -> baz1+ quux2 :: Foo2 a => a -> a+ quux2 x = x `bar2` baz2+ + class Foo1 a where+ bar1 :: a -> (a -> b) -> b+ baz1 :: a+ class Foo2 a where+ bar2 :: a -> b -> b+ baz2 :: a |]+ ======>+ class Foo1 a where+ bar1 :: a -> (a -> b) -> b+ baz1 :: a+ quux1 :: Foo1 a => a -> a+ quux1 x = (x `bar1` (\ _ -> baz1))+ class Foo2 a where+ bar2 :: a -> b -> b+ baz2 :: a+ quux2 :: Foo2 a => a -> a+ quux2 x = (x `bar2` baz2)+ type family Case_0123456789876543210 arg_0123456789876543210 x t where+ Case_0123456789876543210 arg_0123456789876543210 x _ = Baz1Sym0+ type family Lambda_0123456789876543210 x t where+ Lambda_0123456789876543210 x arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 x arg_0123456789876543210+ type Lambda_0123456789876543210Sym2 x0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type Quux2Sym1 (a0123456789876543210 :: a0123456789876543210) =+ Quux2 a0123456789876543210+ instance SuppressUnusedWarnings Quux2Sym0 where+ suppressUnusedWarnings = snd (((,) Quux2Sym0KindInference) ())+ data Quux2Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ Quux2Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Quux2Sym0 arg) (Quux2Sym1 arg) =>+ Quux2Sym0 a0123456789876543210+ type instance Apply Quux2Sym0 a0123456789876543210 = Quux2 a0123456789876543210+ type Quux1Sym1 (a0123456789876543210 :: a0123456789876543210) =+ Quux1 a0123456789876543210+ instance SuppressUnusedWarnings Quux1Sym0 where+ suppressUnusedWarnings = snd (((,) Quux1Sym0KindInference) ())+ data Quux1Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ Quux1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Quux1Sym0 arg) (Quux1Sym1 arg) =>+ Quux1Sym0 a0123456789876543210+ type instance Apply Quux1Sym0 a0123456789876543210 = Quux1 a0123456789876543210+ type family Quux2 (a :: a) :: a where+ Quux2 x = Apply (Apply Bar2Sym0 x) Baz2Sym0+ type family Quux1 (a :: a) :: a where+ Quux1 x = Apply (Apply Bar1Sym0 x) (Apply Lambda_0123456789876543210Sym0 x)+ type Bar1Sym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) =+ Bar1 arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (Bar1Sym1 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Bar1Sym1KindInference) ())+ data Bar1Sym1 (arg0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) ((~>) a0123456789876543210 b0123456789876543210) b0123456789876543210+ where+ Bar1Sym1KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (Bar1Sym1 arg0123456789876543210) arg) (Bar1Sym2 arg0123456789876543210 arg) =>+ Bar1Sym1 arg0123456789876543210 arg0123456789876543210+ type instance Apply (Bar1Sym1 arg0123456789876543210) arg0123456789876543210 = Bar1 arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings Bar1Sym0 where+ suppressUnusedWarnings = snd (((,) Bar1Sym0KindInference) ())+ data Bar1Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) ((~>) a0123456789876543210 b0123456789876543210) b0123456789876543210)+ where+ Bar1Sym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply Bar1Sym0 arg) (Bar1Sym1 arg) =>+ Bar1Sym0 arg0123456789876543210+ type instance Apply Bar1Sym0 arg0123456789876543210 = Bar1Sym1 arg0123456789876543210+ type Baz1Sym0 = Baz1+ class PFoo1 (a :: Type) where+ type Bar1 (arg :: a) (arg :: (~>) a b) :: b+ type Baz1 :: a+ type Bar2Sym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: b0123456789876543210) =+ Bar2 arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (Bar2Sym1 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Bar2Sym1KindInference) ())+ data Bar2Sym1 (arg0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 b0123456789876543210+ where+ Bar2Sym1KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (Bar2Sym1 arg0123456789876543210) arg) (Bar2Sym2 arg0123456789876543210 arg) =>+ Bar2Sym1 arg0123456789876543210 arg0123456789876543210+ type instance Apply (Bar2Sym1 arg0123456789876543210) arg0123456789876543210 = Bar2 arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings Bar2Sym0 where+ suppressUnusedWarnings = snd (((,) Bar2Sym0KindInference) ())+ data Bar2Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)+ where+ Bar2Sym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply Bar2Sym0 arg) (Bar2Sym1 arg) =>+ Bar2Sym0 arg0123456789876543210+ type instance Apply Bar2Sym0 arg0123456789876543210 = Bar2Sym1 arg0123456789876543210+ type Baz2Sym0 = Baz2+ class PFoo2 (a :: Type) where+ type Bar2 (arg :: a) (arg :: b) :: b+ type Baz2 :: a+ sQuux2 ::+ forall a (t :: a).+ SFoo2 a => Sing t -> Sing (Apply Quux2Sym0 t :: a)+ sQuux1 ::+ forall a (t :: a).+ SFoo1 a => Sing t -> Sing (Apply Quux1Sym0 t :: a)+ sQuux2 (sX :: Sing x)+ = (applySing ((applySing ((singFun2 @Bar2Sym0) sBar2)) sX)) sBaz2+ sQuux1 (sX :: Sing x)+ = (applySing ((applySing ((singFun2 @Bar1Sym0) sBar1)) sX))+ ((singFun1 @(Apply Lambda_0123456789876543210Sym0 x))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 x arg_0123456789876543210)))+ (case sArg_0123456789876543210 of { _ -> sBaz1 }) }))+ instance SFoo2 a => SingI (Quux2Sym0 :: (~>) a a) where+ sing = (singFun1 @Quux2Sym0) sQuux2+ instance SFoo1 a => SingI (Quux1Sym0 :: (~>) a a) where+ sing = (singFun1 @Quux1Sym0) sQuux1+ class SFoo1 a where+ sBar1 ::+ forall b (t :: a) (t :: (~>) a b).+ Sing t -> Sing t -> Sing (Apply (Apply Bar1Sym0 t) t :: b)+ sBaz1 :: Sing (Baz1Sym0 :: a)+ class SFoo2 a where+ sBar2 ::+ forall b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Bar2Sym0 t) t :: b)+ sBaz2 :: Sing (Baz2Sym0 :: a)+ instance SFoo1 a =>+ SingI (Bar1Sym0 :: (~>) a ((~>) ((~>) a b) b)) where+ sing = (singFun2 @Bar1Sym0) sBar1+ instance (SFoo1 a, SingI d) =>+ SingI (Bar1Sym1 (d :: a) :: (~>) ((~>) a b) b) where+ sing = (singFun1 @(Bar1Sym1 (d :: a))) (sBar1 (sing @d))+ instance SFoo2 a => SingI (Bar2Sym0 :: (~>) a ((~>) b b)) where+ sing = (singFun2 @Bar2Sym0) sBar2+ instance (SFoo2 a, SingI d) =>+ SingI (Bar2Sym1 (d :: a) :: (~>) b b) where+ sing = (singFun1 @(Bar2Sym1 (d :: a))) (sBar2 (sing @d))
− tests/compile-and-dump/Singletons/T178.ghc86.template
@@ -1,210 +0,0 @@-Singletons/T178.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| empty :: U- empty = []- - data Occ- = Str | Opt | Many- deriving (Eq, Ord, Show)- type U = [(Symbol, Occ)] |]- ======>- data Occ- = Str | Opt | Many- deriving (Eq, Ord, Show)- type U = [(Symbol, Occ)]- empty :: U- empty = []- type USym0 = U- type StrSym0 = Str- type OptSym0 = Opt- type ManySym0 = Many- type EmptySym0 = Empty- type family Empty :: [(Symbol, Occ)] where- Empty = '[]- type family Compare_0123456789876543210 (a :: Occ) (a :: Occ) :: Ordering where- Compare_0123456789876543210 Str Str = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 Opt Opt = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 Many Many = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- Compare_0123456789876543210 Str Opt = LTSym0- Compare_0123456789876543210 Str Many = LTSym0- Compare_0123456789876543210 Opt Str = GTSym0- Compare_0123456789876543210 Opt Many = LTSym0- Compare_0123456789876543210 Many Str = GTSym0- Compare_0123456789876543210 Many Opt = GTSym0- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Occ) (a0123456789876543210 :: Occ) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Occ) :: (~>) Occ Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: (~>) Occ ((~>) Occ Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd Occ where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family ShowsPrec_0123456789876543210 (a :: Nat) (a :: Occ) (a :: Symbol) :: Symbol where- ShowsPrec_0123456789876543210 _ Str a_0123456789876543210 = Apply (Apply ShowStringSym0 "Str") a_0123456789876543210- ShowsPrec_0123456789876543210 _ Opt a_0123456789876543210 = Apply (Apply ShowStringSym0 "Opt") a_0123456789876543210- ShowsPrec_0123456789876543210 _ Many a_0123456789876543210 = Apply (Apply ShowStringSym0 "Many") a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Occ) (a0123456789876543210 :: Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Occ) :: (~>) Symbol Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Occ ((~>) Symbol Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: (~>) Nat ((~>) Occ ((~>) Symbol Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow Occ where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family Equals_0123456789876543210 (a :: Occ) (b :: Occ) :: Bool where- Equals_0123456789876543210 Str Str = TrueSym0- Equals_0123456789876543210 Opt Opt = TrueSym0- Equals_0123456789876543210 Many Many = TrueSym0- Equals_0123456789876543210 (_ :: Occ) (_ :: Occ) = FalseSym0- instance PEq Occ where- type (==) a b = Equals_0123456789876543210 a b- sEmpty :: Sing (EmptySym0 :: [(Symbol, Occ)])- sEmpty = Data.Singletons.Prelude.Instances.SNil- data instance Sing :: Occ -> GHC.Types.Type- where- SStr :: Sing Str- SOpt :: Sing Opt- SMany :: Sing Many- type SOcc = (Sing :: Occ -> GHC.Types.Type)- instance SingKind Occ where- type Demote Occ = Occ- fromSing SStr = Str- fromSing SOpt = Opt- fromSing SMany = Many- toSing Str = SomeSing SStr- toSing Opt = SomeSing SOpt- toSing Many = SomeSing SMany- instance SOrd Occ where- sCompare ::- forall (t1 :: Occ) (t2 :: Occ).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun Occ ((~>) Occ Ordering)- -> GHC.Types.Type) t1) t2)- sCompare SStr SStr- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- Data.Singletons.Prelude.Instances.SNil- sCompare SOpt SOpt- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- Data.Singletons.Prelude.Instances.SNil- sCompare SMany SMany- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- Data.Singletons.Prelude.Instances.SNil- sCompare SStr SOpt = SLT- sCompare SStr SMany = SLT- sCompare SOpt SStr = SGT- sCompare SOpt SMany = SLT- sCompare SMany SStr = SGT- sCompare SMany SOpt = SGT- instance SShow Occ where- sShowsPrec ::- forall (t1 :: Nat) (t2 :: Occ) (t3 :: Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun Nat ((~>) Occ ((~>) Symbol Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- _- SStr- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Str")))- sA_0123456789876543210- sShowsPrec- _- SOpt- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Opt")))- sA_0123456789876543210- sShowsPrec- _- SMany- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Many")))- sA_0123456789876543210- instance SEq Occ where- (%==) SStr SStr = STrue- (%==) SStr SOpt = SFalse- (%==) SStr SMany = SFalse- (%==) SOpt SStr = SFalse- (%==) SOpt SOpt = STrue- (%==) SOpt SMany = SFalse- (%==) SMany SStr = SFalse- (%==) SMany SOpt = SFalse- (%==) SMany SMany = STrue- instance SDecide Occ where- (%~) SStr SStr = Proved Refl- (%~) SStr SOpt = Disproved (\ x -> case x of)- (%~) SStr SMany = Disproved (\ x -> case x of)- (%~) SOpt SStr = Disproved (\ x -> case x of)- (%~) SOpt SOpt = Proved Refl- (%~) SOpt SMany = Disproved (\ x -> case x of)- (%~) SMany SStr = Disproved (\ x -> case x of)- (%~) SMany SOpt = Disproved (\ x -> case x of)- (%~) SMany SMany = Proved Refl- deriving instance Show (Sing (z :: Occ))- instance SingI Str where- sing = SStr- instance SingI Opt where- sing = SOpt- instance SingI Many where- sing = SMany
+ tests/compile-and-dump/Singletons/T178.ghc88.template view
@@ -0,0 +1,221 @@+Singletons/T178.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| empty :: U+ empty = []+ + data Occ+ = Str | Opt | Many+ deriving (Eq, Ord, Show)+ type U = [(Symbol, Occ)] |]+ ======>+ data Occ+ = Str | Opt | Many+ deriving (Eq, Ord, Show)+ type U = [(Symbol, Occ)]+ empty :: U+ empty = []+ type USym0 = U+ type StrSym0 = Str+ type OptSym0 = Opt+ type ManySym0 = Many+ type EmptySym0 = Empty+ type family Empty :: [(Symbol, Occ)] where+ Empty = '[]+ type family Compare_0123456789876543210 (a :: Occ) (a :: Occ) :: Ordering where+ Compare_0123456789876543210 Str Str = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 Opt Opt = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 Many Many = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ Compare_0123456789876543210 Str Opt = LTSym0+ Compare_0123456789876543210 Str Many = LTSym0+ Compare_0123456789876543210 Opt Str = GTSym0+ Compare_0123456789876543210 Opt Many = LTSym0+ Compare_0123456789876543210 Many Str = GTSym0+ Compare_0123456789876543210 Many Opt = GTSym0+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Occ) (a0123456789876543210 :: Occ) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Occ) :: (~>) Occ Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: (~>) Occ ((~>) Occ Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd Occ where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family ShowsPrec_0123456789876543210 (a :: Nat) (a :: Occ) (a :: Symbol) :: Symbol where+ ShowsPrec_0123456789876543210 _ Str a_0123456789876543210 = Apply (Apply ShowStringSym0 "Str") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ Opt a_0123456789876543210 = Apply (Apply ShowStringSym0 "Opt") a_0123456789876543210+ ShowsPrec_0123456789876543210 _ Many a_0123456789876543210 = Apply (Apply ShowStringSym0 "Many") a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Occ) (a0123456789876543210 :: Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: Nat) (a0123456789876543210 :: Occ) :: (~>) Symbol Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: Nat) :: (~>) Occ ((~>) Symbol Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: (~>) Nat ((~>) Occ ((~>) Symbol Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow Occ where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family Equals_0123456789876543210 (a :: Occ) (b :: Occ) :: Bool where+ Equals_0123456789876543210 Str Str = TrueSym0+ Equals_0123456789876543210 Opt Opt = TrueSym0+ Equals_0123456789876543210 Many Many = TrueSym0+ Equals_0123456789876543210 (_ :: Occ) (_ :: Occ) = FalseSym0+ instance PEq Occ where+ type (==) a b = Equals_0123456789876543210 a b+ sEmpty :: Sing (EmptySym0 :: [(Symbol, Occ)])+ sEmpty = Data.Singletons.Prelude.Instances.SNil+ data SOcc :: Occ -> GHC.Types.Type+ where+ SStr :: SOcc Str+ SOpt :: SOcc Opt+ SMany :: SOcc Many+ type instance Sing @Occ = SOcc+ instance SingKind Occ where+ type Demote Occ = Occ+ fromSing SStr = Str+ fromSing SOpt = Opt+ fromSing SMany = Many+ toSing Str = SomeSing SStr+ toSing Opt = SomeSing SOpt+ toSing Many = SomeSing SMany+ instance SOrd Occ where+ sCompare ::+ forall (t1 :: Occ) (t2 :: Occ).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun Occ ((~>) Occ Ordering)+ -> GHC.Types.Type) t1) t2)+ sCompare SStr SStr+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ Data.Singletons.Prelude.Instances.SNil+ sCompare SOpt SOpt+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ Data.Singletons.Prelude.Instances.SNil+ sCompare SMany SMany+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ Data.Singletons.Prelude.Instances.SNil+ sCompare SStr SOpt = SLT+ sCompare SStr SMany = SLT+ sCompare SOpt SStr = SGT+ sCompare SOpt SMany = SLT+ sCompare SMany SStr = SGT+ sCompare SMany SOpt = SGT+ instance SShow Occ where+ sShowsPrec ::+ forall (t1 :: Nat) (t2 :: Occ) (t3 :: Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun Nat ((~>) Occ ((~>) Symbol Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ _+ SStr+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Str")))+ sA_0123456789876543210+ sShowsPrec+ _+ SOpt+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Opt")))+ sA_0123456789876543210+ sShowsPrec+ _+ SMany+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Many")))+ sA_0123456789876543210+ instance SEq Occ where+ (%==) SStr SStr = STrue+ (%==) SStr SOpt = SFalse+ (%==) SStr SMany = SFalse+ (%==) SOpt SStr = SFalse+ (%==) SOpt SOpt = STrue+ (%==) SOpt SMany = SFalse+ (%==) SMany SStr = SFalse+ (%==) SMany SOpt = SFalse+ (%==) SMany SMany = STrue+ instance SDecide Occ where+ (%~) SStr SStr = Proved Refl+ (%~) SStr SOpt = Disproved (\ x -> case x of)+ (%~) SStr SMany = Disproved (\ x -> case x of)+ (%~) SOpt SStr = Disproved (\ x -> case x of)+ (%~) SOpt SOpt = Proved Refl+ (%~) SOpt SMany = Disproved (\ x -> case x of)+ (%~) SMany SStr = Disproved (\ x -> case x of)+ (%~) SMany SOpt = Disproved (\ x -> case x of)+ (%~) SMany SMany = Proved Refl+ instance Data.Type.Equality.TestEquality (SOcc :: Occ+ -> GHC.Types.Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance Data.Type.Coercion.TestCoercion (SOcc :: Occ+ -> GHC.Types.Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance Show (SOcc (z :: Occ)) where+ showsPrec _ SStr = showString "SStr"+ showsPrec _ SOpt = showString "SOpt"+ showsPrec _ SMany = showString "SMany"+ instance SingI Str where+ sing = SStr+ instance SingI Opt where+ sing = SOpt+ instance SingI Many where+ sing = SMany
− tests/compile-and-dump/Singletons/T183.ghc86.template
@@ -1,512 +0,0 @@-Singletons/T183.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| f1 (x :: Maybe Bool) = (x :: Maybe Bool)- f2 (x :: Maybe a) = (x :: Maybe a)- f3 (Just a :: Maybe Bool) = "hi"- g x = case Just x of { (Just y :: Maybe Bool) -> (y :: Bool) }- foo1 :: Maybe a -> a- foo1 (Just x :: Maybe a) = (x :: a)- foo2, foo3 :: forall a. Maybe a -> a- foo2 (Just x :: Maybe a) = (x :: a)- foo3 (Just x) = (x :: a)- foo4 :: (a, b) -> (b, a)- foo4 = \ (x :: a, y :: b) -> (y :: b, x :: a)- foo5, foo6 :: Maybe (Maybe a) -> Maybe (Maybe a)- foo5 (Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a))- = Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a)- foo6 (Just x :: Maybe (Maybe a))- = case x :: Maybe a of {- (Just (y :: a) :: Maybe a) -> Just (Just (y :: a) :: Maybe a) }- foo7 :: a -> b -> a- foo7 (x :: a) (_ :: b) = (x :: a)- foo8 :: forall a. Maybe a -> Maybe a- foo8 x@(Just (_ :: a) :: Maybe a) = x- foo9 :: a -> a- foo9 (x :: a)- = let- g :: a -> b -> a- g y _ = y- in g x () |]- ======>- f1 (x :: Maybe Bool) = x :: Maybe Bool- f2 (x :: Maybe a) = x :: Maybe a- f3 (Just a :: Maybe Bool) = "hi"- g x = case Just x of { (Just y :: Maybe Bool) -> y :: Bool }- foo1 :: Maybe a -> a- foo1 (Just x :: Maybe a) = x :: a- foo2 :: forall a. Maybe a -> a- foo3 :: forall a. Maybe a -> a- foo2 (Just x :: Maybe a) = x :: a- foo3 (Just x) = x :: a- foo4 :: (a, b) -> (b, a)- foo4 = \ (x :: a, y :: b) -> (y :: b, x :: a)- foo5 :: Maybe (Maybe a) -> Maybe (Maybe a)- foo6 :: Maybe (Maybe a) -> Maybe (Maybe a)- foo5 (Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a))- = Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a)- foo6 (Just x :: Maybe (Maybe a))- = case x :: Maybe a of {- (Just (y :: a) :: Maybe a) -> Just (Just (y :: a) :: Maybe a) }- foo7 :: a -> b -> a- foo7 (x :: a) (_ :: b) = x :: a- foo8 :: forall a. Maybe a -> Maybe a- foo8 x@(Just (_ :: a) :: Maybe a) = x- foo9 :: a -> a- foo9 (x :: a)- = let- g :: a -> b -> a- g y _ = y- in (g x) ()- type Let0123456789876543210GSym3 x0123456789876543210 (a0123456789876543210 :: a) (a0123456789876543210 :: b0123456789876543210) =- Let0123456789876543210G x0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210GSym2 a0123456789876543210 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210GSym2KindInference) ())- data Let0123456789876543210GSym2 x0123456789876543210 (a0123456789876543210 :: a) :: forall b0123456789876543210.- (~>) b0123456789876543210 a- where- Let0123456789876543210GSym2KindInference :: forall x0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Let0123456789876543210GSym2 x0123456789876543210 a0123456789876543210) arg) (Let0123456789876543210GSym3 x0123456789876543210 a0123456789876543210 arg) =>- Let0123456789876543210GSym2 x0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (Let0123456789876543210GSym2 a0123456789876543210 x0123456789876543210) a0123456789876543210 = Let0123456789876543210G a0123456789876543210 x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210GSym1 x0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210GSym1KindInference) ())- data Let0123456789876543210GSym1 x0123456789876543210 :: forall b0123456789876543210- a.- (~>) a ((~>) b0123456789876543210 a)- where- Let0123456789876543210GSym1KindInference :: forall x0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Let0123456789876543210GSym1 x0123456789876543210) arg) (Let0123456789876543210GSym2 x0123456789876543210 arg) =>- Let0123456789876543210GSym1 x0123456789876543210 a0123456789876543210- type instance Apply (Let0123456789876543210GSym1 x0123456789876543210) a0123456789876543210 = Let0123456789876543210GSym2 x0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210GSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210GSym0KindInference) ())- data Let0123456789876543210GSym0 x0123456789876543210- where- Let0123456789876543210GSym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210GSym0 arg) (Let0123456789876543210GSym1 arg) =>- Let0123456789876543210GSym0 x0123456789876543210- type instance Apply Let0123456789876543210GSym0 x0123456789876543210 = Let0123456789876543210GSym1 x0123456789876543210- type family Let0123456789876543210G x (a :: a) (a :: b) :: a where- Let0123456789876543210G x y _ = y- type Let0123456789876543210XSym1 wild_01234567898765432100123456789876543210 =- Let0123456789876543210X wild_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210XSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210XSym0KindInference) ())- data Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210- where- Let0123456789876543210XSym0KindInference :: forall wild_01234567898765432100123456789876543210- arg. SameKind (Apply Let0123456789876543210XSym0 arg) (Let0123456789876543210XSym1 arg) =>- Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210- type instance Apply Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210X wild_01234567898765432100123456789876543210- type family Let0123456789876543210X wild_0123456789876543210 where- Let0123456789876543210X wild_0123456789876543210 = (Apply JustSym0 (wild_0123456789876543210 :: a) :: Maybe a)- type Let0123456789876543210Scrutinee_0123456789876543210Sym1 x0123456789876543210 =- Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210- type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210- type family Let0123456789876543210Scrutinee_0123456789876543210 x where- Let0123456789876543210Scrutinee_0123456789876543210 x = (x :: Maybe a)- type family Case_0123456789876543210 x t where- Case_0123456789876543210 x ( 'Just (y :: a) :: Maybe a) = Apply JustSym0 (Apply JustSym0 (y :: a) :: Maybe a)- type family Case_0123456789876543210 arg_0123456789876543210 a_0123456789876543210 t where- Case_0123456789876543210 arg_0123456789876543210 a_0123456789876543210 '((x :: a),- (y :: b)) = Apply (Apply Tuple2Sym0 (y :: b)) (x :: a)- type family Lambda_0123456789876543210 a_0123456789876543210 t where- Lambda_0123456789876543210 a_0123456789876543210 arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 a_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall a_01234567898765432100123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall a_01234567898765432100123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210- type Let0123456789876543210Scrutinee_0123456789876543210Sym1 x0123456789876543210 =- Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall x0123456789876543210- arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210- type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210- type family Let0123456789876543210Scrutinee_0123456789876543210 x where- Let0123456789876543210Scrutinee_0123456789876543210 x = Apply JustSym0 x- type family Case_0123456789876543210 x t where- Case_0123456789876543210 x ( 'Just y :: Maybe Bool) = (y :: Bool)- type Foo9Sym1 (a0123456789876543210 :: a0123456789876543210) =- Foo9 a0123456789876543210- instance SuppressUnusedWarnings Foo9Sym0 where- suppressUnusedWarnings = snd (((,) Foo9Sym0KindInference) ())- data Foo9Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- Foo9Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo9Sym0 arg) (Foo9Sym1 arg) =>- Foo9Sym0 a0123456789876543210- type instance Apply Foo9Sym0 a0123456789876543210 = Foo9 a0123456789876543210- type Foo8Sym1 (a0123456789876543210 :: Maybe a0123456789876543210) =- Foo8 a0123456789876543210- instance SuppressUnusedWarnings Foo8Sym0 where- suppressUnusedWarnings = snd (((,) Foo8Sym0KindInference) ())- data Foo8Sym0 :: forall a0123456789876543210.- (~>) (Maybe a0123456789876543210) (Maybe a0123456789876543210)- where- Foo8Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo8Sym0 arg) (Foo8Sym1 arg) =>- Foo8Sym0 a0123456789876543210- type instance Apply Foo8Sym0 a0123456789876543210 = Foo8 a0123456789876543210- type Foo7Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Foo7 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Foo7Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Foo7Sym1KindInference) ())- data Foo7Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 a0123456789876543210- where- Foo7Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Foo7Sym1 a0123456789876543210) arg) (Foo7Sym2 a0123456789876543210 arg) =>- Foo7Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Foo7Sym1 a0123456789876543210) a0123456789876543210 = Foo7 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Foo7Sym0 where- suppressUnusedWarnings = snd (((,) Foo7Sym0KindInference) ())- data Foo7Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)- where- Foo7Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo7Sym0 arg) (Foo7Sym1 arg) =>- Foo7Sym0 a0123456789876543210- type instance Apply Foo7Sym0 a0123456789876543210 = Foo7Sym1 a0123456789876543210- type Foo6Sym1 (a0123456789876543210 :: Maybe (Maybe a0123456789876543210)) =- Foo6 a0123456789876543210- instance SuppressUnusedWarnings Foo6Sym0 where- suppressUnusedWarnings = snd (((,) Foo6Sym0KindInference) ())- data Foo6Sym0 :: forall a0123456789876543210.- (~>) (Maybe (Maybe a0123456789876543210)) (Maybe (Maybe a0123456789876543210))- where- Foo6Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo6Sym0 arg) (Foo6Sym1 arg) =>- Foo6Sym0 a0123456789876543210- type instance Apply Foo6Sym0 a0123456789876543210 = Foo6 a0123456789876543210- type Foo5Sym1 (a0123456789876543210 :: Maybe (Maybe a0123456789876543210)) =- Foo5 a0123456789876543210- instance SuppressUnusedWarnings Foo5Sym0 where- suppressUnusedWarnings = snd (((,) Foo5Sym0KindInference) ())- data Foo5Sym0 :: forall a0123456789876543210.- (~>) (Maybe (Maybe a0123456789876543210)) (Maybe (Maybe a0123456789876543210))- where- Foo5Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo5Sym0 arg) (Foo5Sym1 arg) =>- Foo5Sym0 a0123456789876543210- type instance Apply Foo5Sym0 a0123456789876543210 = Foo5 a0123456789876543210- type Foo4Sym1 (a0123456789876543210 :: (a0123456789876543210,- b0123456789876543210)) =- Foo4 a0123456789876543210- instance SuppressUnusedWarnings Foo4Sym0 where- suppressUnusedWarnings = snd (((,) Foo4Sym0KindInference) ())- data Foo4Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) (a0123456789876543210,- b0123456789876543210) (b0123456789876543210, a0123456789876543210)- where- Foo4Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo4Sym0 arg) (Foo4Sym1 arg) =>- Foo4Sym0 a0123456789876543210- type instance Apply Foo4Sym0 a0123456789876543210 = Foo4 a0123456789876543210- type Foo3Sym1 (a0123456789876543210 :: Maybe a0123456789876543210) =- Foo3 a0123456789876543210- instance SuppressUnusedWarnings Foo3Sym0 where- suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())- data Foo3Sym0 :: forall a0123456789876543210.- (~>) (Maybe a0123456789876543210) a0123456789876543210- where- Foo3Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>- Foo3Sym0 a0123456789876543210- type instance Apply Foo3Sym0 a0123456789876543210 = Foo3 a0123456789876543210- type Foo2Sym1 (a0123456789876543210 :: Maybe a0123456789876543210) =- Foo2 a0123456789876543210- instance SuppressUnusedWarnings Foo2Sym0 where- suppressUnusedWarnings = snd (((,) Foo2Sym0KindInference) ())- data Foo2Sym0 :: forall a0123456789876543210.- (~>) (Maybe a0123456789876543210) a0123456789876543210- where- Foo2Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo2Sym0 arg) (Foo2Sym1 arg) =>- Foo2Sym0 a0123456789876543210- type instance Apply Foo2Sym0 a0123456789876543210 = Foo2 a0123456789876543210- type Foo1Sym1 (a0123456789876543210 :: Maybe a0123456789876543210) =- Foo1 a0123456789876543210- instance SuppressUnusedWarnings Foo1Sym0 where- suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())- data Foo1Sym0 :: forall a0123456789876543210.- (~>) (Maybe a0123456789876543210) a0123456789876543210- where- Foo1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>- Foo1Sym0 a0123456789876543210- type instance Apply Foo1Sym0 a0123456789876543210 = Foo1 a0123456789876543210- type GSym1 a0123456789876543210 = G a0123456789876543210- instance SuppressUnusedWarnings GSym0 where- suppressUnusedWarnings = snd (((,) GSym0KindInference) ())- data GSym0 a0123456789876543210- where- GSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply GSym0 arg) (GSym1 arg) =>- GSym0 a0123456789876543210- type instance Apply GSym0 a0123456789876543210 = G a0123456789876543210- type F3Sym1 a0123456789876543210 = F3 a0123456789876543210- instance SuppressUnusedWarnings F3Sym0 where- suppressUnusedWarnings = snd (((,) F3Sym0KindInference) ())- data F3Sym0 a0123456789876543210- where- F3Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply F3Sym0 arg) (F3Sym1 arg) =>- F3Sym0 a0123456789876543210- type instance Apply F3Sym0 a0123456789876543210 = F3 a0123456789876543210- type F2Sym1 a0123456789876543210 = F2 a0123456789876543210- instance SuppressUnusedWarnings F2Sym0 where- suppressUnusedWarnings = snd (((,) F2Sym0KindInference) ())- data F2Sym0 a0123456789876543210- where- F2Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply F2Sym0 arg) (F2Sym1 arg) =>- F2Sym0 a0123456789876543210- type instance Apply F2Sym0 a0123456789876543210 = F2 a0123456789876543210- type F1Sym1 a0123456789876543210 = F1 a0123456789876543210- instance SuppressUnusedWarnings F1Sym0 where- suppressUnusedWarnings = snd (((,) F1Sym0KindInference) ())- data F1Sym0 a0123456789876543210- where- F1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply F1Sym0 arg) (F1Sym1 arg) =>- F1Sym0 a0123456789876543210- type instance Apply F1Sym0 a0123456789876543210 = F1 a0123456789876543210- type family Foo9 (a :: a) :: a where- Foo9 (x :: a) = Apply (Apply (Let0123456789876543210GSym1 x) x) Tuple0Sym0- type family Foo8 (a :: Maybe a) :: Maybe a where- Foo8 ( 'Just (wild_0123456789876543210 :: a) :: Maybe a) = Let0123456789876543210XSym1 wild_0123456789876543210- type family Foo7 (a :: a) (a :: b) :: a where- Foo7 (x :: a) (wild_0123456789876543210 :: b) = (x :: a)- type family Foo6 (a :: Maybe (Maybe a)) :: Maybe (Maybe a) where- Foo6 ( 'Just x :: Maybe (Maybe a)) = Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)- type family Foo5 (a :: Maybe (Maybe a)) :: Maybe (Maybe a) where- Foo5 ( 'Just ( 'Just (x :: a) :: Maybe a) :: Maybe (Maybe a)) = (Apply JustSym0 (Apply JustSym0 (x :: a) :: Maybe a) :: Maybe (Maybe a))- type family Foo4 (a :: (a, b)) :: (b, a) where- Foo4 a_0123456789876543210 = Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210- type family Foo3 (a :: Maybe a) :: a where- Foo3 ( 'Just x) = (x :: a)- type family Foo2 (a :: Maybe a) :: a where- Foo2 ( 'Just x :: Maybe a) = (x :: a)- type family Foo1 (a :: Maybe a) :: a where- Foo1 ( 'Just x :: Maybe a) = (x :: a)- type family G a where- G x = Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)- type family F3 a where- F3 ( 'Just a :: Maybe Bool) = "hi"- type family F2 a where- F2 (x :: Maybe a) = (x :: Maybe a)- type family F1 a where- F1 (x :: Maybe Bool) = (x :: Maybe Bool)- sFoo9 :: forall a (t :: a). Sing t -> Sing (Apply Foo9Sym0 t :: a)- sFoo8 ::- forall a (t :: Maybe a).- Sing t -> Sing (Apply Foo8Sym0 t :: Maybe a)- sFoo7 ::- forall a b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply Foo7Sym0 t) t :: a)- sFoo6 ::- forall a (t :: Maybe (Maybe a)).- Sing t -> Sing (Apply Foo6Sym0 t :: Maybe (Maybe a))- sFoo5 ::- forall a (t :: Maybe (Maybe a)).- Sing t -> Sing (Apply Foo5Sym0 t :: Maybe (Maybe a))- sFoo4 ::- forall a b (t :: (a, b)).- Sing t -> Sing (Apply Foo4Sym0 t :: (b, a))- sFoo3 ::- forall a (t :: Maybe a). Sing t -> Sing (Apply Foo3Sym0 t :: a)- sFoo2 ::- forall a (t :: Maybe a). Sing t -> Sing (Apply Foo2Sym0 t :: a)- sFoo1 ::- forall a (t :: Maybe a). Sing t -> Sing (Apply Foo1Sym0 t :: a)- sG :: forall arg. Sing arg -> Sing (Apply GSym0 arg)- sF3 :: forall arg. Sing arg -> Sing (Apply F3Sym0 arg)- sF2 :: forall arg. Sing arg -> Sing (Apply F2Sym0 arg)- sF1 :: forall arg. Sing arg -> Sing (Apply F1Sym0 arg)- sFoo9 (sX :: Sing x)- = case sX :: Sing x of {- (_ :: Sing (x :: a))- -> let- sG ::- forall b (t :: a) (t :: b).- Sing t- -> Sing t- -> Sing (Apply (Apply (Let0123456789876543210GSym1 x) t) t :: a)- sG (sY :: Sing y) _ = sY- in- (applySing- ((applySing ((singFun2 @(Let0123456789876543210GSym1 x)) sG)) sX))- STuple0 }- sFoo8- (SJust (sWild_0123456789876543210 :: Sing wild_0123456789876543210))- = case- ((,) (sWild_0123456789876543210 :: Sing wild_0123456789876543210))- (SJust- (sWild_0123456789876543210 :: Sing wild_0123456789876543210))- of {- (,) (_ :: Sing (wild_0123456789876543210 :: a))- (_ :: Sing ( 'Just (wild_0123456789876543210 :: a) :: Maybe a))- -> let- sX :: Sing (Let0123456789876543210XSym1 wild_0123456789876543210)- sX- = (applySing ((singFun1 @JustSym0) SJust))- (sWild_0123456789876543210 ::- Sing (wild_0123456789876543210 :: a)) ::- Sing (Apply JustSym0 (wild_0123456789876543210 :: a) :: Maybe a)- in sX }- sFoo7- (sX :: Sing x)- (sWild_0123456789876543210 :: Sing wild_0123456789876543210)- = case- ((,) (sX :: Sing x))- (sWild_0123456789876543210 :: Sing wild_0123456789876543210)- of {- (,) (_ :: Sing (x :: a))- (_ :: Sing (wild_0123456789876543210 :: b))- -> sX :: Sing (x :: a) }- sFoo6 (SJust (sX :: Sing x))- = case SJust (sX :: Sing x) of {- (_ :: Sing ( 'Just x :: Maybe (Maybe a)))- -> let- sScrutinee_0123456789876543210 ::- Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)- sScrutinee_0123456789876543210 = sX :: Sing (x :: Maybe a)- in (case sScrutinee_0123456789876543210 of {- SJust (sY :: Sing y)- -> case ((,) (sY :: Sing y)) (SJust (sY :: Sing y)) of {- (,) (_ :: Sing (y :: a)) (_ :: Sing ( 'Just (y :: a) :: Maybe a))- -> (applySing ((singFun1 @JustSym0) SJust))- ((applySing ((singFun1 @JustSym0) SJust))- (sY :: Sing (y :: a)) ::- Sing (Apply JustSym0 (y :: a) :: Maybe a)) } }) ::- Sing (Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x) :: Maybe (Maybe a)) }- sFoo5 (SJust (SJust (sX :: Sing x)))- = case- (((,,) (sX :: Sing x)) (SJust (sX :: Sing x)))- (SJust (SJust (sX :: Sing x)))- of {- (,,) (_ :: Sing (x :: a))- (_ :: Sing ( 'Just (x :: a) :: Maybe a))- (_ :: Sing ( 'Just ( 'Just (x :: a) :: Maybe a) :: Maybe (Maybe a)))- -> (applySing ((singFun1 @JustSym0) SJust))- ((applySing ((singFun1 @JustSym0) SJust)) (sX :: Sing (x :: a)) ::- Sing (Apply JustSym0 (x :: a) :: Maybe a)) ::- Sing (Apply JustSym0 (Apply JustSym0 (x :: a) :: Maybe a) :: Maybe (Maybe a)) }- sFoo4 (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((singFun1- @(Apply Lambda_0123456789876543210Sym0 a_0123456789876543210))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of {- STuple2 (sX :: Sing x) (sY :: Sing y)- -> case ((,) (sX :: Sing x)) (sY :: Sing y) of {- (,) (_ :: Sing (x :: a)) (_ :: Sing (y :: b))- -> (applySing- ((applySing ((singFun2 @Tuple2Sym0) STuple2))- (sY :: Sing (y :: b))))- (sX :: Sing (x :: a)) } }) ::- Sing (Case_0123456789876543210 arg_0123456789876543210 a_0123456789876543210 arg_0123456789876543210) })))- sA_0123456789876543210- sFoo3 (SJust (sX :: Sing x)) = sX :: Sing (x :: a)- sFoo2 (SJust (sX :: Sing x))- = case SJust (sX :: Sing x) of {- (_ :: Sing ( 'Just x :: Maybe a)) -> sX :: Sing (x :: a) }- sFoo1 (SJust (sX :: Sing x))- = case SJust (sX :: Sing x) of {- (_ :: Sing ( 'Just x :: Maybe a)) -> sX :: Sing (x :: a) }- sG (sX :: Sing x)- = let- sScrutinee_0123456789876543210 ::- Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)- sScrutinee_0123456789876543210- = (applySing ((singFun1 @JustSym0) SJust)) sX- in (case sScrutinee_0123456789876543210 of {- SJust (sY :: Sing y)- -> case SJust (sY :: Sing y) of {- (_ :: Sing ( 'Just y :: Maybe Bool))- -> sY :: Sing (y :: Bool) } }) ::- Sing (Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x))- sF3 (SJust (sA :: Sing a))- = case SJust (sA :: Sing a) of {- (_ :: Sing ( 'Just a :: Maybe Bool)) -> sing :: Sing "hi" }- sF2 (sX :: Sing x)- = case sX :: Sing x of {- (_ :: Sing (x :: Maybe a)) -> sX :: Sing (x :: Maybe a) }- sF1 (sX :: Sing x)- = case sX :: Sing x of {- (_ :: Sing (x :: Maybe Bool)) -> sX :: Sing (x :: Maybe Bool) }- instance SingI (Foo9Sym0 :: (~>) a a) where- sing = (singFun1 @Foo9Sym0) sFoo9- instance SingI (Foo8Sym0 :: (~>) (Maybe a) (Maybe a)) where- sing = (singFun1 @Foo8Sym0) sFoo8- instance SingI (Foo7Sym0 :: (~>) a ((~>) b a)) where- sing = (singFun2 @Foo7Sym0) sFoo7- instance SingI d => SingI (Foo7Sym1 (d :: a) :: (~>) b a) where- sing = (singFun1 @(Foo7Sym1 (d :: a))) (sFoo7 (sing @d))- instance SingI (Foo6Sym0 :: (~>) (Maybe (Maybe a)) (Maybe (Maybe a))) where- sing = (singFun1 @Foo6Sym0) sFoo6- instance SingI (Foo5Sym0 :: (~>) (Maybe (Maybe a)) (Maybe (Maybe a))) where- sing = (singFun1 @Foo5Sym0) sFoo5- instance SingI (Foo4Sym0 :: (~>) (a, b) (b, a)) where- sing = (singFun1 @Foo4Sym0) sFoo4- instance SingI (Foo3Sym0 :: (~>) (Maybe a) a) where- sing = (singFun1 @Foo3Sym0) sFoo3- instance SingI (Foo2Sym0 :: (~>) (Maybe a) a) where- sing = (singFun1 @Foo2Sym0) sFoo2- instance SingI (Foo1Sym0 :: (~>) (Maybe a) a) where- sing = (singFun1 @Foo1Sym0) sFoo1- instance SingI GSym0 where- sing = (singFun1 @GSym0) sG- instance SingI F3Sym0 where- sing = (singFun1 @F3Sym0) sF3- instance SingI F2Sym0 where- sing = (singFun1 @F2Sym0) sF2- instance SingI F1Sym0 where- sing = (singFun1 @F1Sym0) sF1
+ tests/compile-and-dump/Singletons/T183.ghc88.template view
@@ -0,0 +1,516 @@+Singletons/T183.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| f1 (x :: Maybe Bool) = (x :: Maybe Bool)+ f2 (x :: Maybe a) = (x :: Maybe a)+ f3 (Just a :: Maybe Bool) = "hi"+ g x = case Just x of { (Just y :: Maybe Bool) -> (y :: Bool) }+ foo1 :: Maybe a -> a+ foo1 (Just x :: Maybe a) = (x :: a)+ foo2, foo3 :: forall a. Maybe a -> a+ foo2 (Just x :: Maybe a) = (x :: a)+ foo3 (Just x) = (x :: a)+ foo4 :: (a, b) -> (b, a)+ foo4 = \ (x :: a, y :: b) -> (y :: b, x :: a)+ foo5, foo6 :: Maybe (Maybe a) -> Maybe (Maybe a)+ foo5 (Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a))+ = Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a)+ foo6 (Just x :: Maybe (Maybe a))+ = case x :: Maybe a of {+ (Just (y :: a) :: Maybe a) -> Just (Just (y :: a) :: Maybe a) }+ foo7 :: a -> b -> a+ foo7 (x :: a) (_ :: b) = (x :: a)+ foo8 :: forall a. Maybe a -> Maybe a+ foo8 x@(Just (_ :: a) :: Maybe a) = x+ foo9 :: a -> a+ foo9 (x :: a)+ = let+ g :: a -> b -> a+ g y _ = y+ in g x () |]+ ======>+ f1 (x :: Maybe Bool) = x :: Maybe Bool+ f2 (x :: Maybe a) = x :: Maybe a+ f3 (Just a :: Maybe Bool) = "hi"+ g x = case Just x of { (Just y :: Maybe Bool) -> y :: Bool }+ foo1 :: Maybe a -> a+ foo1 (Just x :: Maybe a) = x :: a+ foo2 :: forall a. Maybe a -> a+ foo3 :: forall a. Maybe a -> a+ foo2 (Just x :: Maybe a) = x :: a+ foo3 (Just x) = x :: a+ foo4 :: (a, b) -> (b, a)+ foo4 = \ (x :: a, y :: b) -> (y :: b, x :: a)+ foo5 :: Maybe (Maybe a) -> Maybe (Maybe a)+ foo6 :: Maybe (Maybe a) -> Maybe (Maybe a)+ foo5 (Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a))+ = Just (Just (x :: a) :: Maybe a) :: Maybe (Maybe a)+ foo6 (Just x :: Maybe (Maybe a))+ = case x :: Maybe a of {+ (Just (y :: a) :: Maybe a) -> Just (Just (y :: a) :: Maybe a) }+ foo7 :: a -> b -> a+ foo7 (x :: a) (_ :: b) = x :: a+ foo8 :: forall a. Maybe a -> Maybe a+ foo8 x@(Just (_ :: a) :: Maybe a) = x+ foo9 :: a -> a+ foo9 (x :: a)+ = let+ g :: a -> b -> a+ g y _ = y+ in (g x) ()+ type Let0123456789876543210GSym3 x0123456789876543210 (a0123456789876543210 :: a) (a0123456789876543210 :: b0123456789876543210) =+ Let0123456789876543210G x0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210GSym2 a0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210GSym2KindInference) ())+ data Let0123456789876543210GSym2 x0123456789876543210 (a0123456789876543210 :: a) :: forall b0123456789876543210.+ (~>) b0123456789876543210 a+ where+ Let0123456789876543210GSym2KindInference :: forall x0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210GSym2 x0123456789876543210 a0123456789876543210) arg) (Let0123456789876543210GSym3 x0123456789876543210 a0123456789876543210 arg) =>+ Let0123456789876543210GSym2 x0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (Let0123456789876543210GSym2 a0123456789876543210 x0123456789876543210) a0123456789876543210 = Let0123456789876543210G a0123456789876543210 x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210GSym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210GSym1KindInference) ())+ data Let0123456789876543210GSym1 x0123456789876543210 :: forall a+ b0123456789876543210.+ (~>) a ((~>) b0123456789876543210 a)+ where+ Let0123456789876543210GSym1KindInference :: forall x0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210GSym1 x0123456789876543210) arg) (Let0123456789876543210GSym2 x0123456789876543210 arg) =>+ Let0123456789876543210GSym1 x0123456789876543210 a0123456789876543210+ type instance Apply (Let0123456789876543210GSym1 x0123456789876543210) a0123456789876543210 = Let0123456789876543210GSym2 x0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210GSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210GSym0KindInference) ())+ data Let0123456789876543210GSym0 x0123456789876543210+ where+ Let0123456789876543210GSym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210GSym0 arg) (Let0123456789876543210GSym1 arg) =>+ Let0123456789876543210GSym0 x0123456789876543210+ type instance Apply Let0123456789876543210GSym0 x0123456789876543210 = Let0123456789876543210GSym1 x0123456789876543210+ type family Let0123456789876543210G x (a :: a) (a :: b) :: a where+ Let0123456789876543210G x y _ = y+ type Let0123456789876543210XSym1 wild_01234567898765432100123456789876543210 =+ Let0123456789876543210X wild_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210XSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210XSym0KindInference) ())+ data Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210+ where+ Let0123456789876543210XSym0KindInference :: forall wild_01234567898765432100123456789876543210+ arg. SameKind (Apply Let0123456789876543210XSym0 arg) (Let0123456789876543210XSym1 arg) =>+ Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210+ type instance Apply Let0123456789876543210XSym0 wild_01234567898765432100123456789876543210 = Let0123456789876543210X wild_01234567898765432100123456789876543210+ type family Let0123456789876543210X wild_0123456789876543210 where+ Let0123456789876543210X wild_0123456789876543210 = Apply JustSym0 (wild_0123456789876543210 :: a) :: Maybe a+ type Let0123456789876543210Scrutinee_0123456789876543210Sym1 x0123456789876543210 =+ Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210+ type family Let0123456789876543210Scrutinee_0123456789876543210 x where+ Let0123456789876543210Scrutinee_0123456789876543210 x = x :: Maybe a+ type family Case_0123456789876543210 x t where+ Case_0123456789876543210 x ('Just (y :: a) :: Maybe a) = Apply JustSym0 (Apply JustSym0 (y :: a) :: Maybe a)+ type family Case_0123456789876543210 arg_0123456789876543210 a_0123456789876543210 t where+ Case_0123456789876543210 arg_0123456789876543210 a_0123456789876543210 '(x :: a,+ y :: b) = Apply (Apply Tuple2Sym0 (y :: b)) (x :: a)+ type family Lambda_0123456789876543210 a_0123456789876543210 t where+ Lambda_0123456789876543210 a_0123456789876543210 arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 a_0123456789876543210 arg_0123456789876543210+ type Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall a_01234567898765432100123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) arg) (Lambda_0123456789876543210Sym2 a_01234567898765432100123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a_01234567898765432100123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall a_01234567898765432100123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 a_01234567898765432100123456789876543210 = Lambda_0123456789876543210Sym1 a_01234567898765432100123456789876543210+ type Let0123456789876543210Scrutinee_0123456789876543210Sym1 x0123456789876543210 =+ Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 x0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 x0123456789876543210+ type family Let0123456789876543210Scrutinee_0123456789876543210 x where+ Let0123456789876543210Scrutinee_0123456789876543210 x = Apply JustSym0 x+ type family Case_0123456789876543210 x t where+ Case_0123456789876543210 x ('Just y :: Maybe Bool) = y :: Bool+ type Foo9Sym1 (a0123456789876543210 :: a0123456789876543210) =+ Foo9 a0123456789876543210+ instance SuppressUnusedWarnings Foo9Sym0 where+ suppressUnusedWarnings = snd (((,) Foo9Sym0KindInference) ())+ data Foo9Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ Foo9Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo9Sym0 arg) (Foo9Sym1 arg) =>+ Foo9Sym0 a0123456789876543210+ type instance Apply Foo9Sym0 a0123456789876543210 = Foo9 a0123456789876543210+ type Foo8Sym1 (a0123456789876543210 :: Maybe a0123456789876543210) =+ Foo8 a0123456789876543210+ instance SuppressUnusedWarnings Foo8Sym0 where+ suppressUnusedWarnings = snd (((,) Foo8Sym0KindInference) ())+ data Foo8Sym0 :: forall a0123456789876543210.+ (~>) (Maybe a0123456789876543210) (Maybe a0123456789876543210)+ where+ Foo8Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo8Sym0 arg) (Foo8Sym1 arg) =>+ Foo8Sym0 a0123456789876543210+ type instance Apply Foo8Sym0 a0123456789876543210 = Foo8 a0123456789876543210+ type Foo7Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Foo7 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Foo7Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Foo7Sym1KindInference) ())+ data Foo7Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ Foo7Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Foo7Sym1 a0123456789876543210) arg) (Foo7Sym2 a0123456789876543210 arg) =>+ Foo7Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Foo7Sym1 a0123456789876543210) a0123456789876543210 = Foo7 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Foo7Sym0 where+ suppressUnusedWarnings = snd (((,) Foo7Sym0KindInference) ())+ data Foo7Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)+ where+ Foo7Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo7Sym0 arg) (Foo7Sym1 arg) =>+ Foo7Sym0 a0123456789876543210+ type instance Apply Foo7Sym0 a0123456789876543210 = Foo7Sym1 a0123456789876543210+ type Foo6Sym1 (a0123456789876543210 :: Maybe (Maybe a0123456789876543210)) =+ Foo6 a0123456789876543210+ instance SuppressUnusedWarnings Foo6Sym0 where+ suppressUnusedWarnings = snd (((,) Foo6Sym0KindInference) ())+ data Foo6Sym0 :: forall a0123456789876543210.+ (~>) (Maybe (Maybe a0123456789876543210)) (Maybe (Maybe a0123456789876543210))+ where+ Foo6Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo6Sym0 arg) (Foo6Sym1 arg) =>+ Foo6Sym0 a0123456789876543210+ type instance Apply Foo6Sym0 a0123456789876543210 = Foo6 a0123456789876543210+ type Foo5Sym1 (a0123456789876543210 :: Maybe (Maybe a0123456789876543210)) =+ Foo5 a0123456789876543210+ instance SuppressUnusedWarnings Foo5Sym0 where+ suppressUnusedWarnings = snd (((,) Foo5Sym0KindInference) ())+ data Foo5Sym0 :: forall a0123456789876543210.+ (~>) (Maybe (Maybe a0123456789876543210)) (Maybe (Maybe a0123456789876543210))+ where+ Foo5Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo5Sym0 arg) (Foo5Sym1 arg) =>+ Foo5Sym0 a0123456789876543210+ type instance Apply Foo5Sym0 a0123456789876543210 = Foo5 a0123456789876543210+ type Foo4Sym1 (a0123456789876543210 :: (a0123456789876543210,+ b0123456789876543210)) =+ Foo4 a0123456789876543210+ instance SuppressUnusedWarnings Foo4Sym0 where+ suppressUnusedWarnings = snd (((,) Foo4Sym0KindInference) ())+ data Foo4Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) (a0123456789876543210,+ b0123456789876543210) (b0123456789876543210, a0123456789876543210)+ where+ Foo4Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo4Sym0 arg) (Foo4Sym1 arg) =>+ Foo4Sym0 a0123456789876543210+ type instance Apply Foo4Sym0 a0123456789876543210 = Foo4 a0123456789876543210+ type Foo3Sym1 (a0123456789876543210 :: Maybe a0123456789876543210) =+ Foo3 a0123456789876543210+ instance SuppressUnusedWarnings Foo3Sym0 where+ suppressUnusedWarnings = snd (((,) Foo3Sym0KindInference) ())+ data Foo3Sym0 :: forall a0123456789876543210.+ (~>) (Maybe a0123456789876543210) a0123456789876543210+ where+ Foo3Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo3Sym0 arg) (Foo3Sym1 arg) =>+ Foo3Sym0 a0123456789876543210+ type instance Apply Foo3Sym0 a0123456789876543210 = Foo3 a0123456789876543210+ type Foo2Sym1 (a0123456789876543210 :: Maybe a0123456789876543210) =+ Foo2 a0123456789876543210+ instance SuppressUnusedWarnings Foo2Sym0 where+ suppressUnusedWarnings = snd (((,) Foo2Sym0KindInference) ())+ data Foo2Sym0 :: forall a0123456789876543210.+ (~>) (Maybe a0123456789876543210) a0123456789876543210+ where+ Foo2Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo2Sym0 arg) (Foo2Sym1 arg) =>+ Foo2Sym0 a0123456789876543210+ type instance Apply Foo2Sym0 a0123456789876543210 = Foo2 a0123456789876543210+ type Foo1Sym1 (a0123456789876543210 :: Maybe a0123456789876543210) =+ Foo1 a0123456789876543210+ instance SuppressUnusedWarnings Foo1Sym0 where+ suppressUnusedWarnings = snd (((,) Foo1Sym0KindInference) ())+ data Foo1Sym0 :: forall a0123456789876543210.+ (~>) (Maybe a0123456789876543210) a0123456789876543210+ where+ Foo1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Foo1Sym0 arg) (Foo1Sym1 arg) =>+ Foo1Sym0 a0123456789876543210+ type instance Apply Foo1Sym0 a0123456789876543210 = Foo1 a0123456789876543210+ type GSym1 a0123456789876543210 = G a0123456789876543210+ instance SuppressUnusedWarnings GSym0 where+ suppressUnusedWarnings = snd (((,) GSym0KindInference) ())+ data GSym0 a0123456789876543210+ where+ GSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply GSym0 arg) (GSym1 arg) =>+ GSym0 a0123456789876543210+ type instance Apply GSym0 a0123456789876543210 = G a0123456789876543210+ type F3Sym1 a0123456789876543210 = F3 a0123456789876543210+ instance SuppressUnusedWarnings F3Sym0 where+ suppressUnusedWarnings = snd (((,) F3Sym0KindInference) ())+ data F3Sym0 a0123456789876543210+ where+ F3Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply F3Sym0 arg) (F3Sym1 arg) =>+ F3Sym0 a0123456789876543210+ type instance Apply F3Sym0 a0123456789876543210 = F3 a0123456789876543210+ type F2Sym1 a0123456789876543210 = F2 a0123456789876543210+ instance SuppressUnusedWarnings F2Sym0 where+ suppressUnusedWarnings = snd (((,) F2Sym0KindInference) ())+ data F2Sym0 a0123456789876543210+ where+ F2Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply F2Sym0 arg) (F2Sym1 arg) =>+ F2Sym0 a0123456789876543210+ type instance Apply F2Sym0 a0123456789876543210 = F2 a0123456789876543210+ type F1Sym1 a0123456789876543210 = F1 a0123456789876543210+ instance SuppressUnusedWarnings F1Sym0 where+ suppressUnusedWarnings = snd (((,) F1Sym0KindInference) ())+ data F1Sym0 a0123456789876543210+ where+ F1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply F1Sym0 arg) (F1Sym1 arg) =>+ F1Sym0 a0123456789876543210+ type instance Apply F1Sym0 a0123456789876543210 = F1 a0123456789876543210+ type family Foo9 (a :: a) :: a where+ Foo9 (x :: a) = Apply (Apply (Let0123456789876543210GSym1 x) x) Tuple0Sym0+ type family Foo8 (a :: Maybe a) :: Maybe a where+ Foo8 ('Just (wild_0123456789876543210 :: a) :: Maybe a) = Let0123456789876543210XSym1 wild_0123456789876543210+ type family Foo7 (a :: a) (a :: b) :: a where+ Foo7 (x :: a) (wild_0123456789876543210 :: b) = x :: a+ type family Foo6 (a :: Maybe (Maybe a)) :: Maybe (Maybe a) where+ Foo6 ('Just x :: Maybe (Maybe a)) = Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)+ type family Foo5 (a :: Maybe (Maybe a)) :: Maybe (Maybe a) where+ Foo5 ('Just ('Just (x :: a) :: Maybe a) :: Maybe (Maybe a)) = Apply JustSym0 (Apply JustSym0 (x :: a) :: Maybe a) :: Maybe (Maybe a)+ type family Foo4 (a :: (a, b)) :: (b, a) where+ Foo4 a_0123456789876543210 = Apply (Apply Lambda_0123456789876543210Sym0 a_0123456789876543210) a_0123456789876543210+ type family Foo3 (a :: Maybe a) :: a where+ Foo3 ('Just x) = x :: a+ type family Foo2 (a :: Maybe a) :: a where+ Foo2 ('Just x :: Maybe a) = x :: a+ type family Foo1 (a :: Maybe a) :: a where+ Foo1 ('Just x :: Maybe a) = x :: a+ type family G a where+ G x = Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)+ type family F3 a where+ F3 ('Just a :: Maybe Bool) = "hi"+ type family F2 a where+ F2 (x :: Maybe a) = x :: Maybe a+ type family F1 a where+ F1 (x :: Maybe Bool) = x :: Maybe Bool+ sFoo9 :: forall a (t :: a). Sing t -> Sing (Apply Foo9Sym0 t :: a)+ sFoo8 ::+ forall a (t :: Maybe a).+ Sing t -> Sing (Apply Foo8Sym0 t :: Maybe a)+ sFoo7 ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Foo7Sym0 t) t :: a)+ sFoo6 ::+ forall a (t :: Maybe (Maybe a)).+ Sing t -> Sing (Apply Foo6Sym0 t :: Maybe (Maybe a))+ sFoo5 ::+ forall a (t :: Maybe (Maybe a)).+ Sing t -> Sing (Apply Foo5Sym0 t :: Maybe (Maybe a))+ sFoo4 ::+ forall a b (t :: (a, b)).+ Sing t -> Sing (Apply Foo4Sym0 t :: (b, a))+ sFoo3 ::+ forall a (t :: Maybe a). Sing t -> Sing (Apply Foo3Sym0 t :: a)+ sFoo2 ::+ forall a (t :: Maybe a). Sing t -> Sing (Apply Foo2Sym0 t :: a)+ sFoo1 ::+ forall a (t :: Maybe a). Sing t -> Sing (Apply Foo1Sym0 t :: a)+ sG :: forall arg. Sing arg -> Sing (Apply GSym0 arg)+ sF3 :: forall arg. Sing arg -> Sing (Apply F3Sym0 arg)+ sF2 :: forall arg. Sing arg -> Sing (Apply F2Sym0 arg)+ sF1 :: forall arg. Sing arg -> Sing (Apply F1Sym0 arg)+ sFoo9 (sX :: Sing x)+ = case sX :: Sing x of {+ (_ :: Sing (x :: a))+ -> let+ sG ::+ forall b (t :: a) (t :: b).+ Sing t+ -> Sing t+ -> Sing (Apply (Apply (Let0123456789876543210GSym1 x) t) t :: a)+ sG (sY :: Sing y) _ = sY+ in+ (applySing+ ((applySing ((singFun2 @(Let0123456789876543210GSym1 x)) sG)) sX))+ STuple0 }+ sFoo8+ (SJust (sWild_0123456789876543210 :: Sing wild_0123456789876543210))+ = case+ ((,) (sWild_0123456789876543210 :: Sing wild_0123456789876543210))+ (SJust+ (sWild_0123456789876543210 :: Sing wild_0123456789876543210))+ of {+ (,) (_ :: Sing (wild_0123456789876543210 :: a))+ (_ :: Sing ('Just (wild_0123456789876543210 :: a) :: Maybe a))+ -> let+ sX :: Sing (Let0123456789876543210XSym1 wild_0123456789876543210)+ sX+ = (applySing ((singFun1 @JustSym0) SJust))+ (sWild_0123456789876543210 ::+ Sing (wild_0123456789876543210 :: a)) ::+ Sing (Apply JustSym0 (wild_0123456789876543210 :: a) :: Maybe a)+ in sX }+ sFoo7+ (sX :: Sing x)+ (sWild_0123456789876543210 :: Sing wild_0123456789876543210)+ = case+ ((,) (sX :: Sing x))+ (sWild_0123456789876543210 :: Sing wild_0123456789876543210)+ of {+ (,) (_ :: Sing (x :: a))+ (_ :: Sing (wild_0123456789876543210 :: b))+ -> sX :: Sing (x :: a) }+ sFoo6 (SJust (sX :: Sing x))+ = case SJust (sX :: Sing x) of {+ (_ :: Sing ('Just x :: Maybe (Maybe a)))+ -> let+ sScrutinee_0123456789876543210 ::+ Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)+ sScrutinee_0123456789876543210 = sX :: Sing (x :: Maybe a)+ in+ (id+ @(Sing (Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x) :: Maybe (Maybe a))))+ (case sScrutinee_0123456789876543210 of {+ SJust (sY :: Sing y)+ -> case ((,) (sY :: Sing y)) (SJust (sY :: Sing y)) of {+ (,) (_ :: Sing (y :: a)) (_ :: Sing ('Just (y :: a) :: Maybe a))+ -> (applySing ((singFun1 @JustSym0) SJust))+ ((applySing ((singFun1 @JustSym0) SJust))+ (sY :: Sing (y :: a)) ::+ Sing (Apply JustSym0 (y :: a) :: Maybe a)) } }) }+ sFoo5 (SJust (SJust (sX :: Sing x)))+ = case+ (((,,) (sX :: Sing x)) (SJust (sX :: Sing x)))+ (SJust (SJust (sX :: Sing x)))+ of {+ (,,) (_ :: Sing (x :: a))+ (_ :: Sing ('Just (x :: a) :: Maybe a))+ (_ :: Sing ('Just ('Just (x :: a) :: Maybe a) :: Maybe (Maybe a)))+ -> (applySing ((singFun1 @JustSym0) SJust))+ ((applySing ((singFun1 @JustSym0) SJust)) (sX :: Sing (x :: a)) ::+ Sing (Apply JustSym0 (x :: a) :: Maybe a)) ::+ Sing (Apply JustSym0 (Apply JustSym0 (x :: a) :: Maybe a) :: Maybe (Maybe a)) }+ sFoo4 (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((singFun1+ @(Apply Lambda_0123456789876543210Sym0 a_0123456789876543210))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 a_0123456789876543210 arg_0123456789876543210)))+ (case sArg_0123456789876543210 of {+ STuple2 (sX :: Sing x) (sY :: Sing y)+ -> case ((,) (sX :: Sing x)) (sY :: Sing y) of {+ (,) (_ :: Sing (x :: a)) (_ :: Sing (y :: b))+ -> (applySing+ ((applySing ((singFun2 @Tuple2Sym0) STuple2))+ (sY :: Sing (y :: b))))+ (sX :: Sing (x :: a)) } }) })))+ sA_0123456789876543210+ sFoo3 (SJust (sX :: Sing x)) = sX :: Sing (x :: a)+ sFoo2 (SJust (sX :: Sing x))+ = case SJust (sX :: Sing x) of {+ (_ :: Sing ('Just x :: Maybe a)) -> sX :: Sing (x :: a) }+ sFoo1 (SJust (sX :: Sing x))+ = case SJust (sX :: Sing x) of {+ (_ :: Sing ('Just x :: Maybe a)) -> sX :: Sing (x :: a) }+ sG (sX :: Sing x)+ = let+ sScrutinee_0123456789876543210 ::+ Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x)+ sScrutinee_0123456789876543210+ = (applySing ((singFun1 @JustSym0) SJust)) sX+ in+ (id+ @(Sing (Case_0123456789876543210 x (Let0123456789876543210Scrutinee_0123456789876543210Sym1 x))))+ (case sScrutinee_0123456789876543210 of {+ SJust (sY :: Sing y)+ -> case SJust (sY :: Sing y) of {+ (_ :: Sing ('Just y :: Maybe Bool)) -> sY :: Sing (y :: Bool) } })+ sF3 (SJust (sA :: Sing a))+ = case SJust (sA :: Sing a) of {+ (_ :: Sing ('Just a :: Maybe Bool)) -> sing :: Sing "hi" }+ sF2 (sX :: Sing x)+ = case sX :: Sing x of {+ (_ :: Sing (x :: Maybe a)) -> sX :: Sing (x :: Maybe a) }+ sF1 (sX :: Sing x)+ = case sX :: Sing x of {+ (_ :: Sing (x :: Maybe Bool)) -> sX :: Sing (x :: Maybe Bool) }+ instance SingI (Foo9Sym0 :: (~>) a a) where+ sing = (singFun1 @Foo9Sym0) sFoo9+ instance SingI (Foo8Sym0 :: (~>) (Maybe a) (Maybe a)) where+ sing = (singFun1 @Foo8Sym0) sFoo8+ instance SingI (Foo7Sym0 :: (~>) a ((~>) b a)) where+ sing = (singFun2 @Foo7Sym0) sFoo7+ instance SingI d => SingI (Foo7Sym1 (d :: a) :: (~>) b a) where+ sing = (singFun1 @(Foo7Sym1 (d :: a))) (sFoo7 (sing @d))+ instance SingI (Foo6Sym0 :: (~>) (Maybe (Maybe a)) (Maybe (Maybe a))) where+ sing = (singFun1 @Foo6Sym0) sFoo6+ instance SingI (Foo5Sym0 :: (~>) (Maybe (Maybe a)) (Maybe (Maybe a))) where+ sing = (singFun1 @Foo5Sym0) sFoo5+ instance SingI (Foo4Sym0 :: (~>) (a, b) (b, a)) where+ sing = (singFun1 @Foo4Sym0) sFoo4+ instance SingI (Foo3Sym0 :: (~>) (Maybe a) a) where+ sing = (singFun1 @Foo3Sym0) sFoo3+ instance SingI (Foo2Sym0 :: (~>) (Maybe a) a) where+ sing = (singFun1 @Foo2Sym0) sFoo2+ instance SingI (Foo1Sym0 :: (~>) (Maybe a) a) where+ sing = (singFun1 @Foo1Sym0) sFoo1+ instance SingI GSym0 where+ sing = (singFun1 @GSym0) sG+ instance SingI F3Sym0 where+ sing = (singFun1 @F3Sym0) sF3+ instance SingI F2Sym0 where+ sing = (singFun1 @F2Sym0) sF2+ instance SingI F1Sym0 where+ sing = (singFun1 @F1Sym0) sF1
− tests/compile-and-dump/Singletons/T184.ghc86.template
@@ -1,499 +0,0 @@-Singletons/T184.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| boogie :: Maybe a -> Maybe Bool -> Maybe a- boogie ma mb- = do a <- ma- b <- mb- guard b- return a- zip' :: [a] -> [b] -> [(a, b)]- zip' xs ys = [(x, y) | x <- xs | y <- ys]- cartProd :: [a] -> [b] -> [(a, b)]- cartProd xs ys = [(x, y) | x <- xs, y <- ys]- trues :: [Bool] -> [Bool]- trues xs = [x | x <- xs, x] |]- ======>- boogie :: Maybe a -> Maybe Bool -> Maybe a- boogie ma mb- = do a <- ma- b <- mb- guard b- return a- zip' :: [a] -> [b] -> [(a, b)]- zip' xs ys = [(x, y) | x <- xs | y <- ys]- cartProd :: [a] -> [b] -> [(a, b)]- cartProd xs ys = [(x, y) | x <- xs, y <- ys]- trues :: [Bool] -> [Bool]- trues xs = [x | x <- xs, x]- type family Lambda_0123456789876543210 xs t where- Lambda_0123456789876543210 xs x = Apply (Apply (>>@#@$) (Apply GuardSym0 x)) (Apply ReturnSym0 x)- type Lambda_0123456789876543210Sym2 xs0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 xs0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 xs0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 xs0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 xs0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 xs0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 xs0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210- type family Lambda_0123456789876543210 xs ys x t where- Lambda_0123456789876543210 xs ys x y = Apply ReturnSym0 (Apply (Apply Tuple2Sym0 x) y)- type Lambda_0123456789876543210Sym4 xs0123456789876543210 ys0123456789876543210 x0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 xs0123456789876543210 ys0123456789876543210 x0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 x0123456789876543210 ys0123456789876543210 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 x0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall xs0123456789876543210- ys0123456789876543210- x0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 x0123456789876543210) arg) (Lambda_0123456789876543210Sym4 xs0123456789876543210 ys0123456789876543210 x0123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 x0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 x0123456789876543210 ys0123456789876543210 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 x0123456789876543210 ys0123456789876543210 xs0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 x0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall xs0123456789876543210- ys0123456789876543210- x0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210) arg) (Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 x0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) x0123456789876543210 = Lambda_0123456789876543210Sym3 ys0123456789876543210 xs0123456789876543210 x0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210- ys0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) ys0123456789876543210 = Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 xs0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 xs0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210- type family Lambda_0123456789876543210 xs ys t where- Lambda_0123456789876543210 xs ys x = Apply (Apply (>>=@#@$) ys) (Apply (Apply (Apply Lambda_0123456789876543210Sym0 xs) ys) x)- type Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall xs0123456789876543210- ys0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210) arg) (Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 ys0123456789876543210 xs0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210- ys0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) ys0123456789876543210 = Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 xs0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 xs0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210- type family Lambda_0123456789876543210 xs ys t where- Lambda_0123456789876543210 xs ys x = Apply ReturnSym0 x- type Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall xs0123456789876543210- ys0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210) arg) (Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 ys0123456789876543210 xs0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210- ys0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) ys0123456789876543210 = Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 xs0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 xs0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210- type family Lambda_0123456789876543210 xs ys t where- Lambda_0123456789876543210 xs ys y = Apply ReturnSym0 y- type Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall xs0123456789876543210- ys0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210) arg) (Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 ys0123456789876543210 xs0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210- ys0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) ys0123456789876543210 = Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 xs0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 xs0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210- type family Case_0123456789876543210 xs ys arg_0123456789876543210 t where- Case_0123456789876543210 xs ys arg_0123456789876543210 '(x,- y) = Apply ReturnSym0 (Apply (Apply Tuple2Sym0 x) y)- type family Lambda_0123456789876543210 xs ys t where- Lambda_0123456789876543210 xs ys arg_0123456789876543210 = Case_0123456789876543210 xs ys arg_0123456789876543210 arg_0123456789876543210- type Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall xs0123456789876543210- ys0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210) arg) (Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 ys0123456789876543210 xs0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210- ys0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) ys0123456789876543210 = Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 xs0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 xs0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210- type family Lambda_0123456789876543210 ma mb a t where- Lambda_0123456789876543210 ma mb a b = Apply (Apply (>>@#@$) (Apply GuardSym0 b)) (Apply ReturnSym0 a)- type Lambda_0123456789876543210Sym4 ma0123456789876543210 mb0123456789876543210 a0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 ma0123456789876543210 mb0123456789876543210 a0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 a0123456789876543210 mb0123456789876543210 ma0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())- data Lambda_0123456789876543210Sym3 ma0123456789876543210 mb0123456789876543210 a0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym3KindInference :: forall ma0123456789876543210- mb0123456789876543210- a0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym3 ma0123456789876543210 mb0123456789876543210 a0123456789876543210) arg) (Lambda_0123456789876543210Sym4 ma0123456789876543210 mb0123456789876543210 a0123456789876543210 arg) =>- Lambda_0123456789876543210Sym3 ma0123456789876543210 mb0123456789876543210 a0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym3 a0123456789876543210 mb0123456789876543210 ma0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 a0123456789876543210 mb0123456789876543210 ma0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 mb0123456789876543210 ma0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210 a0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall ma0123456789876543210- mb0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210) arg) (Lambda_0123456789876543210Sym3 ma0123456789876543210 mb0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210 a0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 mb0123456789876543210 ma0123456789876543210) a0123456789876543210 = Lambda_0123456789876543210Sym3 mb0123456789876543210 ma0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 ma0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 ma0123456789876543210 mb0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall ma0123456789876543210- mb0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 ma0123456789876543210) arg) (Lambda_0123456789876543210Sym2 ma0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 ma0123456789876543210 mb0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 ma0123456789876543210) mb0123456789876543210 = Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 ma0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall ma0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 ma0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 ma0123456789876543210 = Lambda_0123456789876543210Sym1 ma0123456789876543210- type family Lambda_0123456789876543210 ma mb t where- Lambda_0123456789876543210 ma mb a = Apply (Apply (>>=@#@$) mb) (Apply (Apply (Apply Lambda_0123456789876543210Sym0 ma) mb) a)- type Lambda_0123456789876543210Sym3 ma0123456789876543210 mb0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 ma0123456789876543210 mb0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 mb0123456789876543210 ma0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall ma0123456789876543210- mb0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210) arg) (Lambda_0123456789876543210Sym3 ma0123456789876543210 mb0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 mb0123456789876543210 ma0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 mb0123456789876543210 ma0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 ma0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 ma0123456789876543210 mb0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall ma0123456789876543210- mb0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 ma0123456789876543210) arg) (Lambda_0123456789876543210Sym2 ma0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 ma0123456789876543210 mb0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 ma0123456789876543210) mb0123456789876543210 = Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 ma0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall ma0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 ma0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 ma0123456789876543210 = Lambda_0123456789876543210Sym1 ma0123456789876543210- type TruesSym1 (a0123456789876543210 :: [Bool]) =- Trues a0123456789876543210- instance SuppressUnusedWarnings TruesSym0 where- suppressUnusedWarnings = snd (((,) TruesSym0KindInference) ())- data TruesSym0 :: (~>) [Bool] [Bool]- where- TruesSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply TruesSym0 arg) (TruesSym1 arg) =>- TruesSym0 a0123456789876543210- type instance Apply TruesSym0 a0123456789876543210 = Trues a0123456789876543210- type CartProdSym2 (a0123456789876543210 :: [a0123456789876543210]) (a0123456789876543210 :: [b0123456789876543210]) =- CartProd a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (CartProdSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) CartProdSym1KindInference) ())- data CartProdSym1 (a0123456789876543210 :: [a0123456789876543210]) :: forall b0123456789876543210.- (~>) [b0123456789876543210] [(a0123456789876543210,- b0123456789876543210)]- where- CartProdSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (CartProdSym1 a0123456789876543210) arg) (CartProdSym2 a0123456789876543210 arg) =>- CartProdSym1 a0123456789876543210 a0123456789876543210- type instance Apply (CartProdSym1 a0123456789876543210) a0123456789876543210 = CartProd a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings CartProdSym0 where- suppressUnusedWarnings = snd (((,) CartProdSym0KindInference) ())- data CartProdSym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) [a0123456789876543210] ((~>) [b0123456789876543210] [(a0123456789876543210,- b0123456789876543210)])- where- CartProdSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply CartProdSym0 arg) (CartProdSym1 arg) =>- CartProdSym0 a0123456789876543210- type instance Apply CartProdSym0 a0123456789876543210 = CartProdSym1 a0123456789876543210- type Zip'Sym2 (a0123456789876543210 :: [a0123456789876543210]) (a0123456789876543210 :: [b0123456789876543210]) =- Zip' a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Zip'Sym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) Zip'Sym1KindInference) ())- data Zip'Sym1 (a0123456789876543210 :: [a0123456789876543210]) :: forall b0123456789876543210.- (~>) [b0123456789876543210] [(a0123456789876543210,- b0123456789876543210)]- where- Zip'Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Zip'Sym1 a0123456789876543210) arg) (Zip'Sym2 a0123456789876543210 arg) =>- Zip'Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Zip'Sym1 a0123456789876543210) a0123456789876543210 = Zip' a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Zip'Sym0 where- suppressUnusedWarnings = snd (((,) Zip'Sym0KindInference) ())- data Zip'Sym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) [a0123456789876543210] ((~>) [b0123456789876543210] [(a0123456789876543210,- b0123456789876543210)])- where- Zip'Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Zip'Sym0 arg) (Zip'Sym1 arg) =>- Zip'Sym0 a0123456789876543210- type instance Apply Zip'Sym0 a0123456789876543210 = Zip'Sym1 a0123456789876543210- type BoogieSym2 (a0123456789876543210 :: Maybe a0123456789876543210) (a0123456789876543210 :: Maybe Bool) =- Boogie a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (BoogieSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) BoogieSym1KindInference) ())- data BoogieSym1 (a0123456789876543210 :: Maybe a0123456789876543210) :: (~>) (Maybe Bool) (Maybe a0123456789876543210)- where- BoogieSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (BoogieSym1 a0123456789876543210) arg) (BoogieSym2 a0123456789876543210 arg) =>- BoogieSym1 a0123456789876543210 a0123456789876543210- type instance Apply (BoogieSym1 a0123456789876543210) a0123456789876543210 = Boogie a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings BoogieSym0 where- suppressUnusedWarnings = snd (((,) BoogieSym0KindInference) ())- data BoogieSym0 :: forall a0123456789876543210.- (~>) (Maybe a0123456789876543210) ((~>) (Maybe Bool) (Maybe a0123456789876543210))- where- BoogieSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply BoogieSym0 arg) (BoogieSym1 arg) =>- BoogieSym0 a0123456789876543210- type instance Apply BoogieSym0 a0123456789876543210 = BoogieSym1 a0123456789876543210- type family Trues (a :: [Bool]) :: [Bool] where- Trues xs = Apply (Apply (>>=@#@$) xs) (Apply Lambda_0123456789876543210Sym0 xs)- type family CartProd (a :: [a]) (a :: [b]) :: [(a, b)] where- CartProd xs ys = Apply (Apply (>>=@#@$) xs) (Apply (Apply Lambda_0123456789876543210Sym0 xs) ys)- type family Zip' (a :: [a]) (a :: [b]) :: [(a, b)] where- Zip' xs ys = Apply (Apply (>>=@#@$) (Apply (Apply MzipSym0 (Apply (Apply (>>=@#@$) xs) (Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))) (Apply (Apply (>>=@#@$) ys) (Apply (Apply Lambda_0123456789876543210Sym0 xs) ys)))) (Apply (Apply Lambda_0123456789876543210Sym0 xs) ys)- type family Boogie (a :: Maybe a) (a :: Maybe Bool) :: Maybe a where- Boogie ma mb = Apply (Apply (>>=@#@$) ma) (Apply (Apply Lambda_0123456789876543210Sym0 ma) mb)- sTrues ::- forall (t :: [Bool]). Sing t -> Sing (Apply TruesSym0 t :: [Bool])- sCartProd ::- forall a b (t :: [a]) (t :: [b]).- Sing t- -> Sing t -> Sing (Apply (Apply CartProdSym0 t) t :: [(a, b)])- sZip' ::- forall a b (t :: [a]) (t :: [b]).- Sing t -> Sing t -> Sing (Apply (Apply Zip'Sym0 t) t :: [(a, b)])- sBoogie ::- forall a (t :: Maybe a) (t :: Maybe Bool).- Sing t -> Sing t -> Sing (Apply (Apply BoogieSym0 t) t :: Maybe a)- sTrues (sXs :: Sing xs)- = (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sXs))- ((singFun1 @(Apply Lambda_0123456789876543210Sym0 xs))- (\ sX- -> case sX of {- (_ :: Sing x)- -> (applySing- ((applySing ((singFun2 @(>>@#@$)) (%>>)))- ((applySing ((singFun1 @GuardSym0) sGuard)) sX)))- ((applySing ((singFun1 @ReturnSym0) sReturn)) sX) }))- sCartProd (sXs :: Sing xs) (sYs :: Sing ys)- = (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sXs))- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))- (\ sX- -> case sX of {- (_ :: Sing x)- -> (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sYs))- ((singFun1- @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 xs) ys) x))- (\ sY- -> case sY of {- (_ :: Sing y)- -> (applySing ((singFun1 @ReturnSym0) sReturn))- ((applySing- ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX))- sY) })) }))- sZip' (sXs :: Sing xs) (sYs :: Sing ys)- = (applySing- ((applySing ((singFun2 @(>>=@#@$)) (%>>=)))- ((applySing- ((applySing ((singFun2 @MzipSym0) sMzip))- ((applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sXs))- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))- (\ sX- -> case sX of {- (_ :: Sing x)- -> (applySing ((singFun1 @ReturnSym0) sReturn)) sX })))))- ((applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sYs))- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))- (\ sY- -> case sY of {- (_ :: Sing y)- -> (applySing ((singFun1 @ReturnSym0) sReturn)) sY }))))))- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))- (\ sArg_0123456789876543210- -> case sArg_0123456789876543210 of {- (_ :: Sing arg_0123456789876543210)- -> (case sArg_0123456789876543210 of {- STuple2 (sX :: Sing x) (sY :: Sing y)- -> (applySing ((singFun1 @ReturnSym0) sReturn))- ((applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX))- sY) }) ::- Sing (Case_0123456789876543210 xs ys arg_0123456789876543210 arg_0123456789876543210) }))- sBoogie (sMa :: Sing ma) (sMb :: Sing mb)- = (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sMa))- ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 ma) mb))- (\ sA- -> case sA of {- (_ :: Sing a)- -> (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sMb))- ((singFun1- @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 ma) mb) a))- (\ sB- -> case sB of {- (_ :: Sing b)- -> (applySing- ((applySing ((singFun2 @(>>@#@$)) (%>>)))- ((applySing ((singFun1 @GuardSym0) sGuard)) sB)))- ((applySing ((singFun1 @ReturnSym0) sReturn))- sA) })) }))- instance SingI (TruesSym0 :: (~>) [Bool] [Bool]) where- sing = (singFun1 @TruesSym0) sTrues- instance SingI (CartProdSym0 :: (~>) [a] ((~>) [b] [(a, b)])) where- sing = (singFun2 @CartProdSym0) sCartProd- instance SingI d =>- SingI (CartProdSym1 (d :: [a]) :: (~>) [b] [(a, b)]) where- sing = (singFun1 @(CartProdSym1 (d :: [a]))) (sCartProd (sing @d))- instance SingI (Zip'Sym0 :: (~>) [a] ((~>) [b] [(a, b)])) where- sing = (singFun2 @Zip'Sym0) sZip'- instance SingI d =>- SingI (Zip'Sym1 (d :: [a]) :: (~>) [b] [(a, b)]) where- sing = (singFun1 @(Zip'Sym1 (d :: [a]))) (sZip' (sing @d))- instance SingI (BoogieSym0 :: (~>) (Maybe a) ((~>) (Maybe Bool) (Maybe a))) where- sing = (singFun2 @BoogieSym0) sBoogie- instance SingI d =>- SingI (BoogieSym1 (d :: Maybe a) :: (~>) (Maybe Bool) (Maybe a)) where- sing = (singFun1 @(BoogieSym1 (d :: Maybe a))) (sBoogie (sing @d))
+ tests/compile-and-dump/Singletons/T184.ghc88.template view
@@ -0,0 +1,500 @@+Singletons/T184.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| boogie :: Maybe a -> Maybe Bool -> Maybe a+ boogie ma mb+ = do a <- ma+ b <- mb+ guard b+ return a+ zip' :: [a] -> [b] -> [(a, b)]+ zip' xs ys = [(x, y) | x <- xs | y <- ys]+ cartProd :: [a] -> [b] -> [(a, b)]+ cartProd xs ys = [(x, y) | x <- xs, y <- ys]+ trues :: [Bool] -> [Bool]+ trues xs = [x | x <- xs, x] |]+ ======>+ boogie :: Maybe a -> Maybe Bool -> Maybe a+ boogie ma mb+ = do a <- ma+ b <- mb+ guard b+ return a+ zip' :: [a] -> [b] -> [(a, b)]+ zip' xs ys = [(x, y) | x <- xs | y <- ys]+ cartProd :: [a] -> [b] -> [(a, b)]+ cartProd xs ys = [(x, y) | x <- xs, y <- ys]+ trues :: [Bool] -> [Bool]+ trues xs = [x | x <- xs, x]+ type family Lambda_0123456789876543210 xs t where+ Lambda_0123456789876543210 xs x = Apply (Apply (>>@#@$) (Apply GuardSym0 x)) (Apply ReturnSym0 x)+ type Lambda_0123456789876543210Sym2 xs0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 xs0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 xs0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 xs0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 xs0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 xs0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 xs0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210+ type family Lambda_0123456789876543210 x xs ys t where+ Lambda_0123456789876543210 x xs ys y = Apply ReturnSym0 (Apply (Apply Tuple2Sym0 x) y)+ type Lambda_0123456789876543210Sym4 x0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 x0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 ys0123456789876543210 xs0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 x0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall x0123456789876543210+ xs0123456789876543210+ ys0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 x0123456789876543210 xs0123456789876543210 ys0123456789876543210) arg) (Lambda_0123456789876543210Sym4 x0123456789876543210 xs0123456789876543210 ys0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 x0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 ys0123456789876543210 xs0123456789876543210 x0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 ys0123456789876543210 xs0123456789876543210 x0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 xs0123456789876543210 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 x0123456789876543210 xs0123456789876543210 ys0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall x0123456789876543210+ xs0123456789876543210+ ys0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 x0123456789876543210 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym3 x0123456789876543210 xs0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 x0123456789876543210 xs0123456789876543210 ys0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 xs0123456789876543210 x0123456789876543210) ys0123456789876543210 = Lambda_0123456789876543210Sym3 xs0123456789876543210 x0123456789876543210 ys0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 x0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 x0123456789876543210 xs0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall x0123456789876543210+ xs0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) arg) (Lambda_0123456789876543210Sym2 x0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 x0123456789876543210 xs0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 x0123456789876543210) xs0123456789876543210 = Lambda_0123456789876543210Sym2 x0123456789876543210 xs0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 x0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall x0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 x0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 x0123456789876543210 = Lambda_0123456789876543210Sym1 x0123456789876543210+ type family Lambda_0123456789876543210 xs ys t where+ Lambda_0123456789876543210 xs ys x = Apply (Apply (>>=@#@$) ys) (Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) xs) ys)+ type Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall xs0123456789876543210+ ys0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210) arg) (Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 ys0123456789876543210 xs0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210+ ys0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) ys0123456789876543210 = Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 xs0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 xs0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210+ type family Lambda_0123456789876543210 xs ys t where+ Lambda_0123456789876543210 xs ys x = Apply ReturnSym0 x+ type Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall xs0123456789876543210+ ys0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210) arg) (Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 ys0123456789876543210 xs0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210+ ys0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) ys0123456789876543210 = Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 xs0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 xs0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210+ type family Lambda_0123456789876543210 xs ys t where+ Lambda_0123456789876543210 xs ys y = Apply ReturnSym0 y+ type Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall xs0123456789876543210+ ys0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210) arg) (Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 ys0123456789876543210 xs0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210+ ys0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) ys0123456789876543210 = Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 xs0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 xs0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210+ type family Case_0123456789876543210 arg_0123456789876543210 xs ys t where+ Case_0123456789876543210 arg_0123456789876543210 xs ys '(x,+ y) = Apply ReturnSym0 (Apply (Apply Tuple2Sym0 x) y)+ type family Lambda_0123456789876543210 xs ys t where+ Lambda_0123456789876543210 xs ys arg_0123456789876543210 = Case_0123456789876543210 arg_0123456789876543210 xs ys arg_0123456789876543210+ type Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall xs0123456789876543210+ ys0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210) arg) (Lambda_0123456789876543210Sym3 xs0123456789876543210 ys0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 ys0123456789876543210 xs0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 ys0123456789876543210 xs0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 xs0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall xs0123456789876543210+ ys0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) arg) (Lambda_0123456789876543210Sym2 xs0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 xs0123456789876543210 ys0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 xs0123456789876543210) ys0123456789876543210 = Lambda_0123456789876543210Sym2 xs0123456789876543210 ys0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 xs0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall xs0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 xs0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 xs0123456789876543210 = Lambda_0123456789876543210Sym1 xs0123456789876543210+ type family Lambda_0123456789876543210 a ma mb t where+ Lambda_0123456789876543210 a ma mb b = Apply (Apply (>>@#@$) (Apply GuardSym0 b)) (Apply ReturnSym0 a)+ type Lambda_0123456789876543210Sym4 a0123456789876543210 ma0123456789876543210 mb0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 a0123456789876543210 ma0123456789876543210 mb0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym3 mb0123456789876543210 ma0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym3KindInference) ())+ data Lambda_0123456789876543210Sym3 a0123456789876543210 ma0123456789876543210 mb0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym3KindInference :: forall a0123456789876543210+ ma0123456789876543210+ mb0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym3 a0123456789876543210 ma0123456789876543210 mb0123456789876543210) arg) (Lambda_0123456789876543210Sym4 a0123456789876543210 ma0123456789876543210 mb0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym3 a0123456789876543210 ma0123456789876543210 mb0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym3 mb0123456789876543210 ma0123456789876543210 a0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 mb0123456789876543210 ma0123456789876543210 a0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 ma0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 a0123456789876543210 ma0123456789876543210 mb0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ ma0123456789876543210+ mb0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 a0123456789876543210 ma0123456789876543210) arg) (Lambda_0123456789876543210Sym3 a0123456789876543210 ma0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 a0123456789876543210 ma0123456789876543210 mb0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 ma0123456789876543210 a0123456789876543210) mb0123456789876543210 = Lambda_0123456789876543210Sym3 ma0123456789876543210 a0123456789876543210 mb0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 a0123456789876543210 ma0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ ma0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) arg) (Lambda_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 a0123456789876543210 ma0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 a0123456789876543210) ma0123456789876543210 = Lambda_0123456789876543210Sym2 a0123456789876543210 ma0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 a0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 a0123456789876543210 = Lambda_0123456789876543210Sym1 a0123456789876543210+ type family Lambda_0123456789876543210 ma mb t where+ Lambda_0123456789876543210 ma mb a = Apply (Apply (>>=@#@$) mb) (Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) ma) mb)+ type Lambda_0123456789876543210Sym3 ma0123456789876543210 mb0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 ma0123456789876543210 mb0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 mb0123456789876543210 ma0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall ma0123456789876543210+ mb0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210) arg) (Lambda_0123456789876543210Sym3 ma0123456789876543210 mb0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 mb0123456789876543210 ma0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 mb0123456789876543210 ma0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 ma0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 ma0123456789876543210 mb0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall ma0123456789876543210+ mb0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 ma0123456789876543210) arg) (Lambda_0123456789876543210Sym2 ma0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 ma0123456789876543210 mb0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 ma0123456789876543210) mb0123456789876543210 = Lambda_0123456789876543210Sym2 ma0123456789876543210 mb0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 ma0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall ma0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 ma0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 ma0123456789876543210 = Lambda_0123456789876543210Sym1 ma0123456789876543210+ type TruesSym1 (a0123456789876543210 :: [Bool]) =+ Trues a0123456789876543210+ instance SuppressUnusedWarnings TruesSym0 where+ suppressUnusedWarnings = snd (((,) TruesSym0KindInference) ())+ data TruesSym0 :: (~>) [Bool] [Bool]+ where+ TruesSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply TruesSym0 arg) (TruesSym1 arg) =>+ TruesSym0 a0123456789876543210+ type instance Apply TruesSym0 a0123456789876543210 = Trues a0123456789876543210+ type CartProdSym2 (a0123456789876543210 :: [a0123456789876543210]) (a0123456789876543210 :: [b0123456789876543210]) =+ CartProd a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (CartProdSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) CartProdSym1KindInference) ())+ data CartProdSym1 (a0123456789876543210 :: [a0123456789876543210]) :: forall b0123456789876543210.+ (~>) [b0123456789876543210] [(a0123456789876543210,+ b0123456789876543210)]+ where+ CartProdSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (CartProdSym1 a0123456789876543210) arg) (CartProdSym2 a0123456789876543210 arg) =>+ CartProdSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (CartProdSym1 a0123456789876543210) a0123456789876543210 = CartProd a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings CartProdSym0 where+ suppressUnusedWarnings = snd (((,) CartProdSym0KindInference) ())+ data CartProdSym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) [a0123456789876543210] ((~>) [b0123456789876543210] [(a0123456789876543210,+ b0123456789876543210)])+ where+ CartProdSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply CartProdSym0 arg) (CartProdSym1 arg) =>+ CartProdSym0 a0123456789876543210+ type instance Apply CartProdSym0 a0123456789876543210 = CartProdSym1 a0123456789876543210+ type Zip'Sym2 (a0123456789876543210 :: [a0123456789876543210]) (a0123456789876543210 :: [b0123456789876543210]) =+ Zip' a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Zip'Sym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) Zip'Sym1KindInference) ())+ data Zip'Sym1 (a0123456789876543210 :: [a0123456789876543210]) :: forall b0123456789876543210.+ (~>) [b0123456789876543210] [(a0123456789876543210,+ b0123456789876543210)]+ where+ Zip'Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Zip'Sym1 a0123456789876543210) arg) (Zip'Sym2 a0123456789876543210 arg) =>+ Zip'Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Zip'Sym1 a0123456789876543210) a0123456789876543210 = Zip' a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Zip'Sym0 where+ suppressUnusedWarnings = snd (((,) Zip'Sym0KindInference) ())+ data Zip'Sym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) [a0123456789876543210] ((~>) [b0123456789876543210] [(a0123456789876543210,+ b0123456789876543210)])+ where+ Zip'Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Zip'Sym0 arg) (Zip'Sym1 arg) =>+ Zip'Sym0 a0123456789876543210+ type instance Apply Zip'Sym0 a0123456789876543210 = Zip'Sym1 a0123456789876543210+ type BoogieSym2 (a0123456789876543210 :: Maybe a0123456789876543210) (a0123456789876543210 :: Maybe Bool) =+ Boogie a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (BoogieSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BoogieSym1KindInference) ())+ data BoogieSym1 (a0123456789876543210 :: Maybe a0123456789876543210) :: (~>) (Maybe Bool) (Maybe a0123456789876543210)+ where+ BoogieSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (BoogieSym1 a0123456789876543210) arg) (BoogieSym2 a0123456789876543210 arg) =>+ BoogieSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (BoogieSym1 a0123456789876543210) a0123456789876543210 = Boogie a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings BoogieSym0 where+ suppressUnusedWarnings = snd (((,) BoogieSym0KindInference) ())+ data BoogieSym0 :: forall a0123456789876543210.+ (~>) (Maybe a0123456789876543210) ((~>) (Maybe Bool) (Maybe a0123456789876543210))+ where+ BoogieSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply BoogieSym0 arg) (BoogieSym1 arg) =>+ BoogieSym0 a0123456789876543210+ type instance Apply BoogieSym0 a0123456789876543210 = BoogieSym1 a0123456789876543210+ type family Trues (a :: [Bool]) :: [Bool] where+ Trues xs = Apply (Apply (>>=@#@$) xs) (Apply Lambda_0123456789876543210Sym0 xs)+ type family CartProd (a :: [a]) (a :: [b]) :: [(a, b)] where+ CartProd xs ys = Apply (Apply (>>=@#@$) xs) (Apply (Apply Lambda_0123456789876543210Sym0 xs) ys)+ type family Zip' (a :: [a]) (a :: [b]) :: [(a, b)] where+ Zip' xs ys = Apply (Apply (>>=@#@$) (Apply (Apply MzipSym0 (Apply (Apply (>>=@#@$) xs) (Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))) (Apply (Apply (>>=@#@$) ys) (Apply (Apply Lambda_0123456789876543210Sym0 xs) ys)))) (Apply (Apply Lambda_0123456789876543210Sym0 xs) ys)+ type family Boogie (a :: Maybe a) (a :: Maybe Bool) :: Maybe a where+ Boogie ma mb = Apply (Apply (>>=@#@$) ma) (Apply (Apply Lambda_0123456789876543210Sym0 ma) mb)+ sTrues ::+ forall (t :: [Bool]). Sing t -> Sing (Apply TruesSym0 t :: [Bool])+ sCartProd ::+ forall a b (t :: [a]) (t :: [b]).+ Sing t+ -> Sing t -> Sing (Apply (Apply CartProdSym0 t) t :: [(a, b)])+ sZip' ::+ forall a b (t :: [a]) (t :: [b]).+ Sing t -> Sing t -> Sing (Apply (Apply Zip'Sym0 t) t :: [(a, b)])+ sBoogie ::+ forall a (t :: Maybe a) (t :: Maybe Bool).+ Sing t -> Sing t -> Sing (Apply (Apply BoogieSym0 t) t :: Maybe a)+ sTrues (sXs :: Sing xs)+ = (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sXs))+ ((singFun1 @(Apply Lambda_0123456789876543210Sym0 xs))+ (\ sX+ -> case sX of {+ (_ :: Sing x)+ -> (applySing+ ((applySing ((singFun2 @(>>@#@$)) (%>>)))+ ((applySing ((singFun1 @GuardSym0) sGuard)) sX)))+ ((applySing ((singFun1 @ReturnSym0) sReturn)) sX) }))+ sCartProd (sXs :: Sing xs) (sYs :: Sing ys)+ = (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sXs))+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))+ (\ sX+ -> case sX of {+ (_ :: Sing x)+ -> (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sYs))+ ((singFun1+ @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 x) xs) ys))+ (\ sY+ -> case sY of {+ (_ :: Sing y)+ -> (applySing ((singFun1 @ReturnSym0) sReturn))+ ((applySing+ ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX))+ sY) })) }))+ sZip' (sXs :: Sing xs) (sYs :: Sing ys)+ = (applySing+ ((applySing ((singFun2 @(>>=@#@$)) (%>>=)))+ ((applySing+ ((applySing ((singFun2 @MzipSym0) sMzip))+ ((applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sXs))+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))+ (\ sX+ -> case sX of {+ (_ :: Sing x)+ -> (applySing ((singFun1 @ReturnSym0) sReturn)) sX })))))+ ((applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sYs))+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))+ (\ sY+ -> case sY of {+ (_ :: Sing y)+ -> (applySing ((singFun1 @ReturnSym0) sReturn)) sY }))))))+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 xs) ys))+ (\ sArg_0123456789876543210+ -> case sArg_0123456789876543210 of {+ (_ :: Sing arg_0123456789876543210)+ -> (id+ @(Sing (Case_0123456789876543210 arg_0123456789876543210 xs ys arg_0123456789876543210)))+ (case sArg_0123456789876543210 of {+ STuple2 (sX :: Sing x) (sY :: Sing y)+ -> (applySing ((singFun1 @ReturnSym0) sReturn))+ ((applySing ((applySing ((singFun2 @Tuple2Sym0) STuple2)) sX))+ sY) }) }))+ sBoogie (sMa :: Sing ma) (sMb :: Sing mb)+ = (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sMa))+ ((singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 ma) mb))+ (\ sA+ -> case sA of {+ (_ :: Sing a)+ -> (applySing ((applySing ((singFun2 @(>>=@#@$)) (%>>=))) sMb))+ ((singFun1+ @(Apply (Apply (Apply Lambda_0123456789876543210Sym0 a) ma) mb))+ (\ sB+ -> case sB of {+ (_ :: Sing b)+ -> (applySing+ ((applySing ((singFun2 @(>>@#@$)) (%>>)))+ ((applySing ((singFun1 @GuardSym0) sGuard)) sB)))+ ((applySing ((singFun1 @ReturnSym0) sReturn))+ sA) })) }))+ instance SingI (TruesSym0 :: (~>) [Bool] [Bool]) where+ sing = (singFun1 @TruesSym0) sTrues+ instance SingI (CartProdSym0 :: (~>) [a] ((~>) [b] [(a, b)])) where+ sing = (singFun2 @CartProdSym0) sCartProd+ instance SingI d =>+ SingI (CartProdSym1 (d :: [a]) :: (~>) [b] [(a, b)]) where+ sing = (singFun1 @(CartProdSym1 (d :: [a]))) (sCartProd (sing @d))+ instance SingI (Zip'Sym0 :: (~>) [a] ((~>) [b] [(a, b)])) where+ sing = (singFun2 @Zip'Sym0) sZip'+ instance SingI d =>+ SingI (Zip'Sym1 (d :: [a]) :: (~>) [b] [(a, b)]) where+ sing = (singFun1 @(Zip'Sym1 (d :: [a]))) (sZip' (sing @d))+ instance SingI (BoogieSym0 :: (~>) (Maybe a) ((~>) (Maybe Bool) (Maybe a))) where+ sing = (singFun2 @BoogieSym0) sBoogie+ instance SingI d =>+ SingI (BoogieSym1 (d :: Maybe a) :: (~>) (Maybe Bool) (Maybe a)) where+ sing = (singFun1 @(BoogieSym1 (d :: Maybe a))) (sBoogie (sing @d))
− tests/compile-and-dump/Singletons/T187.ghc86.template
@@ -1,57 +0,0 @@-Singletons/T187.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Empty- - deriving instance Ord Empty- deriving instance Eq Empty |]- ======>- data Empty- deriving instance Eq Empty- deriving instance Ord Empty- type family Compare_0123456789876543210 (a :: Empty) (a :: Empty) :: Ordering where- Compare_0123456789876543210 _ _ = EQSym0- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Empty) (a0123456789876543210 :: Empty) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Empty) :: (~>) Empty Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: (~>) Empty ((~>) Empty Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd Empty where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family Equals_0123456789876543210 (a :: Empty) (b :: Empty) :: Bool where- Equals_0123456789876543210 (_ :: Empty) (_ :: Empty) = TrueSym0- instance PEq Empty where- type (==) a b = Equals_0123456789876543210 a b- data instance Sing :: Empty -> GHC.Types.Type- type SEmpty = (Sing :: Empty -> GHC.Types.Type)- instance SingKind Empty where- type Demote Empty = Empty- fromSing x = case x of- toSing x = SomeSing (case x of)- instance SOrd Empty where- sCompare ::- forall (t1 :: Empty) (t2 :: Empty).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun Empty ((~>) Empty Ordering)- -> GHC.Types.Type) t1) t2)- sCompare _ _ = SEQ- instance SEq Empty where- (%==) _ _ = STrue- instance SDecide Empty where- (%~) x _ = Proved (case x of)
+ tests/compile-and-dump/Singletons/T187.ghc88.template view
@@ -0,0 +1,65 @@+Singletons/T187.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Empty+ + deriving instance Ord Empty+ deriving instance Eq Empty |]+ ======>+ data Empty+ deriving instance Eq Empty+ deriving instance Ord Empty+ type family Compare_0123456789876543210 (a :: Empty) (a :: Empty) :: Ordering where+ Compare_0123456789876543210 _ _ = EQSym0+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Empty) (a0123456789876543210 :: Empty) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Empty) :: (~>) Empty Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: (~>) Empty ((~>) Empty Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd Empty where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family Equals_0123456789876543210 (a :: Empty) (b :: Empty) :: Bool where+ Equals_0123456789876543210 (_ :: Empty) (_ :: Empty) = TrueSym0+ instance PEq Empty where+ type (==) a b = Equals_0123456789876543210 a b+ data SEmpty :: Empty -> GHC.Types.Type+ type instance Sing @Empty = SEmpty+ instance SingKind Empty where+ type Demote Empty = Empty+ fromSing x = case x of+ toSing x = SomeSing (case x of)+ instance SOrd Empty where+ sCompare ::+ forall (t1 :: Empty) (t2 :: Empty).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun Empty ((~>) Empty Ordering)+ -> GHC.Types.Type) t1) t2)+ sCompare _ _ = SEQ+ instance SEq Empty where+ (%==) _ _ = STrue+ instance SDecide Empty where+ (%~) x _ = Proved (case x of)+ instance Data.Type.Equality.TestEquality (SEmpty :: Empty+ -> GHC.Types.Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance Data.Type.Coercion.TestCoercion (SEmpty :: Empty+ -> GHC.Types.Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion
− tests/compile-and-dump/Singletons/T190.ghc86.template
@@ -1,188 +0,0 @@-Singletons/T190.hs:0:0:: Splicing declarations- singletons- [d| data T- = T- deriving (Eq, Ord, Enum, Bounded, Show) |]- ======>- data T- = T- deriving (Eq, Ord, Enum, Bounded, Show)- type TSym0 = T- type family Compare_0123456789876543210 (a :: T) (a :: T) :: Ordering where- Compare_0123456789876543210 T T = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: T) (a0123456789876543210 :: T) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: T) :: (~>) T Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: (~>) T ((~>) T Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd T where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family Case_0123456789876543210 n t where- Case_0123456789876543210 n 'True = TSym0- Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"- type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: T where- ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0))- type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) =- ToEnum_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())- data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat T- where- ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>- ToEnum_0123456789876543210Sym0 a0123456789876543210- type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210- type family FromEnum_0123456789876543210 (a :: T) :: GHC.Types.Nat where- FromEnum_0123456789876543210 T = Data.Singletons.Prelude.Num.FromInteger 0- type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: T) =- FromEnum_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())- data FromEnum_0123456789876543210Sym0 :: (~>) T GHC.Types.Nat- where- FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>- FromEnum_0123456789876543210Sym0 a0123456789876543210- type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210- instance PEnum T where- type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a- type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a- type family MinBound_0123456789876543210 :: T where- MinBound_0123456789876543210 = TSym0- type MinBound_0123456789876543210Sym0 =- MinBound_0123456789876543210- type family MaxBound_0123456789876543210 :: T where- MaxBound_0123456789876543210 = TSym0- type MaxBound_0123456789876543210Sym0 =- MaxBound_0123456789876543210- instance PBounded T where- type MinBound = MinBound_0123456789876543210Sym0- type MaxBound = MaxBound_0123456789876543210Sym0- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: T) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where- ShowsPrec_0123456789876543210 _ T a_0123456789876543210 = Apply (Apply ShowStringSym0 "T") a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T) (a0123456789876543210 :: GHC.Types.Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T) :: (~>) GHC.Types.Symbol GHC.Types.Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow T where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family Equals_0123456789876543210 (a :: T) (b :: T) :: Bool where- Equals_0123456789876543210 T T = TrueSym0- Equals_0123456789876543210 (_ :: T) (_ :: T) = FalseSym0- instance PEq T where- type (==) a b = Equals_0123456789876543210 a b- data instance Sing :: T -> GHC.Types.Type where ST :: Sing T- type ST = (Sing :: T -> GHC.Types.Type)- instance SingKind T where- type Demote T = T- fromSing ST = T- toSing T = SomeSing ST- instance SOrd T where- sCompare ::- forall (t1 :: T) (t2 :: T).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun T ((~>) T Ordering)- -> GHC.Types.Type) t1) t2)- sCompare ST ST- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- Data.Singletons.Prelude.Instances.SNil- instance SEnum T where- sToEnum ::- forall (t :: GHC.Types.Nat).- Sing t- -> Sing (Apply (Data.Singletons.Prelude.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat T- -> GHC.Types.Type) t)- sFromEnum ::- forall (t :: T).- Sing t- -> Sing (Apply (Data.Singletons.Prelude.Enum.FromEnumSym0 :: TyFun T GHC.Types.Nat- -> GHC.Types.Type) t)- sToEnum (sN :: Sing n)- = (case- (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0))- of- STrue -> ST- SFalse -> sError (sing :: Sing "toEnum: bad argument")) ::- Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0)))- sFromEnum ST- = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0)- instance SBounded T where- sMinBound :: Sing (MinBoundSym0 :: T)- sMaxBound :: Sing (MaxBoundSym0 :: T)- sMinBound = ST- sMaxBound = ST- instance SShow T where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: T) (t3 :: GHC.Types.Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol))- -> GHC.Types.Type) t1) t2) t3)- sShowsPrec- _- ST- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "T")))- sA_0123456789876543210- instance SEq T where- (%==) ST ST = STrue- instance SDecide T where- (%~) ST ST = Proved Refl- deriving instance Show (Sing (z :: T))- instance SingI T where- sing = ST
+ tests/compile-and-dump/Singletons/T190.ghc88.template view
@@ -0,0 +1,198 @@+Singletons/T190.hs:0:0:: Splicing declarations+ singletons+ [d| data T+ = T+ deriving (Eq, Ord, Enum, Bounded, Show) |]+ ======>+ data T+ = T+ deriving (Eq, Ord, Enum, Bounded, Show)+ type TSym0 = T+ type family Compare_0123456789876543210 (a :: T) (a :: T) :: Ordering where+ Compare_0123456789876543210 T T = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) '[]+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: T) (a0123456789876543210 :: T) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: T) :: (~>) T Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: (~>) T ((~>) T Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd T where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family Case_0123456789876543210 n t where+ Case_0123456789876543210 n 'True = TSym0+ Case_0123456789876543210 n 'False = Apply ErrorSym0 "toEnum: bad argument"+ type family ToEnum_0123456789876543210 (a :: GHC.Types.Nat) :: T where+ ToEnum_0123456789876543210 n = Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0))+ type ToEnum_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) =+ ToEnum_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ToEnum_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ToEnum_0123456789876543210Sym0KindInference) ())+ data ToEnum_0123456789876543210Sym0 :: (~>) GHC.Types.Nat T+ where+ ToEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ToEnum_0123456789876543210Sym0 arg) (ToEnum_0123456789876543210Sym1 arg) =>+ ToEnum_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ToEnum_0123456789876543210Sym0 a0123456789876543210 = ToEnum_0123456789876543210 a0123456789876543210+ type family FromEnum_0123456789876543210 (a :: T) :: GHC.Types.Nat where+ FromEnum_0123456789876543210 T = Data.Singletons.Prelude.Num.FromInteger 0+ type FromEnum_0123456789876543210Sym1 (a0123456789876543210 :: T) =+ FromEnum_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FromEnum_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) FromEnum_0123456789876543210Sym0KindInference) ())+ data FromEnum_0123456789876543210Sym0 :: (~>) T GHC.Types.Nat+ where+ FromEnum_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FromEnum_0123456789876543210Sym0 arg) (FromEnum_0123456789876543210Sym1 arg) =>+ FromEnum_0123456789876543210Sym0 a0123456789876543210+ type instance Apply FromEnum_0123456789876543210Sym0 a0123456789876543210 = FromEnum_0123456789876543210 a0123456789876543210+ instance PEnum T where+ type ToEnum a = Apply ToEnum_0123456789876543210Sym0 a+ type FromEnum a = Apply FromEnum_0123456789876543210Sym0 a+ type family MinBound_0123456789876543210 :: T where+ MinBound_0123456789876543210 = TSym0+ type MinBound_0123456789876543210Sym0 =+ MinBound_0123456789876543210+ type family MaxBound_0123456789876543210 :: T where+ MaxBound_0123456789876543210 = TSym0+ type MaxBound_0123456789876543210Sym0 =+ MaxBound_0123456789876543210+ instance PBounded T where+ type MinBound = MinBound_0123456789876543210Sym0+ type MaxBound = MaxBound_0123456789876543210Sym0+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: T) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+ ShowsPrec_0123456789876543210 _ T a_0123456789876543210 = Apply (Apply ShowStringSym0 "T") a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T) (a0123456789876543210 :: GHC.Types.Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: T) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: (~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: (~>) GHC.Types.Nat ((~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow T where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family Equals_0123456789876543210 (a :: T) (b :: T) :: Bool where+ Equals_0123456789876543210 T T = TrueSym0+ Equals_0123456789876543210 (_ :: T) (_ :: T) = FalseSym0+ instance PEq T where+ type (==) a b = Equals_0123456789876543210 a b+ data ST :: T -> GHC.Types.Type where ST :: ST T+ type instance Sing @T = ST+ instance SingKind T where+ type Demote T = T+ fromSing ST = T+ toSing T = SomeSing ST+ instance SOrd T where+ sCompare ::+ forall (t1 :: T) (t2 :: T).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun T ((~>) T Ordering)+ -> GHC.Types.Type) t1) t2)+ sCompare ST ST+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ Data.Singletons.Prelude.Instances.SNil+ instance SEnum T where+ sToEnum ::+ forall (t :: GHC.Types.Nat).+ Sing t+ -> Sing (Apply (Data.Singletons.Prelude.Enum.ToEnumSym0 :: TyFun GHC.Types.Nat T+ -> GHC.Types.Type) t)+ sFromEnum ::+ forall (t :: T).+ Sing t+ -> Sing (Apply (Data.Singletons.Prelude.Enum.FromEnumSym0 :: TyFun T GHC.Types.Nat+ -> GHC.Types.Type) t)+ sToEnum (sN :: Sing n)+ = (id+ @(Sing (Case_0123456789876543210 n (Apply (Apply (==@#@$) n) (Data.Singletons.Prelude.Num.FromInteger 0)))))+ (case+ (applySing ((applySing ((singFun2 @(==@#@$)) (%==))) sN))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0))+ of+ STrue -> ST+ SFalse -> sError (sing :: Sing "toEnum: bad argument"))+ sFromEnum ST+ = Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 0)+ instance SBounded T where+ sMinBound :: Sing (MinBoundSym0 :: T)+ sMaxBound :: Sing (MaxBoundSym0 :: T)+ sMinBound = ST+ sMaxBound = ST+ instance SShow T where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: T) (t3 :: GHC.Types.Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) T ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ -> GHC.Types.Type) t1) t2) t3)+ sShowsPrec+ _+ ST+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "T")))+ sA_0123456789876543210+ instance SEq T where+ (%==) ST ST = STrue+ instance SDecide T where+ (%~) ST ST = Proved Refl+ instance Data.Type.Equality.TestEquality (ST :: T+ -> GHC.Types.Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance Data.Type.Coercion.TestCoercion (ST :: T+ -> GHC.Types.Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance Show (ST (z :: T)) where+ showsPrec _ ST = showString "ST"+ instance SingI T where+ sing = ST
− tests/compile-and-dump/Singletons/T197.ghc86.template
@@ -1,43 +0,0 @@-Singletons/T197.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| infixl 5 $$:- - ($$:) :: Bool -> Bool -> Bool- _ $$: _ = False |]- ======>- infixl 5 $$:- ($$:) :: Bool -> Bool -> Bool- ($$:) _ _ = False- type ($$:@#@$$$) (a0123456789876543210 :: Bool) (a0123456789876543210 :: Bool) =- ($$:) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (($$:@#@$$) a0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:$$:@#@$$###)) ())- data ($$:@#@$$) (a0123456789876543210 :: Bool) :: (~>) Bool Bool- where- (:$$:@#@$$###) :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (($$:@#@$$) a0123456789876543210) arg) (($$:@#@$$$) a0123456789876543210 arg) =>- ($$:@#@$$) a0123456789876543210 a0123456789876543210- type instance Apply (($$:@#@$$) a0123456789876543210) a0123456789876543210 = ($$:) a0123456789876543210 a0123456789876543210- infixl 5 $$:@#@$$- instance SuppressUnusedWarnings ($$:@#@$) where- suppressUnusedWarnings = snd (((,) (:$$:@#@$###)) ())- data ($$:@#@$) :: (~>) Bool ((~>) Bool Bool)- where- (:$$:@#@$###) :: forall a0123456789876543210- arg. SameKind (Apply ($$:@#@$) arg) (($$:@#@$$) arg) =>- ($$:@#@$) a0123456789876543210- type instance Apply ($$:@#@$) a0123456789876543210 = ($$:@#@$$) a0123456789876543210- infixl 5 $$:@#@$- type family ($$:) (a :: Bool) (a :: Bool) :: Bool where- ($$:) _ _ = FalseSym0- infixl 5 %$$:- (%$$:) ::- forall (t :: Bool) (t :: Bool).- Sing t -> Sing t -> Sing (Apply (Apply ($$:@#@$) t) t :: Bool)- (%$$:) _ _ = SFalse- instance SingI (($$:@#@$) :: (~>) Bool ((~>) Bool Bool)) where- sing = (singFun2 @($$:@#@$)) (%$$:)- instance SingI d =>- SingI (($$:@#@$$) (d :: Bool) :: (~>) Bool Bool) where- sing = (singFun1 @(($$:@#@$$) (d :: Bool))) ((%$$:) (sing @d))
+ tests/compile-and-dump/Singletons/T197.ghc88.template view
@@ -0,0 +1,43 @@+Singletons/T197.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| infixl 5 $$:+ + ($$:) :: Bool -> Bool -> Bool+ _ $$: _ = False |]+ ======>+ infixl 5 $$:+ ($$:) :: Bool -> Bool -> Bool+ ($$:) _ _ = False+ type ($$:@#@$$$) (a0123456789876543210 :: Bool) (a0123456789876543210 :: Bool) =+ ($$:) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (($$:@#@$$) a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:$$:@#@$$###)) ())+ data ($$:@#@$$) (a0123456789876543210 :: Bool) :: (~>) Bool Bool+ where+ (:$$:@#@$$###) :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (($$:@#@$$) a0123456789876543210) arg) (($$:@#@$$$) a0123456789876543210 arg) =>+ ($$:@#@$$) a0123456789876543210 a0123456789876543210+ type instance Apply (($$:@#@$$) a0123456789876543210) a0123456789876543210 = ($$:) a0123456789876543210 a0123456789876543210+ infixl 5 $$:@#@$$+ instance SuppressUnusedWarnings ($$:@#@$) where+ suppressUnusedWarnings = snd (((,) (:$$:@#@$###)) ())+ data ($$:@#@$) :: (~>) Bool ((~>) Bool Bool)+ where+ (:$$:@#@$###) :: forall a0123456789876543210+ arg. SameKind (Apply ($$:@#@$) arg) (($$:@#@$$) arg) =>+ ($$:@#@$) a0123456789876543210+ type instance Apply ($$:@#@$) a0123456789876543210 = ($$:@#@$$) a0123456789876543210+ infixl 5 $$:@#@$+ type family ($$:) (a :: Bool) (a :: Bool) :: Bool where+ ($$:) _ _ = FalseSym0+ infixl 5 %$$:+ (%$$:) ::+ forall (t :: Bool) (t :: Bool).+ Sing t -> Sing t -> Sing (Apply (Apply ($$:@#@$) t) t :: Bool)+ (%$$:) _ _ = SFalse+ instance SingI (($$:@#@$) :: (~>) Bool ((~>) Bool Bool)) where+ sing = (singFun2 @($$:@#@$)) (%$$:)+ instance SingI d =>+ SingI (($$:@#@$$) (d :: Bool) :: (~>) Bool Bool) where+ sing = (singFun1 @(($$:@#@$$) (d :: Bool))) ((%$$:) (sing @d))
− tests/compile-and-dump/Singletons/T197b.ghc86.template
@@ -1,106 +0,0 @@-Singletons/T197b.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| infixr 9 `Pair`, `MkPair`- - data a :*: b = a :*: b- data Pair a b = MkPair a b |]- ======>- data (:*:) a b = a :*: b- data Pair a b = MkPair a b- infixr 9 `Pair`- infixr 9 `MkPair`- type (:*:@#@$$$) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =- (:*:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ((:*:@#@$$) t0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::*:@#@$$###)) ())- data (:*:@#@$$) (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 ((:*:) a0123456789876543210 b0123456789876543210)- where- (::*:@#@$$###) :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply ((:*:@#@$$) t0123456789876543210) arg) ((:*:@#@$$$) t0123456789876543210 arg) =>- (:*:@#@$$) t0123456789876543210 t0123456789876543210- type instance Apply ((:*:@#@$$) t0123456789876543210) t0123456789876543210 = (:*:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (:*:@#@$) where- suppressUnusedWarnings = snd (((,) (::*:@#@$###)) ())- data (:*:@#@$) :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 ((:*:) a0123456789876543210 b0123456789876543210))- where- (::*:@#@$###) :: forall t0123456789876543210- arg. SameKind (Apply (:*:@#@$) arg) ((:*:@#@$$) arg) =>- (:*:@#@$) t0123456789876543210- type instance Apply (:*:@#@$) t0123456789876543210 = (:*:@#@$$) t0123456789876543210- type MkPairSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =- MkPair t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (MkPairSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) MkPairSym1KindInference) ())- data MkPairSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210)- where- MkPairSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (MkPairSym1 t0123456789876543210) arg) (MkPairSym2 t0123456789876543210 arg) =>- MkPairSym1 t0123456789876543210 t0123456789876543210- type instance Apply (MkPairSym1 t0123456789876543210) t0123456789876543210 = MkPair t0123456789876543210 t0123456789876543210- infixr 9 `MkPairSym1`- instance SuppressUnusedWarnings MkPairSym0 where- suppressUnusedWarnings = snd (((,) MkPairSym0KindInference) ())- data MkPairSym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210))- where- MkPairSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkPairSym0 arg) (MkPairSym1 arg) =>- MkPairSym0 t0123456789876543210- type instance Apply MkPairSym0 t0123456789876543210 = MkPairSym1 t0123456789876543210- infixr 9 `MkPairSym0`- infixr 9 `SPair`- infixr 9 `SMkPair`- data instance Sing :: (:*:) a b -> GHC.Types.Type- where- (:%*:) :: forall a b (n :: a) (n :: b).- (Sing (n :: a)) -> (Sing (n :: b)) -> Sing ((:*:) n n)- type (%:*:) = (Sing :: (:*:) a b -> GHC.Types.Type)- instance (SingKind a, SingKind b) => SingKind ((:*:) a b) where- type Demote ((:*:) a b) = (:*:) (Demote a) (Demote b)- fromSing ((:%*:) b b) = ((:*:) (fromSing b)) (fromSing b)- toSing ((:*:) (b :: Demote a) (b :: Demote b))- = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {- (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c) }- data instance Sing :: Pair a b -> GHC.Types.Type- where- SMkPair :: forall a b (n :: a) (n :: b).- (Sing (n :: a)) -> (Sing (n :: b)) -> Sing (MkPair n n)- type SPair = (Sing :: Pair a b -> GHC.Types.Type)- instance (SingKind a, SingKind b) => SingKind (Pair a b) where- type Demote (Pair a b) = Pair (Demote a) (Demote b)- fromSing (SMkPair b b) = (MkPair (fromSing b)) (fromSing b)- toSing (MkPair (b :: Demote a) (b :: Demote b))- = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkPair c) c) }- instance (SingI n, SingI n) =>- SingI ((:*:) (n :: a) (n :: b)) where- sing = ((:%*:) sing) sing- instance SingI ((:*:@#@$) :: (~>) a ((~>) b ((:*:) a b))) where- sing = (singFun2 @(:*:@#@$)) (:%*:)- instance SingI (TyCon2 (:*:) :: (~>) a ((~>) b ((:*:) a b))) where- sing = (singFun2 @(TyCon2 (:*:))) (:%*:)- instance SingI d =>- SingI ((:*:@#@$$) (d :: a) :: (~>) b ((:*:) a b)) where- sing = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) (sing @d))- instance SingI d =>- SingI (TyCon1 ((:*:) (d :: a)) :: (~>) b ((:*:) a b)) where- sing = (singFun1 @(TyCon1 ((:*:) (d :: a)))) ((:%*:) (sing @d))- instance (SingI n, SingI n) =>- SingI (MkPair (n :: a) (n :: b)) where- sing = (SMkPair sing) sing- instance SingI (MkPairSym0 :: (~>) a ((~>) b (Pair a b))) where- sing = (singFun2 @MkPairSym0) SMkPair- instance SingI (TyCon2 MkPair :: (~>) a ((~>) b (Pair a b))) where- sing = (singFun2 @(TyCon2 MkPair)) SMkPair- instance SingI d =>- SingI (MkPairSym1 (d :: a) :: (~>) b (Pair a b)) where- sing = (singFun1 @(MkPairSym1 (d :: a))) (SMkPair (sing @d))- instance SingI d =>- SingI (TyCon1 (MkPair (d :: a)) :: (~>) b (Pair a b)) where- sing = (singFun1 @(TyCon1 (MkPair (d :: a)))) (SMkPair (sing @d))
+ tests/compile-and-dump/Singletons/T197b.ghc88.template view
@@ -0,0 +1,96 @@+Singletons/T197b.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| infixr 9 `Pair`, `MkPair`+ + data a :*: b = a :*: b+ data Pair a b = MkPair a b |]+ ======>+ data (:*:) a b = a :*: b+ data Pair a b = MkPair a b+ infixr 9 `Pair`+ infixr 9 `MkPair`+ type (:*:@#@$$$) (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =+ (:*:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ((:*:@#@$$) t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::*:@#@$$###)) ())+ data (:*:@#@$$) (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 ((:*:) a0123456789876543210 b0123456789876543210)+ where+ (::*:@#@$$###) :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply ((:*:@#@$$) t0123456789876543210) arg) ((:*:@#@$$$) t0123456789876543210 arg) =>+ (:*:@#@$$) t0123456789876543210 t0123456789876543210+ type instance Apply ((:*:@#@$$) t0123456789876543210) t0123456789876543210 = (:*:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (:*:@#@$) where+ suppressUnusedWarnings = snd (((,) (::*:@#@$###)) ())+ data (:*:@#@$) :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 ((:*:) a0123456789876543210 b0123456789876543210))+ where+ (::*:@#@$###) :: forall t0123456789876543210+ arg. SameKind (Apply (:*:@#@$) arg) ((:*:@#@$$) arg) =>+ (:*:@#@$) t0123456789876543210+ type instance Apply (:*:@#@$) t0123456789876543210 = (:*:@#@$$) t0123456789876543210+ type MkPairSym2 (t0123456789876543210 :: a0123456789876543210) (t0123456789876543210 :: b0123456789876543210) =+ MkPair t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (MkPairSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MkPairSym1KindInference) ())+ data MkPairSym1 (t0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210)+ where+ MkPairSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (MkPairSym1 t0123456789876543210) arg) (MkPairSym2 t0123456789876543210 arg) =>+ MkPairSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (MkPairSym1 t0123456789876543210) t0123456789876543210 = MkPair t0123456789876543210 t0123456789876543210+ infixr 9 `MkPairSym1`+ instance SuppressUnusedWarnings MkPairSym0 where+ suppressUnusedWarnings = snd (((,) MkPairSym0KindInference) ())+ data MkPairSym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 (Pair a0123456789876543210 b0123456789876543210))+ where+ MkPairSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkPairSym0 arg) (MkPairSym1 arg) =>+ MkPairSym0 t0123456789876543210+ type instance Apply MkPairSym0 t0123456789876543210 = MkPairSym1 t0123456789876543210+ infixr 9 `MkPairSym0`+ infixr 9 `SMkPair`+ infixr 9 `SPair`+ data (%:*:) :: forall a b. (:*:) a b -> GHC.Types.Type+ where+ (:%*:) :: forall a b (n :: a) (n :: b).+ (Sing (n :: a)) -> (Sing (n :: b)) -> (%:*:) ((:*:) n n)+ type instance Sing @((:*:) a b) = (%:*:)+ instance (SingKind a, SingKind b) => SingKind ((:*:) a b) where+ type Demote ((:*:) a b) = (:*:) (Demote a) (Demote b)+ fromSing ((:%*:) b b) = ((:*:) (fromSing b)) (fromSing b)+ toSing ((:*:) (b :: Demote a) (b :: Demote b))+ = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%*:) c) c) }+ data SPair :: forall a b. Pair a b -> GHC.Types.Type+ where+ SMkPair :: forall a b (n :: a) (n :: b).+ (Sing (n :: a)) -> (Sing (n :: b)) -> SPair (MkPair n n)+ type instance Sing @(Pair a b) = SPair+ instance (SingKind a, SingKind b) => SingKind (Pair a b) where+ type Demote (Pair a b) = Pair (Demote a) (Demote b)+ fromSing (SMkPair b b) = (MkPair (fromSing b)) (fromSing b)+ toSing (MkPair (b :: Demote a) (b :: Demote b))+ = case ((,) (toSing b :: SomeSing a)) (toSing b :: SomeSing b) of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SMkPair c) c) }+ instance (SingI n, SingI n) =>+ SingI ((:*:) (n :: a) (n :: b)) where+ sing = ((:%*:) sing) sing+ instance SingI ((:*:@#@$) :: (~>) a ((~>) b ((:*:) a b))) where+ sing = (singFun2 @(:*:@#@$)) (:%*:)+ instance SingI d =>+ SingI ((:*:@#@$$) (d :: a) :: (~>) b ((:*:) a b)) where+ sing = (singFun1 @((:*:@#@$$) (d :: a))) ((:%*:) (sing @d))+ instance (SingI n, SingI n) =>+ SingI (MkPair (n :: a) (n :: b)) where+ sing = (SMkPair sing) sing+ instance SingI (MkPairSym0 :: (~>) a ((~>) b (Pair a b))) where+ sing = (singFun2 @MkPairSym0) SMkPair+ instance SingI d =>+ SingI (MkPairSym1 (d :: a) :: (~>) b (Pair a b)) where+ sing = (singFun1 @(MkPairSym1 (d :: a))) (SMkPair (sing @d))
− tests/compile-and-dump/Singletons/T200.ghc86.template
@@ -1,204 +0,0 @@-Singletons/T200.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| ($$:) :: ErrorMessage -> ErrorMessage -> ErrorMessage- x $$: y = x :$$: y- (<>:) :: ErrorMessage -> ErrorMessage -> ErrorMessage- x <>: y = x :<>: y- - data ErrorMessage- = ErrorMessage :$$: ErrorMessage |- ErrorMessage :<>: ErrorMessage |- EM [Bool] |]- ======>- data ErrorMessage- = ErrorMessage :$$: ErrorMessage |- ErrorMessage :<>: ErrorMessage |- EM [Bool]- ($$:) :: ErrorMessage -> ErrorMessage -> ErrorMessage- ($$:) x y = (x :$$: y)- (<>:) :: ErrorMessage -> ErrorMessage -> ErrorMessage- (<>:) x y = (x :<>: y)- type (:$$:@#@$$$) (t0123456789876543210 :: ErrorMessage) (t0123456789876543210 :: ErrorMessage) =- (:$$:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ((:$$:@#@$$) t0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::$$:@#@$$###)) ())- data (:$$:@#@$$) (t0123456789876543210 :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage- where- (::$$:@#@$$###) :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply ((:$$:@#@$$) t0123456789876543210) arg) ((:$$:@#@$$$) t0123456789876543210 arg) =>- (:$$:@#@$$) t0123456789876543210 t0123456789876543210- type instance Apply ((:$$:@#@$$) t0123456789876543210) t0123456789876543210 = (:$$:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (:$$:@#@$) where- suppressUnusedWarnings = snd (((,) (::$$:@#@$###)) ())- data (:$$:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)- where- (::$$:@#@$###) :: forall t0123456789876543210- arg. SameKind (Apply (:$$:@#@$) arg) ((:$$:@#@$$) arg) =>- (:$$:@#@$) t0123456789876543210- type instance Apply (:$$:@#@$) t0123456789876543210 = (:$$:@#@$$) t0123456789876543210- type (:<>:@#@$$$) (t0123456789876543210 :: ErrorMessage) (t0123456789876543210 :: ErrorMessage) =- (:<>:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings ((:<>:@#@$$) t0123456789876543210) where- suppressUnusedWarnings = snd (((,) (::<>:@#@$$###)) ())- data (:<>:@#@$$) (t0123456789876543210 :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage- where- (::<>:@#@$$###) :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply ((:<>:@#@$$) t0123456789876543210) arg) ((:<>:@#@$$$) t0123456789876543210 arg) =>- (:<>:@#@$$) t0123456789876543210 t0123456789876543210- type instance Apply ((:<>:@#@$$) t0123456789876543210) t0123456789876543210 = (:<>:) t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (:<>:@#@$) where- suppressUnusedWarnings = snd (((,) (::<>:@#@$###)) ())- data (:<>:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)- where- (::<>:@#@$###) :: forall t0123456789876543210- arg. SameKind (Apply (:<>:@#@$) arg) ((:<>:@#@$$) arg) =>- (:<>:@#@$) t0123456789876543210- type instance Apply (:<>:@#@$) t0123456789876543210 = (:<>:@#@$$) t0123456789876543210- type EMSym1 (t0123456789876543210 :: [Bool]) =- EM t0123456789876543210- instance SuppressUnusedWarnings EMSym0 where- suppressUnusedWarnings = snd (((,) EMSym0KindInference) ())- data EMSym0 :: (~>) [Bool] ErrorMessage- where- EMSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply EMSym0 arg) (EMSym1 arg) =>- EMSym0 t0123456789876543210- type instance Apply EMSym0 t0123456789876543210 = EM t0123456789876543210- type (<>:@#@$$$) (a0123456789876543210 :: ErrorMessage) (a0123456789876543210 :: ErrorMessage) =- (<>:) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((<>:@#@$$) a0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:<>:@#@$$###)) ())- data (<>:@#@$$) (a0123456789876543210 :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage- where- (:<>:@#@$$###) :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((<>:@#@$$) a0123456789876543210) arg) ((<>:@#@$$$) a0123456789876543210 arg) =>- (<>:@#@$$) a0123456789876543210 a0123456789876543210- type instance Apply ((<>:@#@$$) a0123456789876543210) a0123456789876543210 = (<>:) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (<>:@#@$) where- suppressUnusedWarnings = snd (((,) (:<>:@#@$###)) ())- data (<>:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)- where- (:<>:@#@$###) :: forall a0123456789876543210- arg. SameKind (Apply (<>:@#@$) arg) ((<>:@#@$$) arg) =>- (<>:@#@$) a0123456789876543210- type instance Apply (<>:@#@$) a0123456789876543210 = (<>:@#@$$) a0123456789876543210- type ($$:@#@$$$) (a0123456789876543210 :: ErrorMessage) (a0123456789876543210 :: ErrorMessage) =- ($$:) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (($$:@#@$$) a0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:$$:@#@$$###)) ())- data ($$:@#@$$) (a0123456789876543210 :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage- where- (:$$:@#@$$###) :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (($$:@#@$$) a0123456789876543210) arg) (($$:@#@$$$) a0123456789876543210 arg) =>- ($$:@#@$$) a0123456789876543210 a0123456789876543210- type instance Apply (($$:@#@$$) a0123456789876543210) a0123456789876543210 = ($$:) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ($$:@#@$) where- suppressUnusedWarnings = snd (((,) (:$$:@#@$###)) ())- data ($$:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)- where- (:$$:@#@$###) :: forall a0123456789876543210- arg. SameKind (Apply ($$:@#@$) arg) (($$:@#@$$) arg) =>- ($$:@#@$) a0123456789876543210- type instance Apply ($$:@#@$) a0123456789876543210 = ($$:@#@$$) a0123456789876543210- type family (<>:) (a :: ErrorMessage) (a :: ErrorMessage) :: ErrorMessage where- (<>:) x y = Apply (Apply (:<>:@#@$) x) y- type family ($$:) (a :: ErrorMessage) (a :: ErrorMessage) :: ErrorMessage where- ($$:) x y = Apply (Apply (:$$:@#@$) x) y- (%<>:) ::- forall (t :: ErrorMessage) (t :: ErrorMessage).- Sing t- -> Sing t -> Sing (Apply (Apply (<>:@#@$) t) t :: ErrorMessage)- (%$$:) ::- forall (t :: ErrorMessage) (t :: ErrorMessage).- Sing t- -> Sing t -> Sing (Apply (Apply ($$:@#@$) t) t :: ErrorMessage)- (%<>:) (sX :: Sing x) (sY :: Sing y)- = (applySing ((applySing ((singFun2 @(:<>:@#@$)) (:%<>:))) sX)) sY- (%$$:) (sX :: Sing x) (sY :: Sing y)- = (applySing ((applySing ((singFun2 @(:$$:@#@$)) (:%$$:))) sX)) sY- instance SingI ((<>:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where- sing = (singFun2 @(<>:@#@$)) (%<>:)- instance SingI d =>- SingI ((<>:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where- sing- = (singFun1 @((<>:@#@$$) (d :: ErrorMessage))) ((%<>:) (sing @d))- instance SingI (($$:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where- sing = (singFun2 @($$:@#@$)) (%$$:)- instance SingI d =>- SingI (($$:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where- sing- = (singFun1 @(($$:@#@$$) (d :: ErrorMessage))) ((%$$:) (sing @d))- data instance Sing :: ErrorMessage -> GHC.Types.Type- where- (:%$$:) :: forall (n :: ErrorMessage) (n :: ErrorMessage).- (Sing (n :: ErrorMessage))- -> (Sing (n :: ErrorMessage)) -> Sing ((:$$:) n n)- (:%<>:) :: forall (n :: ErrorMessage) (n :: ErrorMessage).- (Sing (n :: ErrorMessage))- -> (Sing (n :: ErrorMessage)) -> Sing ((:<>:) n n)- SEM :: forall (n :: [Bool]). (Sing (n :: [Bool])) -> Sing (EM n)- type SErrorMessage = (Sing :: ErrorMessage -> GHC.Types.Type)- instance SingKind ErrorMessage where- type Demote ErrorMessage = ErrorMessage- fromSing ((:%$$:) b b) = ((:$$:) (fromSing b)) (fromSing b)- fromSing ((:%<>:) b b) = ((:<>:) (fromSing b)) (fromSing b)- fromSing (SEM b) = EM (fromSing b)- toSing- ((:$$:) (b :: Demote ErrorMessage) (b :: Demote ErrorMessage))- = case- ((,) (toSing b :: SomeSing ErrorMessage))- (toSing b :: SomeSing ErrorMessage)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%$$:) c) c) }- toSing- ((:<>:) (b :: Demote ErrorMessage) (b :: Demote ErrorMessage))- = case- ((,) (toSing b :: SomeSing ErrorMessage))- (toSing b :: SomeSing ErrorMessage)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%<>:) c) c) }- toSing (EM (b :: Demote [Bool]))- = case toSing b :: SomeSing [Bool] of {- SomeSing c -> SomeSing (SEM c) }- instance (SingI n, SingI n) =>- SingI ((:$$:) (n :: ErrorMessage) (n :: ErrorMessage)) where- sing = ((:%$$:) sing) sing- instance SingI ((:$$:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where- sing = (singFun2 @(:$$:@#@$)) (:%$$:)- instance SingI (TyCon2 (:$$:) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where- sing = (singFun2 @(TyCon2 (:$$:))) (:%$$:)- instance SingI d =>- SingI ((:$$:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where- sing- = (singFun1 @((:$$:@#@$$) (d :: ErrorMessage))) ((:%$$:) (sing @d))- instance SingI d =>- SingI (TyCon1 ((:$$:) (d :: ErrorMessage)) :: (~>) ErrorMessage ErrorMessage) where- sing- = (singFun1 @(TyCon1 ((:$$:) (d :: ErrorMessage))))- ((:%$$:) (sing @d))- instance (SingI n, SingI n) =>- SingI ((:<>:) (n :: ErrorMessage) (n :: ErrorMessage)) where- sing = ((:%<>:) sing) sing- instance SingI ((:<>:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where- sing = (singFun2 @(:<>:@#@$)) (:%<>:)- instance SingI (TyCon2 (:<>:) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where- sing = (singFun2 @(TyCon2 (:<>:))) (:%<>:)- instance SingI d =>- SingI ((:<>:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where- sing- = (singFun1 @((:<>:@#@$$) (d :: ErrorMessage))) ((:%<>:) (sing @d))- instance SingI d =>- SingI (TyCon1 ((:<>:) (d :: ErrorMessage)) :: (~>) ErrorMessage ErrorMessage) where- sing- = (singFun1 @(TyCon1 ((:<>:) (d :: ErrorMessage))))- ((:%<>:) (sing @d))- instance SingI n => SingI (EM (n :: [Bool])) where- sing = SEM sing- instance SingI (EMSym0 :: (~>) [Bool] ErrorMessage) where- sing = (singFun1 @EMSym0) SEM- instance SingI (TyCon1 EM :: (~>) [Bool] ErrorMessage) where- sing = (singFun1 @(TyCon1 EM)) SEM
+ tests/compile-and-dump/Singletons/T200.ghc88.template view
@@ -0,0 +1,189 @@+Singletons/T200.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| ($$:) :: ErrorMessage -> ErrorMessage -> ErrorMessage+ x $$: y = x :$$: y+ (<>:) :: ErrorMessage -> ErrorMessage -> ErrorMessage+ x <>: y = x :<>: y+ + data ErrorMessage+ = ErrorMessage :$$: ErrorMessage |+ ErrorMessage :<>: ErrorMessage |+ EM [Bool] |]+ ======>+ data ErrorMessage+ = ErrorMessage :$$: ErrorMessage |+ ErrorMessage :<>: ErrorMessage |+ EM [Bool]+ ($$:) :: ErrorMessage -> ErrorMessage -> ErrorMessage+ ($$:) x y = (x :$$: y)+ (<>:) :: ErrorMessage -> ErrorMessage -> ErrorMessage+ (<>:) x y = (x :<>: y)+ type (:$$:@#@$$$) (t0123456789876543210 :: ErrorMessage) (t0123456789876543210 :: ErrorMessage) =+ (:$$:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ((:$$:@#@$$) t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::$$:@#@$$###)) ())+ data (:$$:@#@$$) (t0123456789876543210 :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage+ where+ (::$$:@#@$$###) :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply ((:$$:@#@$$) t0123456789876543210) arg) ((:$$:@#@$$$) t0123456789876543210 arg) =>+ (:$$:@#@$$) t0123456789876543210 t0123456789876543210+ type instance Apply ((:$$:@#@$$) t0123456789876543210) t0123456789876543210 = (:$$:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (:$$:@#@$) where+ suppressUnusedWarnings = snd (((,) (::$$:@#@$###)) ())+ data (:$$:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)+ where+ (::$$:@#@$###) :: forall t0123456789876543210+ arg. SameKind (Apply (:$$:@#@$) arg) ((:$$:@#@$$) arg) =>+ (:$$:@#@$) t0123456789876543210+ type instance Apply (:$$:@#@$) t0123456789876543210 = (:$$:@#@$$) t0123456789876543210+ type (:<>:@#@$$$) (t0123456789876543210 :: ErrorMessage) (t0123456789876543210 :: ErrorMessage) =+ (:<>:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings ((:<>:@#@$$) t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (::<>:@#@$$###)) ())+ data (:<>:@#@$$) (t0123456789876543210 :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage+ where+ (::<>:@#@$$###) :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply ((:<>:@#@$$) t0123456789876543210) arg) ((:<>:@#@$$$) t0123456789876543210 arg) =>+ (:<>:@#@$$) t0123456789876543210 t0123456789876543210+ type instance Apply ((:<>:@#@$$) t0123456789876543210) t0123456789876543210 = (:<>:) t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (:<>:@#@$) where+ suppressUnusedWarnings = snd (((,) (::<>:@#@$###)) ())+ data (:<>:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)+ where+ (::<>:@#@$###) :: forall t0123456789876543210+ arg. SameKind (Apply (:<>:@#@$) arg) ((:<>:@#@$$) arg) =>+ (:<>:@#@$) t0123456789876543210+ type instance Apply (:<>:@#@$) t0123456789876543210 = (:<>:@#@$$) t0123456789876543210+ type EMSym1 (t0123456789876543210 :: [Bool]) =+ EM t0123456789876543210+ instance SuppressUnusedWarnings EMSym0 where+ suppressUnusedWarnings = snd (((,) EMSym0KindInference) ())+ data EMSym0 :: (~>) [Bool] ErrorMessage+ where+ EMSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply EMSym0 arg) (EMSym1 arg) =>+ EMSym0 t0123456789876543210+ type instance Apply EMSym0 t0123456789876543210 = EM t0123456789876543210+ type (<>:@#@$$$) (a0123456789876543210 :: ErrorMessage) (a0123456789876543210 :: ErrorMessage) =+ (<>:) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((<>:@#@$$) a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:<>:@#@$$###)) ())+ data (<>:@#@$$) (a0123456789876543210 :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage+ where+ (:<>:@#@$$###) :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((<>:@#@$$) a0123456789876543210) arg) ((<>:@#@$$$) a0123456789876543210 arg) =>+ (<>:@#@$$) a0123456789876543210 a0123456789876543210+ type instance Apply ((<>:@#@$$) a0123456789876543210) a0123456789876543210 = (<>:) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (<>:@#@$) where+ suppressUnusedWarnings = snd (((,) (:<>:@#@$###)) ())+ data (<>:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)+ where+ (:<>:@#@$###) :: forall a0123456789876543210+ arg. SameKind (Apply (<>:@#@$) arg) ((<>:@#@$$) arg) =>+ (<>:@#@$) a0123456789876543210+ type instance Apply (<>:@#@$) a0123456789876543210 = (<>:@#@$$) a0123456789876543210+ type ($$:@#@$$$) (a0123456789876543210 :: ErrorMessage) (a0123456789876543210 :: ErrorMessage) =+ ($$:) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (($$:@#@$$) a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:$$:@#@$$###)) ())+ data ($$:@#@$$) (a0123456789876543210 :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage+ where+ (:$$:@#@$$###) :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (($$:@#@$$) a0123456789876543210) arg) (($$:@#@$$$) a0123456789876543210 arg) =>+ ($$:@#@$$) a0123456789876543210 a0123456789876543210+ type instance Apply (($$:@#@$$) a0123456789876543210) a0123456789876543210 = ($$:) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ($$:@#@$) where+ suppressUnusedWarnings = snd (((,) (:$$:@#@$###)) ())+ data ($$:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)+ where+ (:$$:@#@$###) :: forall a0123456789876543210+ arg. SameKind (Apply ($$:@#@$) arg) (($$:@#@$$) arg) =>+ ($$:@#@$) a0123456789876543210+ type instance Apply ($$:@#@$) a0123456789876543210 = ($$:@#@$$) a0123456789876543210+ type family (<>:) (a :: ErrorMessage) (a :: ErrorMessage) :: ErrorMessage where+ (<>:) x y = Apply (Apply (:<>:@#@$) x) y+ type family ($$:) (a :: ErrorMessage) (a :: ErrorMessage) :: ErrorMessage where+ ($$:) x y = Apply (Apply (:$$:@#@$) x) y+ (%<>:) ::+ forall (t :: ErrorMessage) (t :: ErrorMessage).+ Sing t+ -> Sing t -> Sing (Apply (Apply (<>:@#@$) t) t :: ErrorMessage)+ (%$$:) ::+ forall (t :: ErrorMessage) (t :: ErrorMessage).+ Sing t+ -> Sing t -> Sing (Apply (Apply ($$:@#@$) t) t :: ErrorMessage)+ (%<>:) (sX :: Sing x) (sY :: Sing y)+ = (applySing ((applySing ((singFun2 @(:<>:@#@$)) (:%<>:))) sX)) sY+ (%$$:) (sX :: Sing x) (sY :: Sing y)+ = (applySing ((applySing ((singFun2 @(:$$:@#@$)) (:%$$:))) sX)) sY+ instance SingI ((<>:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where+ sing = (singFun2 @(<>:@#@$)) (%<>:)+ instance SingI d =>+ SingI ((<>:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where+ sing+ = (singFun1 @((<>:@#@$$) (d :: ErrorMessage))) ((%<>:) (sing @d))+ instance SingI (($$:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where+ sing = (singFun2 @($$:@#@$)) (%$$:)+ instance SingI d =>+ SingI (($$:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where+ sing+ = (singFun1 @(($$:@#@$$) (d :: ErrorMessage))) ((%$$:) (sing @d))+ data SErrorMessage :: ErrorMessage -> GHC.Types.Type+ where+ (:%$$:) :: forall (n :: ErrorMessage) (n :: ErrorMessage).+ (Sing (n :: ErrorMessage))+ -> (Sing (n :: ErrorMessage)) -> SErrorMessage ((:$$:) n n)+ (:%<>:) :: forall (n :: ErrorMessage) (n :: ErrorMessage).+ (Sing (n :: ErrorMessage))+ -> (Sing (n :: ErrorMessage)) -> SErrorMessage ((:<>:) n n)+ SEM :: forall (n :: [Bool]).+ (Sing (n :: [Bool])) -> SErrorMessage (EM n)+ type instance Sing @ErrorMessage = SErrorMessage+ instance SingKind ErrorMessage where+ type Demote ErrorMessage = ErrorMessage+ fromSing ((:%$$:) b b) = ((:$$:) (fromSing b)) (fromSing b)+ fromSing ((:%<>:) b b) = ((:<>:) (fromSing b)) (fromSing b)+ fromSing (SEM b) = EM (fromSing b)+ toSing+ ((:$$:) (b :: Demote ErrorMessage) (b :: Demote ErrorMessage))+ = case+ ((,) (toSing b :: SomeSing ErrorMessage))+ (toSing b :: SomeSing ErrorMessage)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%$$:) c) c) }+ toSing+ ((:<>:) (b :: Demote ErrorMessage) (b :: Demote ErrorMessage))+ = case+ ((,) (toSing b :: SomeSing ErrorMessage))+ (toSing b :: SomeSing ErrorMessage)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing (((:%<>:) c) c) }+ toSing (EM (b :: Demote [Bool]))+ = case toSing b :: SomeSing [Bool] of {+ SomeSing c -> SomeSing (SEM c) }+ instance (SingI n, SingI n) =>+ SingI ((:$$:) (n :: ErrorMessage) (n :: ErrorMessage)) where+ sing = ((:%$$:) sing) sing+ instance SingI ((:$$:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where+ sing = (singFun2 @(:$$:@#@$)) (:%$$:)+ instance SingI d =>+ SingI ((:$$:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where+ sing+ = (singFun1 @((:$$:@#@$$) (d :: ErrorMessage))) ((:%$$:) (sing @d))+ instance (SingI n, SingI n) =>+ SingI ((:<>:) (n :: ErrorMessage) (n :: ErrorMessage)) where+ sing = ((:%<>:) sing) sing+ instance SingI ((:<>:@#@$) :: (~>) ErrorMessage ((~>) ErrorMessage ErrorMessage)) where+ sing = (singFun2 @(:<>:@#@$)) (:%<>:)+ instance SingI d =>+ SingI ((:<>:@#@$$) (d :: ErrorMessage) :: (~>) ErrorMessage ErrorMessage) where+ sing+ = (singFun1 @((:<>:@#@$$) (d :: ErrorMessage))) ((:%<>:) (sing @d))+ instance SingI n => SingI (EM (n :: [Bool])) where+ sing = SEM sing+ instance SingI (EMSym0 :: (~>) [Bool] ErrorMessage) where+ sing = (singFun1 @EMSym0) SEM
− tests/compile-and-dump/Singletons/T206.ghc86.template
+ tests/compile-and-dump/Singletons/T206.ghc88.template view
− tests/compile-and-dump/Singletons/T209.ghc86.template
@@ -1,82 +0,0 @@-Singletons/T209.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| m :: a -> b -> Bool -> Bool- m _ _ x = x- - class C a b- data Hm- = Hm- deriving anyclass (C Bool)- - deriving anyclass instance C a a => C a (Maybe a) |]- ======>- class C a b- m :: a -> b -> Bool -> Bool- m _ _ x = x- data Hm- = Hm- deriving anyclass (C Bool)- deriving anyclass instance C a a => C a (Maybe a)- type HmSym0 = Hm- type MSym3 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) (a0123456789876543210 :: Bool) =- M a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (MSym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) MSym2KindInference) ())- data MSym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) :: (~>) Bool Bool- where- MSym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (MSym2 a0123456789876543210 a0123456789876543210) arg) (MSym3 a0123456789876543210 a0123456789876543210 arg) =>- MSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (MSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = M a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (MSym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) MSym1KindInference) ())- data MSym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 ((~>) Bool Bool)- where- MSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (MSym1 a0123456789876543210) arg) (MSym2 a0123456789876543210 arg) =>- MSym1 a0123456789876543210 a0123456789876543210- type instance Apply (MSym1 a0123456789876543210) a0123456789876543210 = MSym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings MSym0 where- suppressUnusedWarnings = snd (((,) MSym0KindInference) ())- data MSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) Bool Bool))- where- MSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply MSym0 arg) (MSym1 arg) =>- MSym0 a0123456789876543210- type instance Apply MSym0 a0123456789876543210 = MSym1 a0123456789876543210- type family M (a :: a) (a :: b) (a :: Bool) :: Bool where- M _ _ x = x- class PC (a :: GHC.Types.Type) (b :: GHC.Types.Type)- instance PC Bool Hm- instance PC a (Maybe a)- sM ::- forall a b (t :: a) (t :: b) (t :: Bool).- Sing t- -> Sing t- -> Sing t -> Sing (Apply (Apply (Apply MSym0 t) t) t :: Bool)- sM _ _ (sX :: Sing x) = sX- instance SingI (MSym0 :: (~>) a ((~>) b ((~>) Bool Bool))) where- sing = (singFun3 @MSym0) sM- instance SingI d =>- SingI (MSym1 (d :: a) :: (~>) b ((~>) Bool Bool)) where- sing = (singFun2 @(MSym1 (d :: a))) (sM (sing @d))- instance (SingI d, SingI d) =>- SingI (MSym2 (d :: a) (d :: b) :: (~>) Bool Bool) where- sing- = (singFun1 @(MSym2 (d :: a) (d :: b))) ((sM (sing @d)) (sing @d))- data instance Sing :: Hm -> GHC.Types.Type where SHm :: Sing Hm- type SHm = (Sing :: Hm -> GHC.Types.Type)- instance SingKind Hm where- type Demote Hm = Hm- fromSing SHm = Hm- toSing Hm = SomeSing SHm- class SC a b- instance SC Bool Hm- instance SC a a => SC a (Maybe a)- instance SingI Hm where- sing = SHm
+ tests/compile-and-dump/Singletons/T209.ghc88.template view
@@ -0,0 +1,82 @@+Singletons/T209.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| m :: a -> b -> Bool -> Bool+ m _ _ x = x+ + class C a b+ data Hm+ = Hm+ deriving anyclass (C Bool)+ + deriving anyclass instance C a a => C a (Maybe a) |]+ ======>+ class C a b+ m :: a -> b -> Bool -> Bool+ m _ _ x = x+ data Hm+ = Hm+ deriving anyclass (C Bool)+ deriving anyclass instance C a a => C a (Maybe a)+ type HmSym0 = Hm+ type MSym3 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) (a0123456789876543210 :: Bool) =+ M a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (MSym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MSym2KindInference) ())+ data MSym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) :: (~>) Bool Bool+ where+ MSym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (MSym2 a0123456789876543210 a0123456789876543210) arg) (MSym3 a0123456789876543210 a0123456789876543210 arg) =>+ MSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (MSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = M a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (MSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MSym1KindInference) ())+ data MSym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 ((~>) Bool Bool)+ where+ MSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (MSym1 a0123456789876543210) arg) (MSym2 a0123456789876543210 arg) =>+ MSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (MSym1 a0123456789876543210) a0123456789876543210 = MSym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings MSym0 where+ suppressUnusedWarnings = snd (((,) MSym0KindInference) ())+ data MSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 ((~>) Bool Bool))+ where+ MSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply MSym0 arg) (MSym1 arg) =>+ MSym0 a0123456789876543210+ type instance Apply MSym0 a0123456789876543210 = MSym1 a0123456789876543210+ type family M (a :: a) (a :: b) (a :: Bool) :: Bool where+ M _ _ x = x+ class PC (a :: GHC.Types.Type) (b :: GHC.Types.Type)+ instance PC Bool Hm+ instance PC a (Maybe a)+ sM ::+ forall a b (t :: a) (t :: b) (t :: Bool).+ Sing t+ -> Sing t+ -> Sing t -> Sing (Apply (Apply (Apply MSym0 t) t) t :: Bool)+ sM _ _ (sX :: Sing x) = sX+ instance SingI (MSym0 :: (~>) a ((~>) b ((~>) Bool Bool))) where+ sing = (singFun3 @MSym0) sM+ instance SingI d =>+ SingI (MSym1 (d :: a) :: (~>) b ((~>) Bool Bool)) where+ sing = (singFun2 @(MSym1 (d :: a))) (sM (sing @d))+ instance (SingI d, SingI d) =>+ SingI (MSym2 (d :: a) (d :: b) :: (~>) Bool Bool) where+ sing+ = (singFun1 @(MSym2 (d :: a) (d :: b))) ((sM (sing @d)) (sing @d))+ data SHm :: Hm -> GHC.Types.Type where SHm :: SHm Hm+ type instance Sing @Hm = SHm+ instance SingKind Hm where+ type Demote Hm = Hm+ fromSing SHm = Hm+ toSing Hm = SomeSing SHm+ class SC a b+ instance SC Bool Hm+ instance SC a a => SC a (Maybe a)+ instance SingI Hm where+ sing = SHm
− tests/compile-and-dump/Singletons/T216.ghc86.template
@@ -1,56 +0,0 @@-Singletons/T216.hs:0:0:: Splicing declarations- genDefunSymbols [''MyProxy, ''Symmetry]- ======>- type MyProxySym2 (k0123456789876543210 :: Type) (a0123456789876543210 :: k0123456789876543210) =- MyProxy k0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (MyProxySym1 k0123456789876543210) where- suppressUnusedWarnings = snd (((,) MyProxySym1KindInference) ())- data MyProxySym1 (k0123456789876543210 :: Type) :: (~>) k0123456789876543210 Type- where- MyProxySym1KindInference :: forall k0123456789876543210- a0123456789876543210- arg. SameKind (Apply (MyProxySym1 k0123456789876543210) arg) (MyProxySym2 k0123456789876543210 arg) =>- MyProxySym1 k0123456789876543210 a0123456789876543210- type instance Apply (MyProxySym1 k0123456789876543210) a0123456789876543210 = MyProxy k0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings MyProxySym0 where- suppressUnusedWarnings = snd (((,) MyProxySym0KindInference) ())- data MyProxySym0 :: forall (k0123456789876543210 :: Type).- (~>) Type ((~>) k0123456789876543210 Type)- where- MyProxySym0KindInference :: forall k0123456789876543210- arg. SameKind (Apply MyProxySym0 arg) (MyProxySym1 arg) =>- MyProxySym0 k0123456789876543210- type instance Apply MyProxySym0 k0123456789876543210 = MyProxySym1 k0123456789876543210- type SymmetrySym3 (a0123456789876543210 :: t0123456789876543210) (y0123456789876543210 :: t0123456789876543210) (e0123456789876543210 :: (:~:) a0123456789876543210 y0123456789876543210) =- Symmetry a0123456789876543210 y0123456789876543210 e0123456789876543210- instance SuppressUnusedWarnings (SymmetrySym2 y0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) SymmetrySym2KindInference) ())- data SymmetrySym2 (a0123456789876543210 :: t0123456789876543210) (y0123456789876543210 :: t0123456789876543210) :: (~>) ((:~:) a0123456789876543210 y0123456789876543210) Type- where- SymmetrySym2KindInference :: forall a0123456789876543210- y0123456789876543210- e0123456789876543210- arg. SameKind (Apply (SymmetrySym2 a0123456789876543210 y0123456789876543210) arg) (SymmetrySym3 a0123456789876543210 y0123456789876543210 arg) =>- SymmetrySym2 a0123456789876543210 y0123456789876543210 e0123456789876543210- type instance Apply (SymmetrySym2 y0123456789876543210 a0123456789876543210) e0123456789876543210 = Symmetry y0123456789876543210 a0123456789876543210 e0123456789876543210- instance SuppressUnusedWarnings (SymmetrySym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) SymmetrySym1KindInference) ())- data SymmetrySym1 (a0123456789876543210 :: t0123456789876543210) :: forall (y0123456789876543210 :: t0123456789876543210).- (~>) t0123456789876543210 ((~>) ((:~:) a0123456789876543210 y0123456789876543210) Type)- where- SymmetrySym1KindInference :: forall a0123456789876543210- y0123456789876543210- arg. SameKind (Apply (SymmetrySym1 a0123456789876543210) arg) (SymmetrySym2 a0123456789876543210 arg) =>- SymmetrySym1 a0123456789876543210 y0123456789876543210- type instance Apply (SymmetrySym1 a0123456789876543210) y0123456789876543210 = SymmetrySym2 a0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings SymmetrySym0 where- suppressUnusedWarnings = snd (((,) SymmetrySym0KindInference) ())- data SymmetrySym0 :: forall t0123456789876543210- (a0123456789876543210 :: t0123456789876543210)- (y0123456789876543210 :: t0123456789876543210).- (~>) t0123456789876543210 ((~>) t0123456789876543210 ((~>) ((:~:) a0123456789876543210 y0123456789876543210) Type))- where- SymmetrySym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply SymmetrySym0 arg) (SymmetrySym1 arg) =>- SymmetrySym0 a0123456789876543210- type instance Apply SymmetrySym0 a0123456789876543210 = SymmetrySym1 a0123456789876543210
+ tests/compile-and-dump/Singletons/T216.ghc88.template view
@@ -0,0 +1,56 @@+Singletons/T216.hs:0:0:: Splicing declarations+ genDefunSymbols [''MyProxy, ''Symmetry]+ ======>+ type MyProxySym2 (k0123456789876543210 :: Type) (a0123456789876543210 :: k0123456789876543210) =+ MyProxy k0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (MyProxySym1 k0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MyProxySym1KindInference) ())+ data MyProxySym1 (k0123456789876543210 :: Type) :: (~>) k0123456789876543210 Type+ where+ MyProxySym1KindInference :: forall k0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (MyProxySym1 k0123456789876543210) arg) (MyProxySym2 k0123456789876543210 arg) =>+ MyProxySym1 k0123456789876543210 a0123456789876543210+ type instance Apply (MyProxySym1 k0123456789876543210) a0123456789876543210 = MyProxy k0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings MyProxySym0 where+ suppressUnusedWarnings = snd (((,) MyProxySym0KindInference) ())+ data MyProxySym0 :: forall (k0123456789876543210 :: Type).+ (~>) Type ((~>) k0123456789876543210 Type)+ where+ MyProxySym0KindInference :: forall k0123456789876543210+ arg. SameKind (Apply MyProxySym0 arg) (MyProxySym1 arg) =>+ MyProxySym0 k0123456789876543210+ type instance Apply MyProxySym0 k0123456789876543210 = MyProxySym1 k0123456789876543210+ type SymmetrySym3 (a0123456789876543210 :: t0123456789876543210) (y0123456789876543210 :: t0123456789876543210) (e0123456789876543210 :: (:~:) a0123456789876543210 y0123456789876543210) =+ Symmetry a0123456789876543210 y0123456789876543210 e0123456789876543210+ instance SuppressUnusedWarnings (SymmetrySym2 y0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) SymmetrySym2KindInference) ())+ data SymmetrySym2 (a0123456789876543210 :: t0123456789876543210) (y0123456789876543210 :: t0123456789876543210) :: (~>) ((:~:) a0123456789876543210 y0123456789876543210) Type+ where+ SymmetrySym2KindInference :: forall a0123456789876543210+ y0123456789876543210+ e0123456789876543210+ arg. SameKind (Apply (SymmetrySym2 a0123456789876543210 y0123456789876543210) arg) (SymmetrySym3 a0123456789876543210 y0123456789876543210 arg) =>+ SymmetrySym2 a0123456789876543210 y0123456789876543210 e0123456789876543210+ type instance Apply (SymmetrySym2 y0123456789876543210 a0123456789876543210) e0123456789876543210 = Symmetry y0123456789876543210 a0123456789876543210 e0123456789876543210+ instance SuppressUnusedWarnings (SymmetrySym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) SymmetrySym1KindInference) ())+ data SymmetrySym1 (a0123456789876543210 :: t0123456789876543210) :: forall (y0123456789876543210 :: t0123456789876543210).+ (~>) t0123456789876543210 ((~>) ((:~:) a0123456789876543210 y0123456789876543210) Type)+ where+ SymmetrySym1KindInference :: forall a0123456789876543210+ y0123456789876543210+ arg. SameKind (Apply (SymmetrySym1 a0123456789876543210) arg) (SymmetrySym2 a0123456789876543210 arg) =>+ SymmetrySym1 a0123456789876543210 y0123456789876543210+ type instance Apply (SymmetrySym1 a0123456789876543210) y0123456789876543210 = SymmetrySym2 a0123456789876543210 y0123456789876543210+ instance SuppressUnusedWarnings SymmetrySym0 where+ suppressUnusedWarnings = snd (((,) SymmetrySym0KindInference) ())+ data SymmetrySym0 :: forall t0123456789876543210+ (a0123456789876543210 :: t0123456789876543210)+ (y0123456789876543210 :: t0123456789876543210).+ (~>) t0123456789876543210 ((~>) t0123456789876543210 ((~>) ((:~:) a0123456789876543210 y0123456789876543210) Type))+ where+ SymmetrySym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply SymmetrySym0 arg) (SymmetrySym1 arg) =>+ SymmetrySym0 a0123456789876543210+ type instance Apply SymmetrySym0 a0123456789876543210 = SymmetrySym1 a0123456789876543210
− tests/compile-and-dump/Singletons/T226.ghc86.template
@@ -1,6 +0,0 @@-Singletons/T226.hs:0:0:: Splicing declarations- singletons [d| class a ~> b |]- ======>- class (~>) a b- class (#~>) (a :: GHC.Types.Type) (b :: GHC.Types.Type)- class (%~>) a b
+ tests/compile-and-dump/Singletons/T226.ghc88.template view
@@ -0,0 +1,6 @@+Singletons/T226.hs:0:0:: Splicing declarations+ singletons [d| class a ~> b |]+ ======>+ class (~>) a b+ class (#~>) (a :: GHC.Types.Type) (b :: GHC.Types.Type)+ class (%~>) a b
− tests/compile-and-dump/Singletons/T229.ghc86.template
@@ -1,24 +0,0 @@-Singletons/T229.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| ___foo :: Bool -> Bool- ___foo _ = True |]- ======>- ___foo :: Bool -> Bool- ___foo _ = True- type US___fooSym1 (a0123456789876543210 :: Bool) =- US___foo a0123456789876543210- instance SuppressUnusedWarnings US___fooSym0 where- suppressUnusedWarnings = snd (((,) US___fooSym0KindInference) ())- data US___fooSym0 :: (~>) Bool Bool- where- US___fooSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply US___fooSym0 arg) (US___fooSym1 arg) =>- US___fooSym0 a0123456789876543210- type instance Apply US___fooSym0 a0123456789876543210 = US___foo a0123456789876543210- type family US___foo (a :: Bool) :: Bool where- US___foo _ = TrueSym0- ___sfoo ::- forall (t :: Bool). Sing t -> Sing (Apply US___fooSym0 t :: Bool)- ___sfoo _ = STrue- instance SingI (US___fooSym0 :: (~>) Bool Bool) where- sing = (singFun1 @US___fooSym0) ___sfoo
+ tests/compile-and-dump/Singletons/T229.ghc88.template view
@@ -0,0 +1,24 @@+Singletons/T229.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| ___foo :: Bool -> Bool+ ___foo _ = True |]+ ======>+ ___foo :: Bool -> Bool+ ___foo _ = True+ type US___fooSym1 (a0123456789876543210 :: Bool) =+ US___foo a0123456789876543210+ instance SuppressUnusedWarnings US___fooSym0 where+ suppressUnusedWarnings = snd (((,) US___fooSym0KindInference) ())+ data US___fooSym0 :: (~>) Bool Bool+ where+ US___fooSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply US___fooSym0 arg) (US___fooSym1 arg) =>+ US___fooSym0 a0123456789876543210+ type instance Apply US___fooSym0 a0123456789876543210 = US___foo a0123456789876543210+ type family US___foo (a :: Bool) :: Bool where+ US___foo _ = TrueSym0+ ___sfoo ::+ forall (t :: Bool). Sing t -> Sing (Apply US___fooSym0 t :: Bool)+ ___sfoo _ = STrue+ instance SingI (US___fooSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @US___fooSym0) ___sfoo
− tests/compile-and-dump/Singletons/T249.ghc86.template
@@ -1,90 +0,0 @@-Singletons/T249.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Foo1 a = MkFoo1 a- data Foo2 a where MkFoo2 :: x -> Foo2 x- data Foo3 a where MkFoo3 :: forall x. x -> Foo3 x |]- ======>- data Foo1 a = MkFoo1 a- data Foo2 a where MkFoo2 :: x -> Foo2 x- data Foo3 a where MkFoo3 :: forall x. x -> Foo3 x- type MkFoo1Sym1 (t0123456789876543210 :: a0123456789876543210) =- MkFoo1 t0123456789876543210- instance SuppressUnusedWarnings MkFoo1Sym0 where- suppressUnusedWarnings = snd (((,) MkFoo1Sym0KindInference) ())- data MkFoo1Sym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 (Foo1 a0123456789876543210)- where- MkFoo1Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkFoo1Sym0 arg) (MkFoo1Sym1 arg) =>- MkFoo1Sym0 t0123456789876543210- type instance Apply MkFoo1Sym0 t0123456789876543210 = MkFoo1 t0123456789876543210- type MkFoo2Sym1 (t0123456789876543210 :: x0123456789876543210) =- MkFoo2 t0123456789876543210- instance SuppressUnusedWarnings MkFoo2Sym0 where- suppressUnusedWarnings = snd (((,) MkFoo2Sym0KindInference) ())- data MkFoo2Sym0 :: forall x0123456789876543210.- (~>) x0123456789876543210 (Foo2 x0123456789876543210)- where- MkFoo2Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkFoo2Sym0 arg) (MkFoo2Sym1 arg) =>- MkFoo2Sym0 t0123456789876543210- type instance Apply MkFoo2Sym0 t0123456789876543210 = MkFoo2 t0123456789876543210- type MkFoo3Sym1 (t0123456789876543210 :: x0123456789876543210) =- MkFoo3 t0123456789876543210- instance SuppressUnusedWarnings MkFoo3Sym0 where- suppressUnusedWarnings = snd (((,) MkFoo3Sym0KindInference) ())- data MkFoo3Sym0 :: forall x0123456789876543210.- (~>) x0123456789876543210 (Foo3 x0123456789876543210)- where- MkFoo3Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkFoo3Sym0 arg) (MkFoo3Sym1 arg) =>- MkFoo3Sym0 t0123456789876543210- type instance Apply MkFoo3Sym0 t0123456789876543210 = MkFoo3 t0123456789876543210- data instance Sing :: Foo1 a -> Type- where- SMkFoo1 :: forall a (n :: a). (Sing (n :: a)) -> Sing (MkFoo1 n)- type SFoo1 = (Sing :: Foo1 a -> Type)- instance SingKind a => SingKind (Foo1 a) where- type Demote (Foo1 a) = Foo1 (Demote a)- fromSing (SMkFoo1 b) = MkFoo1 (fromSing b)- toSing (MkFoo1 (b :: Demote a))- = case toSing b :: SomeSing a of {- SomeSing c -> SomeSing (SMkFoo1 c) }- data instance Sing :: Foo2 a -> Type- where- SMkFoo2 :: forall x (n :: x). (Sing (n :: x)) -> Sing (MkFoo2 n)- type SFoo2 = (Sing :: Foo2 a -> Type)- instance SingKind a => SingKind (Foo2 a) where- type Demote (Foo2 a) = Foo2 (Demote a)- fromSing (SMkFoo2 b) = MkFoo2 (fromSing b)- toSing (MkFoo2 (b :: Demote x))- = case toSing b :: SomeSing x of {- SomeSing c -> SomeSing (SMkFoo2 c) }- data instance Sing :: Foo3 a -> Type- where- SMkFoo3 :: forall x (n :: x). (Sing (n :: x)) -> Sing (MkFoo3 n)- type SFoo3 = (Sing :: Foo3 a -> Type)- instance SingKind a => SingKind (Foo3 a) where- type Demote (Foo3 a) = Foo3 (Demote a)- fromSing (SMkFoo3 b) = MkFoo3 (fromSing b)- toSing (MkFoo3 (b :: Demote x))- = case toSing b :: SomeSing x of {- SomeSing c -> SomeSing (SMkFoo3 c) }- instance SingI n => SingI (MkFoo1 (n :: a)) where- sing = SMkFoo1 sing- instance SingI (MkFoo1Sym0 :: (~>) a (Foo1 a)) where- sing = (singFun1 @MkFoo1Sym0) SMkFoo1- instance SingI (TyCon1 MkFoo1 :: (~>) a (Foo1 a)) where- sing = (singFun1 @(TyCon1 MkFoo1)) SMkFoo1- instance SingI n => SingI (MkFoo2 (n :: x)) where- sing = SMkFoo2 sing- instance SingI (MkFoo2Sym0 :: (~>) x (Foo2 x)) where- sing = (singFun1 @MkFoo2Sym0) SMkFoo2- instance SingI (TyCon1 MkFoo2 :: (~>) x (Foo2 x)) where- sing = (singFun1 @(TyCon1 MkFoo2)) SMkFoo2- instance SingI n => SingI (MkFoo3 (n :: x)) where- sing = SMkFoo3 sing- instance SingI (MkFoo3Sym0 :: (~>) x (Foo3 x)) where- sing = (singFun1 @MkFoo3Sym0) SMkFoo3- instance SingI (TyCon1 MkFoo3 :: (~>) x (Foo3 x)) where- sing = (singFun1 @(TyCon1 MkFoo3)) SMkFoo3
+ tests/compile-and-dump/Singletons/T249.ghc88.template view
@@ -0,0 +1,84 @@+Singletons/T249.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Foo1 a = MkFoo1 a+ data Foo2 a where MkFoo2 :: x -> Foo2 x+ data Foo3 a where MkFoo3 :: forall x. x -> Foo3 x |]+ ======>+ data Foo1 a = MkFoo1 a+ data Foo2 a where MkFoo2 :: x -> Foo2 x+ data Foo3 a where MkFoo3 :: forall x. x -> Foo3 x+ type MkFoo1Sym1 (t0123456789876543210 :: a0123456789876543210) =+ MkFoo1 t0123456789876543210+ instance SuppressUnusedWarnings MkFoo1Sym0 where+ suppressUnusedWarnings = snd (((,) MkFoo1Sym0KindInference) ())+ data MkFoo1Sym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 (Foo1 a0123456789876543210)+ where+ MkFoo1Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkFoo1Sym0 arg) (MkFoo1Sym1 arg) =>+ MkFoo1Sym0 t0123456789876543210+ type instance Apply MkFoo1Sym0 t0123456789876543210 = MkFoo1 t0123456789876543210+ type MkFoo2Sym1 (t0123456789876543210 :: x0123456789876543210) =+ MkFoo2 t0123456789876543210+ instance SuppressUnusedWarnings MkFoo2Sym0 where+ suppressUnusedWarnings = snd (((,) MkFoo2Sym0KindInference) ())+ data MkFoo2Sym0 :: forall x0123456789876543210.+ (~>) x0123456789876543210 (Foo2 x0123456789876543210)+ where+ MkFoo2Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkFoo2Sym0 arg) (MkFoo2Sym1 arg) =>+ MkFoo2Sym0 t0123456789876543210+ type instance Apply MkFoo2Sym0 t0123456789876543210 = MkFoo2 t0123456789876543210+ type MkFoo3Sym1 (t0123456789876543210 :: x0123456789876543210) =+ MkFoo3 t0123456789876543210+ instance SuppressUnusedWarnings MkFoo3Sym0 where+ suppressUnusedWarnings = snd (((,) MkFoo3Sym0KindInference) ())+ data MkFoo3Sym0 :: forall x0123456789876543210.+ (~>) x0123456789876543210 (Foo3 x0123456789876543210)+ where+ MkFoo3Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkFoo3Sym0 arg) (MkFoo3Sym1 arg) =>+ MkFoo3Sym0 t0123456789876543210+ type instance Apply MkFoo3Sym0 t0123456789876543210 = MkFoo3 t0123456789876543210+ data SFoo1 :: forall a. Foo1 a -> Type+ where+ SMkFoo1 :: forall a (n :: a). (Sing (n :: a)) -> SFoo1 (MkFoo1 n)+ type instance Sing @(Foo1 a) = SFoo1+ instance SingKind a => SingKind (Foo1 a) where+ type Demote (Foo1 a) = Foo1 (Demote a)+ fromSing (SMkFoo1 b) = MkFoo1 (fromSing b)+ toSing (MkFoo1 (b :: Demote a))+ = case toSing b :: SomeSing a of {+ SomeSing c -> SomeSing (SMkFoo1 c) }+ data SFoo2 :: forall a. Foo2 a -> Type+ where+ SMkFoo2 :: forall x (n :: x). (Sing (n :: x)) -> SFoo2 (MkFoo2 n)+ type instance Sing @(Foo2 a) = SFoo2+ instance SingKind a => SingKind (Foo2 a) where+ type Demote (Foo2 a) = Foo2 (Demote a)+ fromSing (SMkFoo2 b) = MkFoo2 (fromSing b)+ toSing (MkFoo2 (b :: Demote x))+ = case toSing b :: SomeSing x of {+ SomeSing c -> SomeSing (SMkFoo2 c) }+ data SFoo3 :: forall a. Foo3 a -> Type+ where+ SMkFoo3 :: forall x (n :: x). (Sing (n :: x)) -> SFoo3 (MkFoo3 n)+ type instance Sing @(Foo3 a) = SFoo3+ instance SingKind a => SingKind (Foo3 a) where+ type Demote (Foo3 a) = Foo3 (Demote a)+ fromSing (SMkFoo3 b) = MkFoo3 (fromSing b)+ toSing (MkFoo3 (b :: Demote x))+ = case toSing b :: SomeSing x of {+ SomeSing c -> SomeSing (SMkFoo3 c) }+ instance SingI n => SingI (MkFoo1 (n :: a)) where+ sing = SMkFoo1 sing+ instance SingI (MkFoo1Sym0 :: (~>) a (Foo1 a)) where+ sing = (singFun1 @MkFoo1Sym0) SMkFoo1+ instance SingI n => SingI (MkFoo2 (n :: x)) where+ sing = SMkFoo2 sing+ instance SingI (MkFoo2Sym0 :: (~>) x (Foo2 x)) where+ sing = (singFun1 @MkFoo2Sym0) SMkFoo2+ instance SingI n => SingI (MkFoo3 (n :: x)) where+ sing = SMkFoo3 sing+ instance SingI (MkFoo3Sym0 :: (~>) x (Foo3 x)) where+ sing = (singFun1 @MkFoo3Sym0) SMkFoo3
− tests/compile-and-dump/Singletons/T271.ghc86.template
@@ -1,199 +0,0 @@-Singletons/T271.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| newtype Constant (a :: Type) (b :: Type)- = Constant a- deriving (Eq, Ord)- data Identity :: Type -> Type- where Identity :: a -> Identity a- deriving (Eq, Ord) |]- ======>- newtype Constant (a :: Type) (b :: Type)- = Constant a- deriving (Eq, Ord)- data Identity :: Type -> Type- where Identity :: a -> Identity a- deriving (Eq, Ord)- type ConstantSym1 (t0123456789876543210 :: a0123456789876543210) =- Constant t0123456789876543210- instance SuppressUnusedWarnings ConstantSym0 where- suppressUnusedWarnings = snd (((,) ConstantSym0KindInference) ())- data ConstantSym0 :: forall (a0123456789876543210 :: Type)- (b0123456789876543210 :: Type).- (~>) a0123456789876543210 (Constant (a0123456789876543210 :: Type) (b0123456789876543210 :: Type))- where- ConstantSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply ConstantSym0 arg) (ConstantSym1 arg) =>- ConstantSym0 t0123456789876543210- type instance Apply ConstantSym0 t0123456789876543210 = Constant t0123456789876543210- type IdentitySym1 (t0123456789876543210 :: a0123456789876543210) =- Identity t0123456789876543210- instance SuppressUnusedWarnings IdentitySym0 where- suppressUnusedWarnings = snd (((,) IdentitySym0KindInference) ())- data IdentitySym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 (Identity a0123456789876543210)- where- IdentitySym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply IdentitySym0 arg) (IdentitySym1 arg) =>- IdentitySym0 t0123456789876543210- type instance Apply IdentitySym0 t0123456789876543210 = Identity t0123456789876543210- type family Compare_0123456789876543210 (a :: Constant a b) (a :: Constant a b) :: Ordering where- Compare_0123456789876543210 (Constant a_0123456789876543210) (Constant b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Constant a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: Constant a0123456789876543210 b0123456789876543210) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Constant a0123456789876543210 b0123456789876543210) :: (~>) (Constant a0123456789876543210 b0123456789876543210) Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) (Constant a0123456789876543210 b0123456789876543210) ((~>) (Constant a0123456789876543210 b0123456789876543210) Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd (Constant a b) where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family Compare_0123456789876543210 (a :: Identity a) (a :: Identity a) :: Ordering where- Compare_0123456789876543210 (Identity a_0123456789876543210) (Identity b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])- type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Identity a0123456789876543210) (a0123456789876543210 :: Identity a0123456789876543210) =- Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym1KindInference) ())- data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Identity a0123456789876543210) :: (~>) (Identity a0123456789876543210) Ordering- where- Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>- Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Compare_0123456789876543210Sym0KindInference) ())- data Compare_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) (Identity a0123456789876543210) ((~>) (Identity a0123456789876543210) Ordering)- where- Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>- Compare_0123456789876543210Sym0 a0123456789876543210- type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210- instance POrd (Identity a) where- type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a- type family Equals_0123456789876543210 (a :: Constant a b) (b :: Constant a b) :: Bool where- Equals_0123456789876543210 (Constant a) (Constant b) = (==) a b- Equals_0123456789876543210 (_ :: Constant a b) (_ :: Constant a b) = FalseSym0- instance PEq (Constant a b) where- type (==) a b = Equals_0123456789876543210 a b- type family Equals_0123456789876543210 (a :: Identity a) (b :: Identity a) :: Bool where- Equals_0123456789876543210 (Identity a) (Identity b) = (==) a b- Equals_0123456789876543210 (_ :: Identity a) (_ :: Identity a) = FalseSym0- instance PEq (Identity a) where- type (==) a b = Equals_0123456789876543210 a b- data instance Sing :: Constant a b -> Type- where- SConstant :: forall a (n :: a).- (Sing (n :: a)) -> Sing (Constant n)- type SConstant = (Sing :: Constant a b -> Type)- instance (SingKind a, SingKind b) => SingKind (Constant a b) where- type Demote (Constant a b) = Constant (Demote a) (Demote b)- fromSing (SConstant b) = Constant (fromSing b)- toSing (Constant (b :: Demote a))- = case toSing b :: SomeSing a of {- SomeSing c -> SomeSing (SConstant c) }- data instance Sing :: Identity a -> Type- where- SIdentity :: forall a (n :: a).- (Sing (n :: a)) -> Sing (Identity n)- type SIdentity = (Sing :: Identity a -> Type)- instance SingKind a => SingKind (Identity a) where- type Demote (Identity a) = Identity (Demote a)- fromSing (SIdentity b) = Identity (fromSing b)- toSing (Identity (b :: Demote a))- = case toSing b :: SomeSing a of {- SomeSing c -> SomeSing (SIdentity c) }- instance SOrd a => SOrd (Constant a b) where- sCompare ::- forall (t1 :: Constant a b) (t2 :: Constant a b).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun (Constant a b) ((~>) (Constant a b) Ordering)- -> Type) t1) t2)- sCompare- (SConstant (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SConstant (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing- ((singFun2 @(:@#@$))- Data.Singletons.Prelude.Instances.SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- Data.Singletons.Prelude.Instances.SNil)- instance SOrd a => SOrd (Identity a) where- sCompare ::- forall (t1 :: Identity a) (t2 :: Identity a).- Sing t1- -> Sing t2- -> Sing (Apply (Apply (CompareSym0 :: TyFun (Identity a) ((~>) (Identity a) Ordering)- -> Type) t1) t2)- sCompare- (SIdentity (sA_0123456789876543210 :: Sing a_0123456789876543210))- (SIdentity (sB_0123456789876543210 :: Sing b_0123456789876543210))- = (applySing- ((applySing- ((applySing ((singFun3 @FoldlSym0) sFoldl))- ((singFun2 @ThenCmpSym0) sThenCmp)))- SEQ))- ((applySing- ((applySing- ((singFun2 @(:@#@$))- Data.Singletons.Prelude.Instances.SCons))- ((applySing- ((applySing ((singFun2 @CompareSym0) sCompare))- sA_0123456789876543210))- sB_0123456789876543210)))- Data.Singletons.Prelude.Instances.SNil)- instance SEq a => SEq (Constant a b) where- (%==) (SConstant a) (SConstant b) = ((%==) a) b- instance SDecide a => SDecide (Constant a b) where- (%~) (SConstant a) (SConstant b)- = case ((%~) a) b of- Proved Refl -> Proved Refl- Disproved contra- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- instance SEq a => SEq (Identity a) where- (%==) (SIdentity a) (SIdentity b) = ((%==) a) b- instance SDecide a => SDecide (Identity a) where- (%~) (SIdentity a) (SIdentity b)- = case ((%~) a) b of- Proved Refl -> Proved Refl- Disproved contra- -> Disproved (\ refl -> case refl of { Refl -> contra Refl })- instance SingI n => SingI (Constant (n :: a)) where- sing = SConstant sing- instance SingI (ConstantSym0 :: (~>) a (Constant (a :: Type) (b :: Type))) where- sing = (singFun1 @ConstantSym0) SConstant- instance SingI (TyCon1 Constant :: (~>) a (Constant (a :: Type) (b :: Type))) where- sing = (singFun1 @(TyCon1 Constant)) SConstant- instance SingI n => SingI (Identity (n :: a)) where- sing = SIdentity sing- instance SingI (IdentitySym0 :: (~>) a (Identity a)) where- sing = (singFun1 @IdentitySym0) SIdentity- instance SingI (TyCon1 Identity :: (~>) a (Identity a)) where- sing = (singFun1 @(TyCon1 Identity)) SIdentity
+ tests/compile-and-dump/Singletons/T271.ghc88.template view
@@ -0,0 +1,215 @@+Singletons/T271.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| newtype Constant (a :: Type) (b :: Type)+ = Constant a+ deriving (Eq, Ord)+ data Identity :: Type -> Type+ where Identity :: a -> Identity a+ deriving (Eq, Ord) |]+ ======>+ newtype Constant (a :: Type) (b :: Type)+ = Constant a+ deriving (Eq, Ord)+ data Identity :: Type -> Type+ where Identity :: a -> Identity a+ deriving (Eq, Ord)+ type ConstantSym1 (t0123456789876543210 :: a0123456789876543210) =+ Constant t0123456789876543210+ instance SuppressUnusedWarnings ConstantSym0 where+ suppressUnusedWarnings = snd (((,) ConstantSym0KindInference) ())+ data ConstantSym0 :: forall (a0123456789876543210 :: Type)+ (b0123456789876543210 :: Type).+ (~>) a0123456789876543210 (Constant (a0123456789876543210 :: Type) (b0123456789876543210 :: Type))+ where+ ConstantSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply ConstantSym0 arg) (ConstantSym1 arg) =>+ ConstantSym0 t0123456789876543210+ type instance Apply ConstantSym0 t0123456789876543210 = Constant t0123456789876543210+ type IdentitySym1 (t0123456789876543210 :: a0123456789876543210) =+ Identity t0123456789876543210+ instance SuppressUnusedWarnings IdentitySym0 where+ suppressUnusedWarnings = snd (((,) IdentitySym0KindInference) ())+ data IdentitySym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 (Identity a0123456789876543210)+ where+ IdentitySym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply IdentitySym0 arg) (IdentitySym1 arg) =>+ IdentitySym0 t0123456789876543210+ type instance Apply IdentitySym0 t0123456789876543210 = Identity t0123456789876543210+ type family Compare_0123456789876543210 (a :: Constant a b) (a :: Constant a b) :: Ordering where+ Compare_0123456789876543210 (Constant a_0123456789876543210) (Constant b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Constant a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: Constant a0123456789876543210 b0123456789876543210) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Constant a0123456789876543210 b0123456789876543210) :: (~>) (Constant a0123456789876543210 b0123456789876543210) Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) (Constant a0123456789876543210 b0123456789876543210) ((~>) (Constant a0123456789876543210 b0123456789876543210) Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd (Constant a b) where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family Compare_0123456789876543210 (a :: Identity a) (a :: Identity a) :: Ordering where+ Compare_0123456789876543210 (Identity a_0123456789876543210) (Identity b_0123456789876543210) = Apply (Apply (Apply FoldlSym0 ThenCmpSym0) EQSym0) (Apply (Apply (:@#@$) (Apply (Apply CompareSym0 a_0123456789876543210) b_0123456789876543210)) '[])+ type Compare_0123456789876543210Sym2 (a0123456789876543210 :: Identity a0123456789876543210) (a0123456789876543210 :: Identity a0123456789876543210) =+ Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Compare_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym1KindInference) ())+ data Compare_0123456789876543210Sym1 (a0123456789876543210 :: Identity a0123456789876543210) :: (~>) (Identity a0123456789876543210) Ordering+ where+ Compare_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Compare_0123456789876543210Sym1 a0123456789876543210) arg) (Compare_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Compare_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Compare_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Compare_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Compare_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Compare_0123456789876543210Sym0KindInference) ())+ data Compare_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) (Identity a0123456789876543210) ((~>) (Identity a0123456789876543210) Ordering)+ where+ Compare_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Compare_0123456789876543210Sym0 arg) (Compare_0123456789876543210Sym1 arg) =>+ Compare_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Compare_0123456789876543210Sym0 a0123456789876543210 = Compare_0123456789876543210Sym1 a0123456789876543210+ instance POrd (Identity a) where+ type Compare a a = Apply (Apply Compare_0123456789876543210Sym0 a) a+ type family Equals_0123456789876543210 (a :: Constant a b) (b :: Constant a b) :: Bool where+ Equals_0123456789876543210 (Constant a) (Constant b) = (==) a b+ Equals_0123456789876543210 (_ :: Constant a b) (_ :: Constant a b) = FalseSym0+ instance PEq (Constant a b) where+ type (==) a b = Equals_0123456789876543210 a b+ type family Equals_0123456789876543210 (a :: Identity a) (b :: Identity a) :: Bool where+ Equals_0123456789876543210 (Identity a) (Identity b) = (==) a b+ Equals_0123456789876543210 (_ :: Identity a) (_ :: Identity a) = FalseSym0+ instance PEq (Identity a) where+ type (==) a b = Equals_0123456789876543210 a b+ data SConstant :: forall a b. Constant a b -> Type+ where+ SConstant :: forall a (n :: a).+ (Sing (n :: a)) -> SConstant (Constant n)+ type instance Sing @(Constant a b) = SConstant+ instance (SingKind a, SingKind b) => SingKind (Constant a b) where+ type Demote (Constant a b) = Constant (Demote a) (Demote b)+ fromSing (SConstant b) = Constant (fromSing b)+ toSing (Constant (b :: Demote a))+ = case toSing b :: SomeSing a of {+ SomeSing c -> SomeSing (SConstant c) }+ data SIdentity :: forall a. Identity a -> Type+ where+ SIdentity :: forall a (n :: a).+ (Sing (n :: a)) -> SIdentity (Identity n)+ type instance Sing @(Identity a) = SIdentity+ instance SingKind a => SingKind (Identity a) where+ type Demote (Identity a) = Identity (Demote a)+ fromSing (SIdentity b) = Identity (fromSing b)+ toSing (Identity (b :: Demote a))+ = case toSing b :: SomeSing a of {+ SomeSing c -> SomeSing (SIdentity c) }+ instance SOrd a => SOrd (Constant a b) where+ sCompare ::+ forall (t1 :: Constant a b) (t2 :: Constant a b).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun (Constant a b) ((~>) (Constant a b) Ordering)+ -> Type) t1) t2)+ sCompare+ (SConstant (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SConstant (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing+ ((singFun2 @(:@#@$))+ Data.Singletons.Prelude.Instances.SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ Data.Singletons.Prelude.Instances.SNil)+ instance SOrd a => SOrd (Identity a) where+ sCompare ::+ forall (t1 :: Identity a) (t2 :: Identity a).+ Sing t1+ -> Sing t2+ -> Sing (Apply (Apply (CompareSym0 :: TyFun (Identity a) ((~>) (Identity a) Ordering)+ -> Type) t1) t2)+ sCompare+ (SIdentity (sA_0123456789876543210 :: Sing a_0123456789876543210))+ (SIdentity (sB_0123456789876543210 :: Sing b_0123456789876543210))+ = (applySing+ ((applySing+ ((applySing ((singFun3 @FoldlSym0) sFoldl))+ ((singFun2 @ThenCmpSym0) sThenCmp)))+ SEQ))+ ((applySing+ ((applySing+ ((singFun2 @(:@#@$))+ Data.Singletons.Prelude.Instances.SCons))+ ((applySing+ ((applySing ((singFun2 @CompareSym0) sCompare))+ sA_0123456789876543210))+ sB_0123456789876543210)))+ Data.Singletons.Prelude.Instances.SNil)+ instance SEq a => SEq (Constant a b) where+ (%==) (SConstant a) (SConstant b) = ((%==) a) b+ instance SDecide a => SDecide (Constant a b) where+ (%~) (SConstant a) (SConstant b)+ = case ((%~) a) b of+ Proved Refl -> Proved Refl+ Disproved contra+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ instance SDecide a =>+ Data.Type.Equality.TestEquality (SConstant :: Constant a b+ -> Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance SDecide a =>+ Data.Type.Coercion.TestCoercion (SConstant :: Constant a b+ -> Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance SEq a => SEq (Identity a) where+ (%==) (SIdentity a) (SIdentity b) = ((%==) a) b+ instance SDecide a => SDecide (Identity a) where+ (%~) (SIdentity a) (SIdentity b)+ = case ((%~) a) b of+ Proved Refl -> Proved Refl+ Disproved contra+ -> Disproved (\ refl -> case refl of { Refl -> contra Refl })+ instance SDecide a =>+ Data.Type.Equality.TestEquality (SIdentity :: Identity a+ -> Type) where+ Data.Type.Equality.testEquality+ = Data.Singletons.Decide.decideEquality+ instance SDecide a =>+ Data.Type.Coercion.TestCoercion (SIdentity :: Identity a+ -> Type) where+ Data.Type.Coercion.testCoercion+ = Data.Singletons.Decide.decideCoercion+ instance SingI n => SingI (Constant (n :: a)) where+ sing = SConstant sing+ instance SingI (ConstantSym0 :: (~>) a (Constant (a :: Type) (b :: Type))) where+ sing = (singFun1 @ConstantSym0) SConstant+ instance SingI n => SingI (Identity (n :: a)) where+ sing = SIdentity sing+ instance SingI (IdentitySym0 :: (~>) a (Identity a)) where+ sing = (singFun1 @IdentitySym0) SIdentity
− tests/compile-and-dump/Singletons/T287.ghc86.template
@@ -1,116 +0,0 @@-Singletons/T287.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| class S a where- (<<>>) :: a -> a -> a- - instance S b => S (a -> b) where- f <<>> g = \ x -> f x <<>> g x |]- ======>- class S a where- (<<>>) :: a -> a -> a- instance S b => S (a -> b) where- (<<>>) f g = \ x -> (f x <<>> g x)- type (<<>>@#@$$$) (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: a0123456789876543210) =- (<<>>) arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings ((<<>>@#@$$) arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:<<>>@#@$$###)) ())- data (<<>>@#@$$) (arg0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 a0123456789876543210- where- (:<<>>@#@$$###) :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply ((<<>>@#@$$) arg0123456789876543210) arg) ((<<>>@#@$$$) arg0123456789876543210 arg) =>- (<<>>@#@$$) arg0123456789876543210 arg0123456789876543210- type instance Apply ((<<>>@#@$$) arg0123456789876543210) arg0123456789876543210 = (<<>>) arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (<<>>@#@$) where- suppressUnusedWarnings = snd (((,) (:<<>>@#@$###)) ())- data (<<>>@#@$) :: forall a0123456789876543210.- (~>) a0123456789876543210 ((~>) a0123456789876543210 a0123456789876543210)- where- (:<<>>@#@$###) :: forall arg0123456789876543210- arg. SameKind (Apply (<<>>@#@$) arg) ((<<>>@#@$$) arg) =>- (<<>>@#@$) arg0123456789876543210- type instance Apply (<<>>@#@$) arg0123456789876543210 = (<<>>@#@$$) arg0123456789876543210- class PS (a :: GHC.Types.Type) where- type (<<>>) (arg :: a) (arg :: a) :: a- type family Lambda_0123456789876543210 f g t where- Lambda_0123456789876543210 f g x = Apply (Apply (<<>>@#@$) (Apply f x)) (Apply g x)- type Lambda_0123456789876543210Sym3 f0123456789876543210 g0123456789876543210 t0123456789876543210 =- Lambda_0123456789876543210 f0123456789876543210 g0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 g0123456789876543210 f0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())- data Lambda_0123456789876543210Sym2 f0123456789876543210 g0123456789876543210 t0123456789876543210- where- Lambda_0123456789876543210Sym2KindInference :: forall f0123456789876543210- g0123456789876543210- t0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym2 f0123456789876543210 g0123456789876543210) arg) (Lambda_0123456789876543210Sym3 f0123456789876543210 g0123456789876543210 arg) =>- Lambda_0123456789876543210Sym2 f0123456789876543210 g0123456789876543210 t0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym2 g0123456789876543210 f0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 g0123456789876543210 f0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 f0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())- data Lambda_0123456789876543210Sym1 f0123456789876543210 g0123456789876543210- where- Lambda_0123456789876543210Sym1KindInference :: forall f0123456789876543210- g0123456789876543210- arg. SameKind (Apply (Lambda_0123456789876543210Sym1 f0123456789876543210) arg) (Lambda_0123456789876543210Sym2 f0123456789876543210 arg) =>- Lambda_0123456789876543210Sym1 f0123456789876543210 g0123456789876543210- type instance Apply (Lambda_0123456789876543210Sym1 f0123456789876543210) g0123456789876543210 = Lambda_0123456789876543210Sym2 f0123456789876543210 g0123456789876543210- instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())- data Lambda_0123456789876543210Sym0 f0123456789876543210- where- Lambda_0123456789876543210Sym0KindInference :: forall f0123456789876543210- arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>- Lambda_0123456789876543210Sym0 f0123456789876543210- type instance Apply Lambda_0123456789876543210Sym0 f0123456789876543210 = Lambda_0123456789876543210Sym1 f0123456789876543210- type family TFHelper_0123456789876543210 (a :: (~>) a b) (a :: (~>) a b) :: (~>) a b where- TFHelper_0123456789876543210 f g = Apply (Apply Lambda_0123456789876543210Sym0 f) g- type TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) =- TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())- data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)- where- TFHelper_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>- TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())- data TFHelper_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210))- where- TFHelper_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>- TFHelper_0123456789876543210Sym0 a0123456789876543210- type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210- instance PS ((~>) a b) where- type (<<>>) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a- class SS a where- (%<<>>) ::- forall (t :: a) (t :: a).- Sing t -> Sing t -> Sing (Apply (Apply (<<>>@#@$) t) t :: a)- instance SS b => SS ((~>) a b) where- (%<<>>) ::- forall (t :: (~>) a b) (t :: (~>) a b).- Sing t -> Sing t -> Sing (Apply (Apply (<<>>@#@$) t) t :: (~>) a b)- (%<<>>) (sF :: Sing f) (sG :: Sing g)- = (singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 f) g))- (\ sX- -> case sX of {- (_ :: Sing x)- -> (applySing- ((applySing ((singFun2 @(<<>>@#@$)) (%<<>>))) ((applySing sF) sX)))- ((applySing sG) sX) })- instance SS a => SingI ((<<>>@#@$) :: (~>) a ((~>) a a)) where- sing = (singFun2 @(<<>>@#@$)) (%<<>>)- instance (SS a, SingI d) =>- SingI ((<<>>@#@$$) (d :: a) :: (~>) a a) where- sing = (singFun1 @((<<>>@#@$$) (d :: a))) ((%<<>>) (sing @d))
+ tests/compile-and-dump/Singletons/T287.ghc88.template view
@@ -0,0 +1,116 @@+Singletons/T287.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| class S a where+ (<<>>) :: a -> a -> a+ + instance S b => S (a -> b) where+ f <<>> g = \ x -> f x <<>> g x |]+ ======>+ class S a where+ (<<>>) :: a -> a -> a+ instance S b => S (a -> b) where+ (<<>>) f g = \ x -> (f x <<>> g x)+ type (<<>>@#@$$$) (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: a0123456789876543210) =+ (<<>>) arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings ((<<>>@#@$$) arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:<<>>@#@$$###)) ())+ data (<<>>@#@$$) (arg0123456789876543210 :: a0123456789876543210) :: (~>) a0123456789876543210 a0123456789876543210+ where+ (:<<>>@#@$$###) :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply ((<<>>@#@$$) arg0123456789876543210) arg) ((<<>>@#@$$$) arg0123456789876543210 arg) =>+ (<<>>@#@$$) arg0123456789876543210 arg0123456789876543210+ type instance Apply ((<<>>@#@$$) arg0123456789876543210) arg0123456789876543210 = (<<>>) arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (<<>>@#@$) where+ suppressUnusedWarnings = snd (((,) (:<<>>@#@$###)) ())+ data (<<>>@#@$) :: forall a0123456789876543210.+ (~>) a0123456789876543210 ((~>) a0123456789876543210 a0123456789876543210)+ where+ (:<<>>@#@$###) :: forall arg0123456789876543210+ arg. SameKind (Apply (<<>>@#@$) arg) ((<<>>@#@$$) arg) =>+ (<<>>@#@$) arg0123456789876543210+ type instance Apply (<<>>@#@$) arg0123456789876543210 = (<<>>@#@$$) arg0123456789876543210+ class PS (a :: GHC.Types.Type) where+ type (<<>>) (arg :: a) (arg :: a) :: a+ type family Lambda_0123456789876543210 f g t where+ Lambda_0123456789876543210 f g x = Apply (Apply (<<>>@#@$) (Apply f x)) (Apply g x)+ type Lambda_0123456789876543210Sym3 f0123456789876543210 g0123456789876543210 t0123456789876543210 =+ Lambda_0123456789876543210 f0123456789876543210 g0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym2 g0123456789876543210 f0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym2KindInference) ())+ data Lambda_0123456789876543210Sym2 f0123456789876543210 g0123456789876543210 t0123456789876543210+ where+ Lambda_0123456789876543210Sym2KindInference :: forall f0123456789876543210+ g0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym2 f0123456789876543210 g0123456789876543210) arg) (Lambda_0123456789876543210Sym3 f0123456789876543210 g0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym2 f0123456789876543210 g0123456789876543210 t0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym2 g0123456789876543210 f0123456789876543210) t0123456789876543210 = Lambda_0123456789876543210 g0123456789876543210 f0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (Lambda_0123456789876543210Sym1 f0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym1KindInference) ())+ data Lambda_0123456789876543210Sym1 f0123456789876543210 g0123456789876543210+ where+ Lambda_0123456789876543210Sym1KindInference :: forall f0123456789876543210+ g0123456789876543210+ arg. SameKind (Apply (Lambda_0123456789876543210Sym1 f0123456789876543210) arg) (Lambda_0123456789876543210Sym2 f0123456789876543210 arg) =>+ Lambda_0123456789876543210Sym1 f0123456789876543210 g0123456789876543210+ type instance Apply (Lambda_0123456789876543210Sym1 f0123456789876543210) g0123456789876543210 = Lambda_0123456789876543210Sym2 f0123456789876543210 g0123456789876543210+ instance SuppressUnusedWarnings Lambda_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Lambda_0123456789876543210Sym0KindInference) ())+ data Lambda_0123456789876543210Sym0 f0123456789876543210+ where+ Lambda_0123456789876543210Sym0KindInference :: forall f0123456789876543210+ arg. SameKind (Apply Lambda_0123456789876543210Sym0 arg) (Lambda_0123456789876543210Sym1 arg) =>+ Lambda_0123456789876543210Sym0 f0123456789876543210+ type instance Apply Lambda_0123456789876543210Sym0 f0123456789876543210 = Lambda_0123456789876543210Sym1 f0123456789876543210+ type family TFHelper_0123456789876543210 (a :: (~>) a b) (a :: (~>) a b) :: (~>) a b where+ TFHelper_0123456789876543210 f g = Apply (Apply Lambda_0123456789876543210Sym0 f) g+ type TFHelper_0123456789876543210Sym2 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) =+ TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (TFHelper_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) TFHelper_0123456789876543210Sym1KindInference) ())+ data TFHelper_0123456789876543210Sym1 (a0123456789876543210 :: (~>) a0123456789876543210 b0123456789876543210) :: (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210)+ where+ TFHelper_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) arg) (TFHelper_0123456789876543210Sym2 a0123456789876543210 arg) =>+ TFHelper_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (TFHelper_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = TFHelper_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings TFHelper_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) TFHelper_0123456789876543210Sym0KindInference) ())+ data TFHelper_0123456789876543210Sym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) ((~>) a0123456789876543210 b0123456789876543210) ((~>) a0123456789876543210 b0123456789876543210))+ where+ TFHelper_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply TFHelper_0123456789876543210Sym0 arg) (TFHelper_0123456789876543210Sym1 arg) =>+ TFHelper_0123456789876543210Sym0 a0123456789876543210+ type instance Apply TFHelper_0123456789876543210Sym0 a0123456789876543210 = TFHelper_0123456789876543210Sym1 a0123456789876543210+ instance PS ((~>) a b) where+ type (<<>>) a a = Apply (Apply TFHelper_0123456789876543210Sym0 a) a+ class SS a where+ (%<<>>) ::+ forall (t :: a) (t :: a).+ Sing t -> Sing t -> Sing (Apply (Apply (<<>>@#@$) t) t :: a)+ instance SS b => SS ((~>) a b) where+ (%<<>>) ::+ forall (t :: (~>) a b) (t :: (~>) a b).+ Sing t -> Sing t -> Sing (Apply (Apply (<<>>@#@$) t) t :: (~>) a b)+ (%<<>>) (sF :: Sing f) (sG :: Sing g)+ = (singFun1 @(Apply (Apply Lambda_0123456789876543210Sym0 f) g))+ (\ sX+ -> case sX of {+ (_ :: Sing x)+ -> (applySing+ ((applySing ((singFun2 @(<<>>@#@$)) (%<<>>))) ((applySing sF) sX)))+ ((applySing sG) sX) })+ instance SS a => SingI ((<<>>@#@$) :: (~>) a ((~>) a a)) where+ sing = (singFun2 @(<<>>@#@$)) (%<<>>)+ instance (SS a, SingI d) =>+ SingI ((<<>>@#@$$) (d :: a) :: (~>) a a) where+ sing = (singFun1 @((<<>>@#@$$) (d :: a))) ((%<<>>) (sing @d))
− tests/compile-and-dump/Singletons/T29.ghc86.template
@@ -1,115 +0,0 @@-Singletons/T29.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo :: Bool -> Bool- foo x = not $ x- bar :: Bool -> Bool- bar x = not . not . not $ x- baz :: Bool -> Bool- baz x = not $! x- ban :: Bool -> Bool- ban x = not . not . not $! x |]- ======>- foo :: Bool -> Bool- foo x = (not $ x)- bar :: Bool -> Bool- bar x = ((not . (not . not)) $ x)- baz :: Bool -> Bool- baz x = (not $! x)- ban :: Bool -> Bool- ban x = ((not . (not . not)) $! x)- type BanSym1 (a0123456789876543210 :: Bool) =- Ban a0123456789876543210- instance SuppressUnusedWarnings BanSym0 where- suppressUnusedWarnings = snd (((,) BanSym0KindInference) ())- data BanSym0 :: (~>) Bool Bool- where- BanSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply BanSym0 arg) (BanSym1 arg) =>- BanSym0 a0123456789876543210- type instance Apply BanSym0 a0123456789876543210 = Ban a0123456789876543210- type BazSym1 (a0123456789876543210 :: Bool) =- Baz a0123456789876543210- instance SuppressUnusedWarnings BazSym0 where- suppressUnusedWarnings = snd (((,) BazSym0KindInference) ())- data BazSym0 :: (~>) Bool Bool- where- BazSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply BazSym0 arg) (BazSym1 arg) =>- BazSym0 a0123456789876543210- type instance Apply BazSym0 a0123456789876543210 = Baz a0123456789876543210- type BarSym1 (a0123456789876543210 :: Bool) =- Bar a0123456789876543210- instance SuppressUnusedWarnings BarSym0 where- suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())- data BarSym0 :: (~>) Bool Bool- where- BarSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>- BarSym0 a0123456789876543210- type instance Apply BarSym0 a0123456789876543210 = Bar a0123456789876543210- type FooSym1 (a0123456789876543210 :: Bool) =- Foo a0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: (~>) Bool Bool- where- FooSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 a0123456789876543210- type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210- type family Ban (a :: Bool) :: Bool where- Ban x = Apply (Apply ($!@#@$) (Apply (Apply (.@#@$) NotSym0) (Apply (Apply (.@#@$) NotSym0) NotSym0))) x- type family Baz (a :: Bool) :: Bool where- Baz x = Apply (Apply ($!@#@$) NotSym0) x- type family Bar (a :: Bool) :: Bool where- Bar x = Apply (Apply ($@#@$) (Apply (Apply (.@#@$) NotSym0) (Apply (Apply (.@#@$) NotSym0) NotSym0))) x- type family Foo (a :: Bool) :: Bool where- Foo x = Apply (Apply ($@#@$) NotSym0) x- sBan ::- forall (t :: Bool). Sing t -> Sing (Apply BanSym0 t :: Bool)- sBaz ::- forall (t :: Bool). Sing t -> Sing (Apply BazSym0 t :: Bool)- sBar ::- forall (t :: Bool). Sing t -> Sing (Apply BarSym0 t :: Bool)- sFoo ::- forall (t :: Bool). Sing t -> Sing (Apply FooSym0 t :: Bool)- sBan (sX :: Sing x)- = (applySing- ((applySing ((singFun2 @($!@#@$)) (%$!)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @NotSym0) sNot)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @NotSym0) sNot)))- ((singFun1 @NotSym0) sNot)))))- sX- sBaz (sX :: Sing x)- = (applySing- ((applySing ((singFun2 @($!@#@$)) (%$!)))- ((singFun1 @NotSym0) sNot)))- sX- sBar (sX :: Sing x)- = (applySing- ((applySing ((singFun2 @($@#@$)) (%$)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @NotSym0) sNot)))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((singFun1 @NotSym0) sNot)))- ((singFun1 @NotSym0) sNot)))))- sX- sFoo (sX :: Sing x)- = (applySing- ((applySing ((singFun2 @($@#@$)) (%$)))- ((singFun1 @NotSym0) sNot)))- sX- instance SingI (BanSym0 :: (~>) Bool Bool) where- sing = (singFun1 @BanSym0) sBan- instance SingI (BazSym0 :: (~>) Bool Bool) where- sing = (singFun1 @BazSym0) sBaz- instance SingI (BarSym0 :: (~>) Bool Bool) where- sing = (singFun1 @BarSym0) sBar- instance SingI (FooSym0 :: (~>) Bool Bool) where- sing = (singFun1 @FooSym0) sFoo
+ tests/compile-and-dump/Singletons/T29.ghc88.template view
@@ -0,0 +1,115 @@+Singletons/T29.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo :: Bool -> Bool+ foo x = not $ x+ bar :: Bool -> Bool+ bar x = not . not . not $ x+ baz :: Bool -> Bool+ baz x = not $! x+ ban :: Bool -> Bool+ ban x = not . not . not $! x |]+ ======>+ foo :: Bool -> Bool+ foo x = (not $ x)+ bar :: Bool -> Bool+ bar x = ((not . (not . not)) $ x)+ baz :: Bool -> Bool+ baz x = (not $! x)+ ban :: Bool -> Bool+ ban x = ((not . (not . not)) $! x)+ type BanSym1 (a0123456789876543210 :: Bool) =+ Ban a0123456789876543210+ instance SuppressUnusedWarnings BanSym0 where+ suppressUnusedWarnings = snd (((,) BanSym0KindInference) ())+ data BanSym0 :: (~>) Bool Bool+ where+ BanSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply BanSym0 arg) (BanSym1 arg) =>+ BanSym0 a0123456789876543210+ type instance Apply BanSym0 a0123456789876543210 = Ban a0123456789876543210+ type BazSym1 (a0123456789876543210 :: Bool) =+ Baz a0123456789876543210+ instance SuppressUnusedWarnings BazSym0 where+ suppressUnusedWarnings = snd (((,) BazSym0KindInference) ())+ data BazSym0 :: (~>) Bool Bool+ where+ BazSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply BazSym0 arg) (BazSym1 arg) =>+ BazSym0 a0123456789876543210+ type instance Apply BazSym0 a0123456789876543210 = Baz a0123456789876543210+ type BarSym1 (a0123456789876543210 :: Bool) =+ Bar a0123456789876543210+ instance SuppressUnusedWarnings BarSym0 where+ suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())+ data BarSym0 :: (~>) Bool Bool+ where+ BarSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>+ BarSym0 a0123456789876543210+ type instance Apply BarSym0 a0123456789876543210 = Bar a0123456789876543210+ type FooSym1 (a0123456789876543210 :: Bool) =+ Foo a0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: (~>) Bool Bool+ where+ FooSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 a0123456789876543210+ type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210+ type family Ban (a :: Bool) :: Bool where+ Ban x = Apply (Apply ($!@#@$) (Apply (Apply (.@#@$) NotSym0) (Apply (Apply (.@#@$) NotSym0) NotSym0))) x+ type family Baz (a :: Bool) :: Bool where+ Baz x = Apply (Apply ($!@#@$) NotSym0) x+ type family Bar (a :: Bool) :: Bool where+ Bar x = Apply (Apply ($@#@$) (Apply (Apply (.@#@$) NotSym0) (Apply (Apply (.@#@$) NotSym0) NotSym0))) x+ type family Foo (a :: Bool) :: Bool where+ Foo x = Apply (Apply ($@#@$) NotSym0) x+ sBan ::+ forall (t :: Bool). Sing t -> Sing (Apply BanSym0 t :: Bool)+ sBaz ::+ forall (t :: Bool). Sing t -> Sing (Apply BazSym0 t :: Bool)+ sBar ::+ forall (t :: Bool). Sing t -> Sing (Apply BarSym0 t :: Bool)+ sFoo ::+ forall (t :: Bool). Sing t -> Sing (Apply FooSym0 t :: Bool)+ sBan (sX :: Sing x)+ = (applySing+ ((applySing ((singFun2 @($!@#@$)) (%$!)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @NotSym0) sNot)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @NotSym0) sNot)))+ ((singFun1 @NotSym0) sNot)))))+ sX+ sBaz (sX :: Sing x)+ = (applySing+ ((applySing ((singFun2 @($!@#@$)) (%$!)))+ ((singFun1 @NotSym0) sNot)))+ sX+ sBar (sX :: Sing x)+ = (applySing+ ((applySing ((singFun2 @($@#@$)) (%$)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @NotSym0) sNot)))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((singFun1 @NotSym0) sNot)))+ ((singFun1 @NotSym0) sNot)))))+ sX+ sFoo (sX :: Sing x)+ = (applySing+ ((applySing ((singFun2 @($@#@$)) (%$)))+ ((singFun1 @NotSym0) sNot)))+ sX+ instance SingI (BanSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @BanSym0) sBan+ instance SingI (BazSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @BazSym0) sBaz+ instance SingI (BarSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @BarSym0) sBar+ instance SingI (FooSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @FooSym0) sFoo
− tests/compile-and-dump/Singletons/T297.ghc86.template
@@ -1,59 +0,0 @@-Singletons/T297.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| f MyProxy- = let- x = let- z :: MyProxy a- z = MyProxy- in z- in x- - data MyProxy (a :: Type) = MyProxy |]- ======>- data MyProxy (a :: Type) = MyProxy- f MyProxy- = let- x = let- z :: MyProxy a- z = MyProxy- in z- in x- type MyProxySym0 = MyProxy- type Let0123456789876543210ZSym0 = Let0123456789876543210Z- type family Let0123456789876543210Z :: MyProxy a where- Let0123456789876543210Z = MyProxySym0- type Let0123456789876543210XSym0 = Let0123456789876543210X- type family Let0123456789876543210X where- Let0123456789876543210X = Let0123456789876543210ZSym0- type FSym1 a0123456789876543210 = F a0123456789876543210- instance SuppressUnusedWarnings FSym0 where- suppressUnusedWarnings = snd (((,) FSym0KindInference) ())- data FSym0 a0123456789876543210- where- FSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>- FSym0 a0123456789876543210- type instance Apply FSym0 a0123456789876543210 = F a0123456789876543210- type family F a where- F MyProxy = Let0123456789876543210XSym0- sF :: forall arg. Sing arg -> Sing (Apply FSym0 arg)- sF SMyProxy- = let- sX :: Sing Let0123456789876543210XSym0- sX- = let- sZ :: forall a. Sing (Let0123456789876543210ZSym0 :: MyProxy a)- sZ = SMyProxy- in sZ- in sX- instance SingI FSym0 where- sing = (singFun1 @FSym0) sF- data instance Sing :: MyProxy a -> Type- where SMyProxy :: Sing MyProxy- type SMyProxy = (Sing :: MyProxy a -> Type)- instance SingKind a => SingKind (MyProxy a) where- type Demote (MyProxy a) = MyProxy (Demote a)- fromSing SMyProxy = MyProxy- toSing MyProxy = SomeSing SMyProxy- instance SingI MyProxy where- sing = SMyProxy
+ tests/compile-and-dump/Singletons/T297.ghc88.template view
@@ -0,0 +1,59 @@+Singletons/T297.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| f MyProxy+ = let+ x = let+ z :: MyProxy a+ z = MyProxy+ in z+ in x+ + data MyProxy (a :: Type) = MyProxy |]+ ======>+ data MyProxy (a :: Type) = MyProxy+ f MyProxy+ = let+ x = let+ z :: MyProxy a+ z = MyProxy+ in z+ in x+ type MyProxySym0 = MyProxy+ type Let0123456789876543210ZSym0 = Let0123456789876543210Z+ type family Let0123456789876543210Z :: MyProxy a where+ Let0123456789876543210Z = MyProxySym0+ type Let0123456789876543210XSym0 = Let0123456789876543210X+ type family Let0123456789876543210X where+ Let0123456789876543210X = Let0123456789876543210ZSym0+ type FSym1 a0123456789876543210 = F a0123456789876543210+ instance SuppressUnusedWarnings FSym0 where+ suppressUnusedWarnings = snd (((,) FSym0KindInference) ())+ data FSym0 a0123456789876543210+ where+ FSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>+ FSym0 a0123456789876543210+ type instance Apply FSym0 a0123456789876543210 = F a0123456789876543210+ type family F a where+ F MyProxy = Let0123456789876543210XSym0+ sF :: forall arg. Sing arg -> Sing (Apply FSym0 arg)+ sF SMyProxy+ = let+ sX :: Sing Let0123456789876543210XSym0+ sX+ = let+ sZ :: forall a. Sing (Let0123456789876543210ZSym0 :: MyProxy a)+ sZ = SMyProxy+ in sZ+ in sX+ instance SingI FSym0 where+ sing = (singFun1 @FSym0) sF+ data SMyProxy :: forall a. MyProxy a -> Type+ where SMyProxy :: SMyProxy MyProxy+ type instance Sing @(MyProxy a) = SMyProxy+ instance SingKind a => SingKind (MyProxy a) where+ type Demote (MyProxy a) = MyProxy (Demote a)+ fromSing SMyProxy = MyProxy+ toSing MyProxy = SomeSing SMyProxy+ instance SingI MyProxy where+ sing = SMyProxy
− tests/compile-and-dump/Singletons/T312.ghc86.template
@@ -1,215 +0,0 @@-Singletons/T312.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| class Foo a where- bar :: a -> b -> b- bar _ x = x- baz :: forall b. a -> b -> b- baz- = h- where- h :: forall c. c -> b -> b- h _ x = x |]- ======>- class Foo a where- bar :: a -> b -> b- baz :: forall b. a -> b -> b- bar _ x = x- baz- = h- where- h :: forall c. c -> b -> b- h _ x = x- type BarSym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: b0123456789876543210) =- Bar arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (BarSym1 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) BarSym1KindInference) ())- data BarSym1 (arg0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 b0123456789876543210- where- BarSym1KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (BarSym1 arg0123456789876543210) arg) (BarSym2 arg0123456789876543210 arg) =>- BarSym1 arg0123456789876543210 arg0123456789876543210- type instance Apply (BarSym1 arg0123456789876543210) arg0123456789876543210 = Bar arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings BarSym0 where- suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())- data BarSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)- where- BarSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>- BarSym0 arg0123456789876543210- type instance Apply BarSym0 arg0123456789876543210 = BarSym1 arg0123456789876543210- type BazSym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: b0123456789876543210) =- Baz arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings (BazSym1 arg0123456789876543210) where- suppressUnusedWarnings = snd (((,) BazSym1KindInference) ())- data BazSym1 (arg0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 b0123456789876543210- where- BazSym1KindInference :: forall arg0123456789876543210- arg0123456789876543210- arg. SameKind (Apply (BazSym1 arg0123456789876543210) arg) (BazSym2 arg0123456789876543210 arg) =>- BazSym1 arg0123456789876543210 arg0123456789876543210- type instance Apply (BazSym1 arg0123456789876543210) arg0123456789876543210 = Baz arg0123456789876543210 arg0123456789876543210- instance SuppressUnusedWarnings BazSym0 where- suppressUnusedWarnings = snd (((,) BazSym0KindInference) ())- data BazSym0 :: forall a0123456789876543210 b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)- where- BazSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply BazSym0 arg) (BazSym1 arg) =>- BazSym0 arg0123456789876543210- type instance Apply BazSym0 arg0123456789876543210 = BazSym1 arg0123456789876543210- type family Bar_0123456789876543210 (a :: a) (a :: b) :: b where- Bar_0123456789876543210 _ x = x- type Bar_0123456789876543210Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Bar_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Bar_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Bar_0123456789876543210Sym1KindInference) ())- data Bar_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 b0123456789876543210- where- Bar_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Bar_0123456789876543210Sym1 a0123456789876543210) arg) (Bar_0123456789876543210Sym2 a0123456789876543210 arg) =>- Bar_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Bar_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Bar_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Bar_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Bar_0123456789876543210Sym0KindInference) ())- data Bar_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)- where- Bar_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Bar_0123456789876543210Sym0 arg) (Bar_0123456789876543210Sym1 arg) =>- Bar_0123456789876543210Sym0 a0123456789876543210- type instance Apply Bar_0123456789876543210Sym0 a0123456789876543210 = Bar_0123456789876543210Sym1 a0123456789876543210- type Let0123456789876543210HSym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 (a0123456789876543210 :: c0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Let0123456789876543210H a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210HSym3 a0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210HSym3KindInference) ())- data Let0123456789876543210HSym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 (a0123456789876543210 :: c0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 b0123456789876543210- where- Let0123456789876543210HSym3KindInference :: forall a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Let0123456789876543210HSym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210) arg) (Let0123456789876543210HSym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210 arg) =>- Let0123456789876543210HSym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (Let0123456789876543210HSym3 a0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) a0123456789876543210 = Let0123456789876543210H a0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210HSym2KindInference) ())- data Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 :: forall b0123456789876543210- c0123456789876543210.- (~>) c0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)- where- Let0123456789876543210HSym2KindInference :: forall a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- a0123456789876543210- arg. SameKind (Apply (Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Let0123456789876543210HSym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>- Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210- type instance Apply (Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) a0123456789876543210 = Let0123456789876543210HSym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Let0123456789876543210HSym1 a_01234567898765432100123456789876543210) where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210HSym1KindInference) ())- data Let0123456789876543210HSym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- where- Let0123456789876543210HSym1KindInference :: forall a_01234567898765432100123456789876543210- a_01234567898765432100123456789876543210- arg. SameKind (Apply (Let0123456789876543210HSym1 a_01234567898765432100123456789876543210) arg) (Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 arg) =>- Let0123456789876543210HSym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- type instance Apply (Let0123456789876543210HSym1 a_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210HSym0 where- suppressUnusedWarnings- = snd (((,) Let0123456789876543210HSym0KindInference) ())- data Let0123456789876543210HSym0 a_01234567898765432100123456789876543210- where- Let0123456789876543210HSym0KindInference :: forall a_01234567898765432100123456789876543210- arg. SameKind (Apply Let0123456789876543210HSym0 arg) (Let0123456789876543210HSym1 arg) =>- Let0123456789876543210HSym0 a_01234567898765432100123456789876543210- type instance Apply Let0123456789876543210HSym0 a_01234567898765432100123456789876543210 = Let0123456789876543210HSym1 a_01234567898765432100123456789876543210- type family Let0123456789876543210H a_0123456789876543210 a_0123456789876543210 (a :: c) (a :: b) :: b where- Let0123456789876543210H a_0123456789876543210 a_0123456789876543210 _ x = x- type family Baz_0123456789876543210 (a :: a) (a :: b) :: b where- Baz_0123456789876543210 a_0123456789876543210 a_0123456789876543210 = Apply (Apply (Let0123456789876543210HSym2 a_0123456789876543210 a_0123456789876543210) a_0123456789876543210) a_0123456789876543210- type Baz_0123456789876543210Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =- Baz_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (Baz_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) Baz_0123456789876543210Sym1KindInference) ())- data Baz_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.- (~>) b0123456789876543210 b0123456789876543210- where- Baz_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (Baz_0123456789876543210Sym1 a0123456789876543210) arg) (Baz_0123456789876543210Sym2 a0123456789876543210 arg) =>- Baz_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (Baz_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Baz_0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Baz_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Baz_0123456789876543210Sym0KindInference) ())- data Baz_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)- where- Baz_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Baz_0123456789876543210Sym0 arg) (Baz_0123456789876543210Sym1 arg) =>- Baz_0123456789876543210Sym0 a0123456789876543210- type instance Apply Baz_0123456789876543210Sym0 a0123456789876543210 = Baz_0123456789876543210Sym1 a0123456789876543210- class PFoo (a :: GHC.Types.Type) where- type Bar (arg :: a) (arg :: b) :: b- type Baz (arg :: a) (arg :: b) :: b- type Bar a a = Apply (Apply Bar_0123456789876543210Sym0 a) a- type Baz a a = Apply (Apply Baz_0123456789876543210Sym0 a) a- class SFoo a where- sBar ::- forall b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply BarSym0 t) t :: b)- sBaz ::- forall b (t :: a) (t :: b).- Sing t -> Sing t -> Sing (Apply (Apply BazSym0 t) t :: b)- default sBar ::- forall b (t :: a) (t :: b).- (Apply (Apply BarSym0 t) t :: b)- ~ Apply (Apply Bar_0123456789876543210Sym0 t) t =>- Sing t -> Sing t -> Sing (Apply (Apply BarSym0 t) t :: b)- default sBaz ::- forall b (t :: a) (t :: b).- (Apply (Apply BazSym0 t) t :: b)- ~ Apply (Apply Baz_0123456789876543210Sym0 t) t =>- Sing t -> Sing t -> Sing (Apply (Apply BazSym0 t) t :: b)- sBar _ (sX :: Sing x) = sX- sBaz- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- (let- sH ::- forall c (t :: c) (t :: b).- Sing t- -> Sing t- -> Sing (Apply (Apply (Let0123456789876543210HSym2 a_0123456789876543210 a_0123456789876543210) t) t :: b)- sH _ (sX :: Sing x) = sX- in- (singFun2- @(Let0123456789876543210HSym2 a_0123456789876543210 a_0123456789876543210))- sH))- sA_0123456789876543210))- sA_0123456789876543210- instance SFoo a => SingI (BarSym0 :: (~>) a ((~>) b b)) where- sing = (singFun2 @BarSym0) sBar- instance (SFoo a, SingI d) =>- SingI (BarSym1 (d :: a) :: (~>) b b) where- sing = (singFun1 @(BarSym1 (d :: a))) (sBar (sing @d))- instance SFoo a => SingI (BazSym0 :: (~>) a ((~>) b b)) where- sing = (singFun2 @BazSym0) sBaz- instance (SFoo a, SingI d) =>- SingI (BazSym1 (d :: a) :: (~>) b b) where- sing = (singFun1 @(BazSym1 (d :: a))) (sBaz (sing @d))
+ tests/compile-and-dump/Singletons/T312.ghc88.template view
@@ -0,0 +1,215 @@+Singletons/T312.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| class Foo a where+ bar :: a -> b -> b+ bar _ x = x+ baz :: forall b. a -> b -> b+ baz+ = h+ where+ h :: forall c. c -> b -> b+ h _ x = x |]+ ======>+ class Foo a where+ bar :: a -> b -> b+ baz :: forall b. a -> b -> b+ bar _ x = x+ baz+ = h+ where+ h :: forall c. c -> b -> b+ h _ x = x+ type BarSym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: b0123456789876543210) =+ Bar arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (BarSym1 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BarSym1KindInference) ())+ data BarSym1 (arg0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 b0123456789876543210+ where+ BarSym1KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (BarSym1 arg0123456789876543210) arg) (BarSym2 arg0123456789876543210 arg) =>+ BarSym1 arg0123456789876543210 arg0123456789876543210+ type instance Apply (BarSym1 arg0123456789876543210) arg0123456789876543210 = Bar arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings BarSym0 where+ suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())+ data BarSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)+ where+ BarSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>+ BarSym0 arg0123456789876543210+ type instance Apply BarSym0 arg0123456789876543210 = BarSym1 arg0123456789876543210+ type BazSym2 (arg0123456789876543210 :: a0123456789876543210) (arg0123456789876543210 :: b0123456789876543210) =+ Baz arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings (BazSym1 arg0123456789876543210) where+ suppressUnusedWarnings = snd (((,) BazSym1KindInference) ())+ data BazSym1 (arg0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 b0123456789876543210+ where+ BazSym1KindInference :: forall arg0123456789876543210+ arg0123456789876543210+ arg. SameKind (Apply (BazSym1 arg0123456789876543210) arg) (BazSym2 arg0123456789876543210 arg) =>+ BazSym1 arg0123456789876543210 arg0123456789876543210+ type instance Apply (BazSym1 arg0123456789876543210) arg0123456789876543210 = Baz arg0123456789876543210 arg0123456789876543210+ instance SuppressUnusedWarnings BazSym0 where+ suppressUnusedWarnings = snd (((,) BazSym0KindInference) ())+ data BazSym0 :: forall a0123456789876543210 b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)+ where+ BazSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply BazSym0 arg) (BazSym1 arg) =>+ BazSym0 arg0123456789876543210+ type instance Apply BazSym0 arg0123456789876543210 = BazSym1 arg0123456789876543210+ type family Bar_0123456789876543210 (a :: a) (a :: b) :: b where+ Bar_0123456789876543210 _ x = x+ type Bar_0123456789876543210Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Bar_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Bar_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Bar_0123456789876543210Sym1KindInference) ())+ data Bar_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 b0123456789876543210+ where+ Bar_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Bar_0123456789876543210Sym1 a0123456789876543210) arg) (Bar_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Bar_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Bar_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Bar_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Bar_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Bar_0123456789876543210Sym0KindInference) ())+ data Bar_0123456789876543210Sym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)+ where+ Bar_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Bar_0123456789876543210Sym0 arg) (Bar_0123456789876543210Sym1 arg) =>+ Bar_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Bar_0123456789876543210Sym0 a0123456789876543210 = Bar_0123456789876543210Sym1 a0123456789876543210+ type Let0123456789876543210HSym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 (a0123456789876543210 :: c0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Let0123456789876543210H a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210HSym3 a0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210HSym3KindInference) ())+ data Let0123456789876543210HSym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 (a0123456789876543210 :: c0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 b0123456789876543210+ where+ Let0123456789876543210HSym3KindInference :: forall a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210HSym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210) arg) (Let0123456789876543210HSym4 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210 arg) =>+ Let0123456789876543210HSym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (Let0123456789876543210HSym3 a0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) a0123456789876543210 = Let0123456789876543210H a0123456789876543210 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210HSym2KindInference) ())+ data Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 :: forall c0123456789876543210+ b0123456789876543210.+ (~>) c0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)+ where+ Let0123456789876543210HSym2KindInference :: forall a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) arg) (Let0123456789876543210HSym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 arg) =>+ Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210+ type instance Apply (Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210) a0123456789876543210 = Let0123456789876543210HSym3 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Let0123456789876543210HSym1 a_01234567898765432100123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210HSym1KindInference) ())+ data Let0123456789876543210HSym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ where+ Let0123456789876543210HSym1KindInference :: forall a_01234567898765432100123456789876543210+ a_01234567898765432100123456789876543210+ arg. SameKind (Apply (Let0123456789876543210HSym1 a_01234567898765432100123456789876543210) arg) (Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 arg) =>+ Let0123456789876543210HSym1 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ type instance Apply (Let0123456789876543210HSym1 a_01234567898765432100123456789876543210) a_01234567898765432100123456789876543210 = Let0123456789876543210HSym2 a_01234567898765432100123456789876543210 a_01234567898765432100123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210HSym0 where+ suppressUnusedWarnings+ = snd (((,) Let0123456789876543210HSym0KindInference) ())+ data Let0123456789876543210HSym0 a_01234567898765432100123456789876543210+ where+ Let0123456789876543210HSym0KindInference :: forall a_01234567898765432100123456789876543210+ arg. SameKind (Apply Let0123456789876543210HSym0 arg) (Let0123456789876543210HSym1 arg) =>+ Let0123456789876543210HSym0 a_01234567898765432100123456789876543210+ type instance Apply Let0123456789876543210HSym0 a_01234567898765432100123456789876543210 = Let0123456789876543210HSym1 a_01234567898765432100123456789876543210+ type family Let0123456789876543210H a_0123456789876543210 a_0123456789876543210 (a :: c) (a :: b) :: b where+ Let0123456789876543210H a_0123456789876543210 a_0123456789876543210 _ x = x+ type family Baz_0123456789876543210 (a :: a) (a :: b) :: b where+ Baz_0123456789876543210 a_0123456789876543210 a_0123456789876543210 = Apply (Apply (Let0123456789876543210HSym2 a_0123456789876543210 a_0123456789876543210) a_0123456789876543210) a_0123456789876543210+ type Baz_0123456789876543210Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Baz_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (Baz_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) Baz_0123456789876543210Sym1KindInference) ())+ data Baz_0123456789876543210Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 b0123456789876543210+ where+ Baz_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Baz_0123456789876543210Sym1 a0123456789876543210) arg) (Baz_0123456789876543210Sym2 a0123456789876543210 arg) =>+ Baz_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Baz_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = Baz_0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Baz_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Baz_0123456789876543210Sym0KindInference) ())+ data Baz_0123456789876543210Sym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 b0123456789876543210)+ where+ Baz_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Baz_0123456789876543210Sym0 arg) (Baz_0123456789876543210Sym1 arg) =>+ Baz_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Baz_0123456789876543210Sym0 a0123456789876543210 = Baz_0123456789876543210Sym1 a0123456789876543210+ class PFoo (a :: GHC.Types.Type) where+ type Bar (arg :: a) (arg :: b) :: b+ type Baz (arg :: a) (arg :: b) :: b+ type Bar a a = Apply (Apply Bar_0123456789876543210Sym0 a) a+ type Baz a a = Apply (Apply Baz_0123456789876543210Sym0 a) a+ class SFoo a where+ sBar ::+ forall b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply BarSym0 t) t :: b)+ sBaz ::+ forall b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply BazSym0 t) t :: b)+ default sBar ::+ forall b (t :: a) (t :: b).+ ((Apply (Apply BarSym0 t) t :: b)+ ~ Apply (Apply Bar_0123456789876543210Sym0 t) t) =>+ Sing t -> Sing t -> Sing (Apply (Apply BarSym0 t) t :: b)+ default sBaz ::+ forall b (t :: a) (t :: b).+ ((Apply (Apply BazSym0 t) t :: b)+ ~ Apply (Apply Baz_0123456789876543210Sym0 t) t) =>+ Sing t -> Sing t -> Sing (Apply (Apply BazSym0 t) t :: b)+ sBar _ (sX :: Sing x) = sX+ sBaz+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ (let+ sH ::+ forall c (t :: c) (t :: b).+ Sing t+ -> Sing t+ -> Sing (Apply (Apply (Let0123456789876543210HSym2 a_0123456789876543210 a_0123456789876543210) t) t :: b)+ sH _ (sX :: Sing x) = sX+ in+ (singFun2+ @(Let0123456789876543210HSym2 a_0123456789876543210 a_0123456789876543210))+ sH))+ sA_0123456789876543210))+ sA_0123456789876543210+ instance SFoo a => SingI (BarSym0 :: (~>) a ((~>) b b)) where+ sing = (singFun2 @BarSym0) sBar+ instance (SFoo a, SingI d) =>+ SingI (BarSym1 (d :: a) :: (~>) b b) where+ sing = (singFun1 @(BarSym1 (d :: a))) (sBar (sing @d))+ instance SFoo a => SingI (BazSym0 :: (~>) a ((~>) b b)) where+ sing = (singFun2 @BazSym0) sBaz+ instance (SFoo a, SingI d) =>+ SingI (BazSym1 (d :: a) :: (~>) b b) where+ sing = (singFun1 @(BazSym1 (d :: a))) (sBaz (sing @d))
− tests/compile-and-dump/Singletons/T313.ghc86.template
@@ -1,130 +0,0 @@-Singletons/T313.hs:(0,0)-(0,0): Splicing declarations- promote- [d| type PFoo1 a = Maybe a- type family PFoo2 a- type family PFoo3 a where- PFoo3 a = Maybe a- class PC (a :: Type) where- type PFoo4 a- type PFoo4 a = Maybe a- - type instance PFoo2 a = Maybe a- instance PC a where- type PFoo4 a = Maybe a |]- ======>- type PFoo1 a = Maybe a- type family PFoo2 a- type instance PFoo2 a = Maybe a- type family PFoo3 a where- PFoo3 a = Maybe a- class PC (a :: Type) where- type PFoo4 a- type PFoo4 a = Maybe a- instance PC a where- type PFoo4 a = Maybe a- type PFoo1Sym1 a0123456789876543210 = PFoo1 a0123456789876543210- instance SuppressUnusedWarnings PFoo1Sym0 where- suppressUnusedWarnings = snd (((,) PFoo1Sym0KindInference) ())- data PFoo1Sym0 a0123456789876543210- where- PFoo1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply PFoo1Sym0 arg) (PFoo1Sym1 arg) =>- PFoo1Sym0 a0123456789876543210- type instance Apply PFoo1Sym0 a0123456789876543210 = PFoo1 a0123456789876543210- type PFoo3Sym1 a0123456789876543210 = PFoo3 a0123456789876543210- instance SuppressUnusedWarnings PFoo3Sym0 where- suppressUnusedWarnings = snd (((,) PFoo3Sym0KindInference) ())- data PFoo3Sym0 a0123456789876543210- where- PFoo3Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply PFoo3Sym0 arg) (PFoo3Sym1 arg) =>- PFoo3Sym0 a0123456789876543210- type instance Apply PFoo3Sym0 a0123456789876543210 = PFoo3 a0123456789876543210- type PFoo2Sym1 (a0123456789876543210 :: Type) =- PFoo2 a0123456789876543210- instance SuppressUnusedWarnings PFoo2Sym0 where- suppressUnusedWarnings = snd (((,) PFoo2Sym0KindInference) ())- data PFoo2Sym0 :: (~>) Type Type- where- PFoo2Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply PFoo2Sym0 arg) (PFoo2Sym1 arg) =>- PFoo2Sym0 a0123456789876543210- type instance Apply PFoo2Sym0 a0123456789876543210 = PFoo2 a0123456789876543210- type PFoo4Sym1 (a0123456789876543210 :: Type) =- PFoo4 a0123456789876543210- instance SuppressUnusedWarnings PFoo4Sym0 where- suppressUnusedWarnings = snd (((,) PFoo4Sym0KindInference) ())- data PFoo4Sym0 :: (~>) Type Type- where- PFoo4Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply PFoo4Sym0 arg) (PFoo4Sym1 arg) =>- PFoo4Sym0 a0123456789876543210- type instance Apply PFoo4Sym0 a0123456789876543210 = PFoo4 a0123456789876543210- class PPC (a :: Type)- instance PPC a-Singletons/T313.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| type SFoo1 a = Maybe a- type family SFoo2 a- type family SFoo3 a where- SFoo3 a = Maybe a- class SC (a :: Type) where- type SFoo4 a- type SFoo4 a = Maybe a- - type instance SFoo2 a = Maybe a- instance SC a where- type SFoo4 a = Maybe a |]- ======>- type SFoo1 a = Maybe a- type family SFoo2 a- type instance SFoo2 a = Maybe a- type family SFoo3 a where- SFoo3 a = Maybe a- class SC (a :: Type) where- type SFoo4 a- type SFoo4 a = Maybe a- instance SC a where- type SFoo4 a = Maybe a- type SFoo1Sym1 a0123456789876543210 = SFoo1 a0123456789876543210- instance SuppressUnusedWarnings SFoo1Sym0 where- suppressUnusedWarnings = snd (((,) SFoo1Sym0KindInference) ())- data SFoo1Sym0 a0123456789876543210- where- SFoo1Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply SFoo1Sym0 arg) (SFoo1Sym1 arg) =>- SFoo1Sym0 a0123456789876543210- type instance Apply SFoo1Sym0 a0123456789876543210 = SFoo1 a0123456789876543210- type SFoo3Sym1 a0123456789876543210 = SFoo3 a0123456789876543210- instance SuppressUnusedWarnings SFoo3Sym0 where- suppressUnusedWarnings = snd (((,) SFoo3Sym0KindInference) ())- data SFoo3Sym0 a0123456789876543210- where- SFoo3Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply SFoo3Sym0 arg) (SFoo3Sym1 arg) =>- SFoo3Sym0 a0123456789876543210- type instance Apply SFoo3Sym0 a0123456789876543210 = SFoo3 a0123456789876543210- type SFoo2Sym1 (a0123456789876543210 :: Type) =- SFoo2 a0123456789876543210- instance SuppressUnusedWarnings SFoo2Sym0 where- suppressUnusedWarnings = snd (((,) SFoo2Sym0KindInference) ())- data SFoo2Sym0 :: (~>) Type Type- where- SFoo2Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply SFoo2Sym0 arg) (SFoo2Sym1 arg) =>- SFoo2Sym0 a0123456789876543210- type instance Apply SFoo2Sym0 a0123456789876543210 = SFoo2 a0123456789876543210- type SFoo4Sym1 (a0123456789876543210 :: Type) =- SFoo4 a0123456789876543210- instance SuppressUnusedWarnings SFoo4Sym0 where- suppressUnusedWarnings = snd (((,) SFoo4Sym0KindInference) ())- data SFoo4Sym0 :: (~>) Type Type- where- SFoo4Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply SFoo4Sym0 arg) (SFoo4Sym1 arg) =>- SFoo4Sym0 a0123456789876543210- type instance Apply SFoo4Sym0 a0123456789876543210 = SFoo4 a0123456789876543210- class PSC (a :: Type)- instance PSC a- class SSC (a :: Type)- instance SSC a
+ tests/compile-and-dump/Singletons/T313.ghc88.template view
@@ -0,0 +1,130 @@+Singletons/T313.hs:(0,0)-(0,0): Splicing declarations+ promote+ [d| type PFoo1 a = Maybe a+ type family PFoo2 a+ type family PFoo3 a where+ PFoo3 a = Maybe a+ class PC (a :: Type) where+ type PFoo4 a+ type PFoo4 a = Maybe a+ + type instance PFoo2 a = Maybe a+ instance PC a where+ type PFoo4 a = Maybe a |]+ ======>+ type PFoo1 a = Maybe a+ type family PFoo2 a+ type instance PFoo2 a = Maybe a+ type family PFoo3 a where+ PFoo3 a = Maybe a+ class PC (a :: Type) where+ type PFoo4 a+ type PFoo4 a = Maybe a+ instance PC a where+ type PFoo4 a = Maybe a+ type PFoo1Sym1 a0123456789876543210 = PFoo1 a0123456789876543210+ instance SuppressUnusedWarnings PFoo1Sym0 where+ suppressUnusedWarnings = snd (((,) PFoo1Sym0KindInference) ())+ data PFoo1Sym0 a0123456789876543210+ where+ PFoo1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply PFoo1Sym0 arg) (PFoo1Sym1 arg) =>+ PFoo1Sym0 a0123456789876543210+ type instance Apply PFoo1Sym0 a0123456789876543210 = PFoo1 a0123456789876543210+ type PFoo3Sym1 a0123456789876543210 = PFoo3 a0123456789876543210+ instance SuppressUnusedWarnings PFoo3Sym0 where+ suppressUnusedWarnings = snd (((,) PFoo3Sym0KindInference) ())+ data PFoo3Sym0 a0123456789876543210+ where+ PFoo3Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply PFoo3Sym0 arg) (PFoo3Sym1 arg) =>+ PFoo3Sym0 a0123456789876543210+ type instance Apply PFoo3Sym0 a0123456789876543210 = PFoo3 a0123456789876543210+ type PFoo2Sym1 (a0123456789876543210 :: Type) =+ PFoo2 a0123456789876543210+ instance SuppressUnusedWarnings PFoo2Sym0 where+ suppressUnusedWarnings = snd (((,) PFoo2Sym0KindInference) ())+ data PFoo2Sym0 :: (~>) Type Type+ where+ PFoo2Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply PFoo2Sym0 arg) (PFoo2Sym1 arg) =>+ PFoo2Sym0 a0123456789876543210+ type instance Apply PFoo2Sym0 a0123456789876543210 = PFoo2 a0123456789876543210+ type PFoo4Sym1 (a0123456789876543210 :: Type) =+ PFoo4 a0123456789876543210+ instance SuppressUnusedWarnings PFoo4Sym0 where+ suppressUnusedWarnings = snd (((,) PFoo4Sym0KindInference) ())+ data PFoo4Sym0 :: (~>) Type Type+ where+ PFoo4Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply PFoo4Sym0 arg) (PFoo4Sym1 arg) =>+ PFoo4Sym0 a0123456789876543210+ type instance Apply PFoo4Sym0 a0123456789876543210 = PFoo4 a0123456789876543210+ class PPC (a :: Type)+ instance PPC a+Singletons/T313.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| type SFoo1 a = Maybe a+ type family SFoo2 a+ type family SFoo3 a where+ SFoo3 a = Maybe a+ class SC (a :: Type) where+ type SFoo4 a+ type SFoo4 a = Maybe a+ + type instance SFoo2 a = Maybe a+ instance SC a where+ type SFoo4 a = Maybe a |]+ ======>+ type SFoo1 a = Maybe a+ type family SFoo2 a+ type instance SFoo2 a = Maybe a+ type family SFoo3 a where+ SFoo3 a = Maybe a+ class SC (a :: Type) where+ type SFoo4 a+ type SFoo4 a = Maybe a+ instance SC a where+ type SFoo4 a = Maybe a+ type SFoo1Sym1 a0123456789876543210 = SFoo1 a0123456789876543210+ instance SuppressUnusedWarnings SFoo1Sym0 where+ suppressUnusedWarnings = snd (((,) SFoo1Sym0KindInference) ())+ data SFoo1Sym0 a0123456789876543210+ where+ SFoo1Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply SFoo1Sym0 arg) (SFoo1Sym1 arg) =>+ SFoo1Sym0 a0123456789876543210+ type instance Apply SFoo1Sym0 a0123456789876543210 = SFoo1 a0123456789876543210+ type SFoo3Sym1 a0123456789876543210 = SFoo3 a0123456789876543210+ instance SuppressUnusedWarnings SFoo3Sym0 where+ suppressUnusedWarnings = snd (((,) SFoo3Sym0KindInference) ())+ data SFoo3Sym0 a0123456789876543210+ where+ SFoo3Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply SFoo3Sym0 arg) (SFoo3Sym1 arg) =>+ SFoo3Sym0 a0123456789876543210+ type instance Apply SFoo3Sym0 a0123456789876543210 = SFoo3 a0123456789876543210+ type SFoo2Sym1 (a0123456789876543210 :: Type) =+ SFoo2 a0123456789876543210+ instance SuppressUnusedWarnings SFoo2Sym0 where+ suppressUnusedWarnings = snd (((,) SFoo2Sym0KindInference) ())+ data SFoo2Sym0 :: (~>) Type Type+ where+ SFoo2Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply SFoo2Sym0 arg) (SFoo2Sym1 arg) =>+ SFoo2Sym0 a0123456789876543210+ type instance Apply SFoo2Sym0 a0123456789876543210 = SFoo2 a0123456789876543210+ type SFoo4Sym1 (a0123456789876543210 :: Type) =+ SFoo4 a0123456789876543210+ instance SuppressUnusedWarnings SFoo4Sym0 where+ suppressUnusedWarnings = snd (((,) SFoo4Sym0KindInference) ())+ data SFoo4Sym0 :: (~>) Type Type+ where+ SFoo4Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply SFoo4Sym0 arg) (SFoo4Sym1 arg) =>+ SFoo4Sym0 a0123456789876543210+ type instance Apply SFoo4Sym0 a0123456789876543210 = SFoo4 a0123456789876543210+ class PSC (a :: Type)+ instance PSC a+ class SSC (a :: Type)+ instance SSC a
− tests/compile-and-dump/Singletons/T316.ghc86.template
@@ -1,40 +0,0 @@-Singletons/T316.hs:(0,0)-(0,0): Splicing declarations- promoteOnly- [d| replaceAllGTypes :: (a -> Type -> a) -> [Type] -> [a] -> [a]- replaceAllGTypes f types as = zipWith f as types |]- ======>- type ReplaceAllGTypesSym3 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) Type a0123456789876543210)) (a0123456789876543210 :: [Type]) (a0123456789876543210 :: [a0123456789876543210]) =- ReplaceAllGTypes a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ReplaceAllGTypesSym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ReplaceAllGTypesSym2KindInference) ())- data ReplaceAllGTypesSym2 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) Type a0123456789876543210)) (a0123456789876543210 :: [Type]) :: (~>) [a0123456789876543210] [a0123456789876543210]- where- ReplaceAllGTypesSym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ReplaceAllGTypesSym2 a0123456789876543210 a0123456789876543210) arg) (ReplaceAllGTypesSym3 a0123456789876543210 a0123456789876543210 arg) =>- ReplaceAllGTypesSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ReplaceAllGTypesSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ReplaceAllGTypes a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ReplaceAllGTypesSym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ReplaceAllGTypesSym1KindInference) ())- data ReplaceAllGTypesSym1 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) Type a0123456789876543210)) :: (~>) [Type] ((~>) [a0123456789876543210] [a0123456789876543210])- where- ReplaceAllGTypesSym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ReplaceAllGTypesSym1 a0123456789876543210) arg) (ReplaceAllGTypesSym2 a0123456789876543210 arg) =>- ReplaceAllGTypesSym1 a0123456789876543210 a0123456789876543210- type instance Apply (ReplaceAllGTypesSym1 a0123456789876543210) a0123456789876543210 = ReplaceAllGTypesSym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ReplaceAllGTypesSym0 where- suppressUnusedWarnings- = snd (((,) ReplaceAllGTypesSym0KindInference) ())- data ReplaceAllGTypesSym0 :: forall a0123456789876543210.- (~>) ((~>) a0123456789876543210 ((~>) Type a0123456789876543210)) ((~>) [Type] ((~>) [a0123456789876543210] [a0123456789876543210]))- where- ReplaceAllGTypesSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ReplaceAllGTypesSym0 arg) (ReplaceAllGTypesSym1 arg) =>- ReplaceAllGTypesSym0 a0123456789876543210- type instance Apply ReplaceAllGTypesSym0 a0123456789876543210 = ReplaceAllGTypesSym1 a0123456789876543210- type family ReplaceAllGTypes (a :: (~>) a ((~>) Type a)) (a :: [Type]) (a :: [a]) :: [a] where- ReplaceAllGTypes f types as = Apply (Apply (Apply ZipWithSym0 f) as) types
+ tests/compile-and-dump/Singletons/T316.ghc88.template view
@@ -0,0 +1,40 @@+Singletons/T316.hs:(0,0)-(0,0): Splicing declarations+ promoteOnly+ [d| replaceAllGTypes :: (a -> Type -> a) -> [Type] -> [a] -> [a]+ replaceAllGTypes f types as = zipWith f as types |]+ ======>+ type ReplaceAllGTypesSym3 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) Type a0123456789876543210)) (a0123456789876543210 :: [Type]) (a0123456789876543210 :: [a0123456789876543210]) =+ ReplaceAllGTypes a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ReplaceAllGTypesSym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ReplaceAllGTypesSym2KindInference) ())+ data ReplaceAllGTypesSym2 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) Type a0123456789876543210)) (a0123456789876543210 :: [Type]) :: (~>) [a0123456789876543210] [a0123456789876543210]+ where+ ReplaceAllGTypesSym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ReplaceAllGTypesSym2 a0123456789876543210 a0123456789876543210) arg) (ReplaceAllGTypesSym3 a0123456789876543210 a0123456789876543210 arg) =>+ ReplaceAllGTypesSym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ReplaceAllGTypesSym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ReplaceAllGTypes a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ReplaceAllGTypesSym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ReplaceAllGTypesSym1KindInference) ())+ data ReplaceAllGTypesSym1 (a0123456789876543210 :: (~>) a0123456789876543210 ((~>) Type a0123456789876543210)) :: (~>) [Type] ((~>) [a0123456789876543210] [a0123456789876543210])+ where+ ReplaceAllGTypesSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ReplaceAllGTypesSym1 a0123456789876543210) arg) (ReplaceAllGTypesSym2 a0123456789876543210 arg) =>+ ReplaceAllGTypesSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ReplaceAllGTypesSym1 a0123456789876543210) a0123456789876543210 = ReplaceAllGTypesSym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ReplaceAllGTypesSym0 where+ suppressUnusedWarnings+ = snd (((,) ReplaceAllGTypesSym0KindInference) ())+ data ReplaceAllGTypesSym0 :: forall a0123456789876543210.+ (~>) ((~>) a0123456789876543210 ((~>) Type a0123456789876543210)) ((~>) [Type] ((~>) [a0123456789876543210] [a0123456789876543210]))+ where+ ReplaceAllGTypesSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ReplaceAllGTypesSym0 arg) (ReplaceAllGTypesSym1 arg) =>+ ReplaceAllGTypesSym0 a0123456789876543210+ type instance Apply ReplaceAllGTypesSym0 a0123456789876543210 = ReplaceAllGTypesSym1 a0123456789876543210+ type family ReplaceAllGTypes (a :: (~>) a ((~>) Type a)) (a :: [Type]) (a :: [a]) :: [a] where+ ReplaceAllGTypes f types as = Apply (Apply (Apply ZipWithSym0 f) as) types
− tests/compile-and-dump/Singletons/T322.ghc86.template
@@ -1,49 +0,0 @@-Singletons/T322.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| infixr 2 !- - (!) :: Bool -> Bool -> Bool- (!) = (||) |]- ======>- (!) :: Bool -> Bool -> Bool- (!) = (||)- infixr 2 !- type (!@#@$$$) (a0123456789876543210 :: Bool) (a0123456789876543210 :: Bool) =- (:!) a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ((!@#@$$) a0123456789876543210) where- suppressUnusedWarnings = snd (((,) (:!@#@$$###)) ())- data (!@#@$$) (a0123456789876543210 :: Bool) :: (~>) Bool Bool- where- (:!@#@$$###) :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply ((!@#@$$) a0123456789876543210) arg) ((!@#@$$$) a0123456789876543210 arg) =>- (!@#@$$) a0123456789876543210 a0123456789876543210- type instance Apply ((!@#@$$) a0123456789876543210) a0123456789876543210 = (:!) a0123456789876543210 a0123456789876543210- infixr 2 !@#@$$- instance SuppressUnusedWarnings (!@#@$) where- suppressUnusedWarnings = snd (((,) (:!@#@$###)) ())- data (!@#@$) :: (~>) Bool ((~>) Bool Bool)- where- (:!@#@$###) :: forall a0123456789876543210- arg. SameKind (Apply (!@#@$) arg) ((!@#@$$) arg) =>- (!@#@$) a0123456789876543210- type instance Apply (!@#@$) a0123456789876543210 = (!@#@$$) a0123456789876543210- infixr 2 !@#@$- type family (:!) (a :: Bool) (a :: Bool) :: Bool where- (:!) a_0123456789876543210 a_0123456789876543210 = Apply (Apply (||@#@$) a_0123456789876543210) a_0123456789876543210- infixr 2 :!- infixr 2 %!- (%!) ::- forall (t :: Bool) (t :: Bool).- Sing t -> Sing t -> Sing (Apply (Apply (!@#@$) t) t :: Bool)- (%!)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @(||@#@$)) (%||))) sA_0123456789876543210))- sA_0123456789876543210- instance SingI ((!@#@$) :: (~>) Bool ((~>) Bool Bool)) where- sing = (singFun2 @(!@#@$)) (%!)- instance SingI d =>- SingI ((!@#@$$) (d :: Bool) :: (~>) Bool Bool) where- sing = (singFun1 @((!@#@$$) (d :: Bool))) ((%!) (sing @d))
+ tests/compile-and-dump/Singletons/T322.ghc88.template view
@@ -0,0 +1,48 @@+Singletons/T322.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| infixr 2 !+ + (!) :: Bool -> Bool -> Bool+ (!) = (||) |]+ ======>+ (!) :: Bool -> Bool -> Bool+ (!) = (||)+ infixr 2 !+ type (!@#@$$$) (a0123456789876543210 :: Bool) (a0123456789876543210 :: Bool) =+ (!) a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ((!@#@$$) a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) (:!@#@$$###)) ())+ data (!@#@$$) (a0123456789876543210 :: Bool) :: (~>) Bool Bool+ where+ (:!@#@$$###) :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply ((!@#@$$) a0123456789876543210) arg) ((!@#@$$$) a0123456789876543210 arg) =>+ (!@#@$$) a0123456789876543210 a0123456789876543210+ type instance Apply ((!@#@$$) a0123456789876543210) a0123456789876543210 = (!) a0123456789876543210 a0123456789876543210+ infixr 2 !@#@$$+ instance SuppressUnusedWarnings (!@#@$) where+ suppressUnusedWarnings = snd (((,) (:!@#@$###)) ())+ data (!@#@$) :: (~>) Bool ((~>) Bool Bool)+ where+ (:!@#@$###) :: forall a0123456789876543210+ arg. SameKind (Apply (!@#@$) arg) ((!@#@$$) arg) =>+ (!@#@$) a0123456789876543210+ type instance Apply (!@#@$) a0123456789876543210 = (!@#@$$) a0123456789876543210+ infixr 2 !@#@$+ type family (!) (a :: Bool) (a :: Bool) :: Bool where+ (!) a_0123456789876543210 a_0123456789876543210 = Apply (Apply (||@#@$) a_0123456789876543210) a_0123456789876543210+ infixr 2 %!+ (%!) ::+ forall (t :: Bool) (t :: Bool).+ Sing t -> Sing t -> Sing (Apply (Apply (!@#@$) t) t :: Bool)+ (%!)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @(||@#@$)) (%||))) sA_0123456789876543210))+ sA_0123456789876543210+ instance SingI ((!@#@$) :: (~>) Bool ((~>) Bool Bool)) where+ sing = (singFun2 @(!@#@$)) (%!)+ instance SingI d =>+ SingI ((!@#@$$) (d :: Bool) :: (~>) Bool Bool) where+ sing = (singFun1 @((!@#@$$) (d :: Bool))) ((%!) (sing @d))
tests/compile-and-dump/Singletons/T322.hs view
@@ -9,5 +9,5 @@ infixr 2 ! |]) -f1 :: (False && True :! True) :~: True+f1 :: (False && True ! True) :~: True f1 = Refl
− tests/compile-and-dump/Singletons/T323.ghc86.template
+ tests/compile-and-dump/Singletons/T323.ghc88.template view
− tests/compile-and-dump/Singletons/T33.ghc86.template
@@ -1,36 +0,0 @@-Singletons/T33.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo :: (Bool, Bool) -> ()- foo ~(_, _) = () |]- ======>- foo :: (Bool, Bool) -> ()- foo ~(_, _) = ()- type FooSym1 (a0123456789876543210 :: (Bool, Bool)) =- Foo a0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: (~>) (Bool, Bool) ()- where- FooSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 a0123456789876543210- type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210- type family Foo (a :: (Bool, Bool)) :: () where- Foo '(_, _) = Tuple0Sym0- sFoo ::- forall (t :: (Bool, Bool)). Sing t -> Sing (Apply FooSym0 t :: ())- sFoo (STuple2 _ _) = STuple0- instance SingI (FooSym0 :: (~>) (Bool, Bool) ()) where- sing = (singFun1 @FooSym0) sFoo--Singletons/T33.hs:0:0: warning:- Lazy pattern converted into regular pattern in promotion- |-6 | $(singletons [d|- | ^^^^^^^^^^^^^^...--Singletons/T33.hs:0:0: warning:- Lazy pattern converted into regular pattern during singleton generation.- |-6 | $(singletons [d|- | ^^^^^^^^^^^^^^...
+ tests/compile-and-dump/Singletons/T33.ghc88.template view
@@ -0,0 +1,36 @@+Singletons/T33.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo :: (Bool, Bool) -> ()+ foo ~(_, _) = () |]+ ======>+ foo :: (Bool, Bool) -> ()+ foo ~(_, _) = ()+ type FooSym1 (a0123456789876543210 :: (Bool, Bool)) =+ Foo a0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: (~>) (Bool, Bool) ()+ where+ FooSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 a0123456789876543210+ type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210+ type family Foo (a :: (Bool, Bool)) :: () where+ Foo '(_, _) = Tuple0Sym0+ sFoo ::+ forall (t :: (Bool, Bool)). Sing t -> Sing (Apply FooSym0 t :: ())+ sFoo (STuple2 _ _) = STuple0+ instance SingI (FooSym0 :: (~>) (Bool, Bool) ()) where+ sing = (singFun1 @FooSym0) sFoo++Singletons/T33.hs:0:0: warning:+ Lazy pattern converted into regular pattern in promotion+ |+6 | $(singletons [d|+ | ^^^^^^^^^^^^^^...++Singletons/T33.hs:0:0: warning:+ Lazy pattern converted into regular pattern during singleton generation.+ |+6 | $(singletons [d|+ | ^^^^^^^^^^^^^^...
− tests/compile-and-dump/Singletons/T332.ghc86.template
@@ -1,57 +0,0 @@-Singletons/T332.hs:(0,0)-(0,0): Splicing declarations- promote- [d| f :: Foo -> ()- f MkFoo {} = ()- - data Foo = MkFoo |]- ======>- data Foo = MkFoo- f :: Foo -> ()- f MkFoo {} = ()- type FSym1 (a0123456789876543210 :: Foo) = F a0123456789876543210- instance SuppressUnusedWarnings FSym0 where- suppressUnusedWarnings = snd (((,) FSym0KindInference) ())- data FSym0 :: (~>) Foo ()- where- FSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>- FSym0 a0123456789876543210- type instance Apply FSym0 a0123456789876543210 = F a0123456789876543210- type family F (a :: Foo) :: () where- F MkFoo = Tuple0Sym0- type MkFooSym0 = MkFoo-Singletons/T332.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| b :: Bar -> ()- b MkBar {} = ()- - data Bar = MkBar |]- ======>- data Bar = MkBar- b :: Bar -> ()- b MkBar {} = ()- type MkBarSym0 = MkBar- type BSym1 (a0123456789876543210 :: Bar) = B a0123456789876543210- instance SuppressUnusedWarnings BSym0 where- suppressUnusedWarnings = snd (((,) BSym0KindInference) ())- data BSym0 :: (~>) Bar ()- where- BSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply BSym0 arg) (BSym1 arg) =>- BSym0 a0123456789876543210- type instance Apply BSym0 a0123456789876543210 = B a0123456789876543210- type family B (a :: Bar) :: () where- B MkBar = Tuple0Sym0- sB :: forall (t :: Bar). Sing t -> Sing (Apply BSym0 t :: ())- sB SMkBar = STuple0- instance SingI (BSym0 :: (~>) Bar ()) where- sing = (singFun1 @BSym0) sB- data instance Sing :: Bar -> GHC.Types.Type- where SMkBar :: Sing MkBar- type SBar = (Sing :: Bar -> GHC.Types.Type)- instance SingKind Bar where- type Demote Bar = Bar- fromSing SMkBar = MkBar- toSing MkBar = SomeSing SMkBar- instance SingI MkBar where- sing = SMkBar
+ tests/compile-and-dump/Singletons/T332.ghc88.template view
@@ -0,0 +1,56 @@+Singletons/T332.hs:(0,0)-(0,0): Splicing declarations+ promote+ [d| f :: Foo -> ()+ f MkFoo {} = ()+ + data Foo = MkFoo |]+ ======>+ data Foo = MkFoo+ f :: Foo -> ()+ f MkFoo {} = ()+ type FSym1 (a0123456789876543210 :: Foo) = F a0123456789876543210+ instance SuppressUnusedWarnings FSym0 where+ suppressUnusedWarnings = snd (((,) FSym0KindInference) ())+ data FSym0 :: (~>) Foo ()+ where+ FSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>+ FSym0 a0123456789876543210+ type instance Apply FSym0 a0123456789876543210 = F a0123456789876543210+ type family F (a :: Foo) :: () where+ F MkFoo = Tuple0Sym0+ type MkFooSym0 = MkFoo+Singletons/T332.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| b :: Bar -> ()+ b MkBar {} = ()+ + data Bar = MkBar |]+ ======>+ data Bar = MkBar+ b :: Bar -> ()+ b MkBar {} = ()+ type MkBarSym0 = MkBar+ type BSym1 (a0123456789876543210 :: Bar) = B a0123456789876543210+ instance SuppressUnusedWarnings BSym0 where+ suppressUnusedWarnings = snd (((,) BSym0KindInference) ())+ data BSym0 :: (~>) Bar ()+ where+ BSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply BSym0 arg) (BSym1 arg) =>+ BSym0 a0123456789876543210+ type instance Apply BSym0 a0123456789876543210 = B a0123456789876543210+ type family B (a :: Bar) :: () where+ B MkBar = Tuple0Sym0+ sB :: forall (t :: Bar). Sing t -> Sing (Apply BSym0 t :: ())+ sB SMkBar = STuple0+ instance SingI (BSym0 :: (~>) Bar ()) where+ sing = (singFun1 @BSym0) sB+ data SBar :: Bar -> GHC.Types.Type where SMkBar :: SBar MkBar+ type instance Sing @Bar = SBar+ instance SingKind Bar where+ type Demote Bar = Bar+ fromSing SMkBar = MkBar+ toSing MkBar = SomeSing SMkBar+ instance SingI MkBar where+ sing = SMkBar
− tests/compile-and-dump/Singletons/T342.ghc86.template
@@ -1,17 +0,0 @@-Singletons/T342.hs:(0,0)-(0,0): Splicing declarations- do synName <- newName "MyId"- a <- newName "a"- let syn = TySynD synName [PlainTV a] (VarT a)- defuns <- withLocalDeclarations [syn] $ genDefunSymbols [synName]- pure $ syn : defuns- ======>- type MyId a = a- type MyIdSym1 a0123456789876543210 = MyId a0123456789876543210- instance SuppressUnusedWarnings MyIdSym0 where- suppressUnusedWarnings = snd (((,) MyIdSym0KindInference) ())- data MyIdSym0 a0123456789876543210- where- MyIdSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply MyIdSym0 arg) (MyIdSym1 arg) =>- MyIdSym0 a0123456789876543210- type instance Apply MyIdSym0 a0123456789876543210 = MyId a0123456789876543210
+ tests/compile-and-dump/Singletons/T342.ghc88.template view
@@ -0,0 +1,17 @@+Singletons/T342.hs:(0,0)-(0,0): Splicing declarations+ do synName <- newName "MyId"+ a <- newName "a"+ let syn = TySynD synName [PlainTV a] (VarT a)+ defuns <- withLocalDeclarations [syn] $ genDefunSymbols [synName]+ pure $ syn : defuns+ ======>+ type MyId a = a+ type MyIdSym1 a0123456789876543210 = MyId a0123456789876543210+ instance SuppressUnusedWarnings MyIdSym0 where+ suppressUnusedWarnings = snd (((,) MyIdSym0KindInference) ())+ data MyIdSym0 a0123456789876543210+ where+ MyIdSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply MyIdSym0 arg) (MyIdSym1 arg) =>+ MyIdSym0 a0123456789876543210+ type instance Apply MyIdSym0 a0123456789876543210 = MyId a0123456789876543210
− tests/compile-and-dump/Singletons/T353.ghc86.template
@@ -1,104 +0,0 @@-Singletons/T353.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| type family Symmetry (a :: Proxy t) (y :: Proxy t) (e :: (a :: Proxy (t :: k))- :~:- (y :: Proxy (t :: k))) :: Type where- Symmetry a y _ = y :~: a |]- ======>- type family Symmetry (a :: Proxy t) (y :: Proxy t) (e :: (:~:) (a :: Proxy (t :: k)) (y :: Proxy (t :: k))) :: Type where- Symmetry a y _ = (:~:) y a- type SymmetrySym3 (a0123456789876543210 :: Proxy t0123456789876543210) (y0123456789876543210 :: Proxy t0123456789876543210) (e0123456789876543210 :: (:~:) (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) (y0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210))) =- Symmetry a0123456789876543210 y0123456789876543210 e0123456789876543210- instance SuppressUnusedWarnings (SymmetrySym2 y0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) SymmetrySym2KindInference) ())- data SymmetrySym2 (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) (y0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) :: (~>) ((:~:) (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) (y0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210))) Type- where- SymmetrySym2KindInference :: forall a0123456789876543210- y0123456789876543210- e0123456789876543210- arg. SameKind (Apply (SymmetrySym2 a0123456789876543210 y0123456789876543210) arg) (SymmetrySym3 a0123456789876543210 y0123456789876543210 arg) =>- SymmetrySym2 a0123456789876543210 y0123456789876543210 e0123456789876543210- type instance Apply (SymmetrySym2 y0123456789876543210 a0123456789876543210) e0123456789876543210 = Symmetry y0123456789876543210 a0123456789876543210 e0123456789876543210- instance SuppressUnusedWarnings (SymmetrySym1 a0123456789876543210) where- suppressUnusedWarnings = snd (((,) SymmetrySym1KindInference) ())- data SymmetrySym1 (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) :: forall (y0123456789876543210 :: Proxy t0123456789876543210).- (~>) (Proxy t0123456789876543210) ((~>) ((:~:) (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) (y0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210))) Type)- where- SymmetrySym1KindInference :: forall a0123456789876543210- y0123456789876543210- arg. SameKind (Apply (SymmetrySym1 a0123456789876543210) arg) (SymmetrySym2 a0123456789876543210 arg) =>- SymmetrySym1 a0123456789876543210 y0123456789876543210- type instance Apply (SymmetrySym1 a0123456789876543210) y0123456789876543210 = SymmetrySym2 a0123456789876543210 y0123456789876543210- instance SuppressUnusedWarnings SymmetrySym0 where- suppressUnusedWarnings = snd (((,) SymmetrySym0KindInference) ())- data SymmetrySym0 :: forall k0123456789876543210- (t0123456789876543210 :: k0123456789876543210)- (a0123456789876543210 :: Proxy t0123456789876543210)- (y0123456789876543210 :: Proxy t0123456789876543210).- (~>) (Proxy t0123456789876543210) ((~>) (Proxy t0123456789876543210) ((~>) ((:~:) (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) (y0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210))) Type))- where- SymmetrySym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply SymmetrySym0 arg) (SymmetrySym1 arg) =>- SymmetrySym0 a0123456789876543210- type instance Apply SymmetrySym0 a0123456789876543210 = SymmetrySym1 a0123456789876543210-Singletons/T353.hs:0:0:: Splicing declarations- genDefunSymbols [''Prod]- ======>- type MkProdSym2 (t0123456789876543210 :: f0123456789876543210 p0123456789876543210) (t0123456789876543210 :: g0123456789876543210 p0123456789876543210) =- 'MkProd t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (MkProdSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) MkProdSym1KindInference) ())- data MkProdSym1 (t0123456789876543210 :: (f0123456789876543210 :: k0123456789876543210- -> Type) (p0123456789876543210 :: k0123456789876543210)) :: forall (g0123456789876543210 :: k0123456789876543210- -> Type).- (~>) (g0123456789876543210 p0123456789876543210) (Prod (f0123456789876543210 :: k0123456789876543210- -> Type) (g0123456789876543210 :: k0123456789876543210- -> Type) (p0123456789876543210 :: k0123456789876543210))- where- MkProdSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (MkProdSym1 t0123456789876543210) arg) (MkProdSym2 t0123456789876543210 arg) =>- MkProdSym1 t0123456789876543210 t0123456789876543210- type instance Apply (MkProdSym1 t0123456789876543210) t0123456789876543210 = 'MkProd t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings MkProdSym0 where- suppressUnusedWarnings = snd (((,) MkProdSym0KindInference) ())- data MkProdSym0 :: forall k0123456789876543210- (f0123456789876543210 :: k0123456789876543210 -> Type)- (g0123456789876543210 :: k0123456789876543210 -> Type)- (p0123456789876543210 :: k0123456789876543210).- (~>) (f0123456789876543210 p0123456789876543210) ((~>) (g0123456789876543210 p0123456789876543210) (Prod (f0123456789876543210 :: k0123456789876543210- -> Type) (g0123456789876543210 :: k0123456789876543210- -> Type) (p0123456789876543210 :: k0123456789876543210)))- where- MkProdSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkProdSym0 arg) (MkProdSym1 arg) =>- MkProdSym0 t0123456789876543210- type instance Apply MkProdSym0 t0123456789876543210 = MkProdSym1 t0123456789876543210-Singletons/T353.hs:0:0:: Splicing declarations- genDefunSymbols [''Foo]- ======>- type MkFooSym2 (t0123456789876543210 :: Proxy a0123456789876543210) (t0123456789876543210 :: Proxy b0123456789876543210) =- 'MkFoo t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (MkFooSym1 t0123456789876543210) where- suppressUnusedWarnings = snd (((,) MkFooSym1KindInference) ())- data MkFooSym1 (t0123456789876543210 :: Proxy (a0123456789876543210 :: k0123456789876543210)) :: forall k0123456789876543210- (b0123456789876543210 :: k0123456789876543210).- (~>) (Proxy b0123456789876543210) (Foo (a0123456789876543210 :: k0123456789876543210) (b0123456789876543210 :: k0123456789876543210))- where- MkFooSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (MkFooSym1 t0123456789876543210) arg) (MkFooSym2 t0123456789876543210 arg) =>- MkFooSym1 t0123456789876543210 t0123456789876543210- type instance Apply (MkFooSym1 t0123456789876543210) t0123456789876543210 = 'MkFoo t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings MkFooSym0 where- suppressUnusedWarnings = snd (((,) MkFooSym0KindInference) ())- data MkFooSym0 :: forall k0123456789876543210- (a0123456789876543210 :: k0123456789876543210)- k0123456789876543210- (b0123456789876543210 :: k0123456789876543210).- (~>) (Proxy a0123456789876543210) ((~>) (Proxy b0123456789876543210) (Foo (a0123456789876543210 :: k0123456789876543210) (b0123456789876543210 :: k0123456789876543210)))- where- MkFooSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply MkFooSym0 arg) (MkFooSym1 arg) =>- MkFooSym0 t0123456789876543210- type instance Apply MkFooSym0 t0123456789876543210 = MkFooSym1 t0123456789876543210
+ tests/compile-and-dump/Singletons/T353.ghc88.template view
@@ -0,0 +1,104 @@+Singletons/T353.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| type family Symmetry (a :: Proxy t) (y :: Proxy t) (e :: (a :: Proxy (t :: k))+ :~:+ (y :: Proxy (t :: k))) :: Type where+ Symmetry a y _ = y :~: a |]+ ======>+ type family Symmetry (a :: Proxy t) (y :: Proxy t) (e :: (:~:) (a :: Proxy (t :: k)) (y :: Proxy (t :: k))) :: Type where+ Symmetry a y _ = (:~:) y a+ type SymmetrySym3 (a0123456789876543210 :: Proxy t0123456789876543210) (y0123456789876543210 :: Proxy t0123456789876543210) (e0123456789876543210 :: (:~:) (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) (y0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210))) =+ Symmetry a0123456789876543210 y0123456789876543210 e0123456789876543210+ instance SuppressUnusedWarnings (SymmetrySym2 y0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) SymmetrySym2KindInference) ())+ data SymmetrySym2 (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) (y0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) :: (~>) ((:~:) (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) (y0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210))) Type+ where+ SymmetrySym2KindInference :: forall a0123456789876543210+ y0123456789876543210+ e0123456789876543210+ arg. SameKind (Apply (SymmetrySym2 a0123456789876543210 y0123456789876543210) arg) (SymmetrySym3 a0123456789876543210 y0123456789876543210 arg) =>+ SymmetrySym2 a0123456789876543210 y0123456789876543210 e0123456789876543210+ type instance Apply (SymmetrySym2 y0123456789876543210 a0123456789876543210) e0123456789876543210 = Symmetry y0123456789876543210 a0123456789876543210 e0123456789876543210+ instance SuppressUnusedWarnings (SymmetrySym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) SymmetrySym1KindInference) ())+ data SymmetrySym1 (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) :: forall (y0123456789876543210 :: Proxy t0123456789876543210).+ (~>) (Proxy t0123456789876543210) ((~>) ((:~:) (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) (y0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210))) Type)+ where+ SymmetrySym1KindInference :: forall a0123456789876543210+ y0123456789876543210+ arg. SameKind (Apply (SymmetrySym1 a0123456789876543210) arg) (SymmetrySym2 a0123456789876543210 arg) =>+ SymmetrySym1 a0123456789876543210 y0123456789876543210+ type instance Apply (SymmetrySym1 a0123456789876543210) y0123456789876543210 = SymmetrySym2 a0123456789876543210 y0123456789876543210+ instance SuppressUnusedWarnings SymmetrySym0 where+ suppressUnusedWarnings = snd (((,) SymmetrySym0KindInference) ())+ data SymmetrySym0 :: forall k0123456789876543210+ (t0123456789876543210 :: k0123456789876543210)+ (a0123456789876543210 :: Proxy t0123456789876543210)+ (y0123456789876543210 :: Proxy t0123456789876543210).+ (~>) (Proxy t0123456789876543210) ((~>) (Proxy t0123456789876543210) ((~>) ((:~:) (a0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210)) (y0123456789876543210 :: Proxy (t0123456789876543210 :: k0123456789876543210))) Type))+ where+ SymmetrySym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply SymmetrySym0 arg) (SymmetrySym1 arg) =>+ SymmetrySym0 a0123456789876543210+ type instance Apply SymmetrySym0 a0123456789876543210 = SymmetrySym1 a0123456789876543210+Singletons/T353.hs:0:0:: Splicing declarations+ genDefunSymbols [''Prod]+ ======>+ type MkProdSym2 (t0123456789876543210 :: f0123456789876543210 p0123456789876543210) (t0123456789876543210 :: g0123456789876543210 p0123456789876543210) =+ 'MkProd t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (MkProdSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MkProdSym1KindInference) ())+ data MkProdSym1 (t0123456789876543210 :: (f0123456789876543210 :: k0123456789876543210+ -> Type) (p0123456789876543210 :: k0123456789876543210)) :: forall (g0123456789876543210 :: k0123456789876543210+ -> Type).+ (~>) (g0123456789876543210 p0123456789876543210) (Prod (f0123456789876543210 :: k0123456789876543210+ -> Type) (g0123456789876543210 :: k0123456789876543210+ -> Type) (p0123456789876543210 :: k0123456789876543210))+ where+ MkProdSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (MkProdSym1 t0123456789876543210) arg) (MkProdSym2 t0123456789876543210 arg) =>+ MkProdSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (MkProdSym1 t0123456789876543210) t0123456789876543210 = 'MkProd t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings MkProdSym0 where+ suppressUnusedWarnings = snd (((,) MkProdSym0KindInference) ())+ data MkProdSym0 :: forall k0123456789876543210+ (f0123456789876543210 :: k0123456789876543210 -> Type)+ (p0123456789876543210 :: k0123456789876543210)+ (g0123456789876543210 :: k0123456789876543210 -> Type).+ (~>) (f0123456789876543210 p0123456789876543210) ((~>) (g0123456789876543210 p0123456789876543210) (Prod (f0123456789876543210 :: k0123456789876543210+ -> Type) (g0123456789876543210 :: k0123456789876543210+ -> Type) (p0123456789876543210 :: k0123456789876543210)))+ where+ MkProdSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkProdSym0 arg) (MkProdSym1 arg) =>+ MkProdSym0 t0123456789876543210+ type instance Apply MkProdSym0 t0123456789876543210 = MkProdSym1 t0123456789876543210+Singletons/T353.hs:0:0:: Splicing declarations+ genDefunSymbols [''Foo]+ ======>+ type MkFooSym2 (t0123456789876543210 :: Proxy a0123456789876543210) (t0123456789876543210 :: Proxy b0123456789876543210) =+ 'MkFoo t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (MkFooSym1 t0123456789876543210) where+ suppressUnusedWarnings = snd (((,) MkFooSym1KindInference) ())+ data MkFooSym1 (t0123456789876543210 :: Proxy (a0123456789876543210 :: k0123456789876543210)) :: forall k0123456789876543210+ (b0123456789876543210 :: k0123456789876543210).+ (~>) (Proxy b0123456789876543210) (Foo (a0123456789876543210 :: k0123456789876543210) (b0123456789876543210 :: k0123456789876543210))+ where+ MkFooSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (MkFooSym1 t0123456789876543210) arg) (MkFooSym2 t0123456789876543210 arg) =>+ MkFooSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (MkFooSym1 t0123456789876543210) t0123456789876543210 = 'MkFoo t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings MkFooSym0 where+ suppressUnusedWarnings = snd (((,) MkFooSym0KindInference) ())+ data MkFooSym0 :: forall k0123456789876543210+ (a0123456789876543210 :: k0123456789876543210)+ k0123456789876543210+ (b0123456789876543210 :: k0123456789876543210).+ (~>) (Proxy a0123456789876543210) ((~>) (Proxy b0123456789876543210) (Foo (a0123456789876543210 :: k0123456789876543210) (b0123456789876543210 :: k0123456789876543210)))+ where+ MkFooSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply MkFooSym0 arg) (MkFooSym1 arg) =>+ MkFooSym0 t0123456789876543210+ type instance Apply MkFooSym0 t0123456789876543210 = MkFooSym1 t0123456789876543210
− tests/compile-and-dump/Singletons/T358.ghc86.template
@@ -1,118 +0,0 @@-Singletons/T358.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| class C1 (f :: k -> Type) where- method1 :: f a- class C2 a where- method2a, method2b :: forall b. b -> a- - instance C1 [] where- method1 :: [a]- method1 = []- instance C2 [a] where- method2a _ = []- method2b :: forall b. b -> [a]- method2b _ = [] |]- ======>- class C1 (f :: k -> Type) where- method1 :: f a- instance C1 [] where- method1 :: [a]- method1 = []- class C2 a where- method2a :: forall b. b -> a- method2b :: forall b. b -> a- instance C2 [a] where- method2b :: forall b. b -> [a]- method2a _ = []- method2b _ = []- type Method1Sym0 = Method1- class PC1 (f :: k -> Type) where- type Method1 :: f a- type Method2aSym1 (arg0123456789876543210 :: b0123456789876543210) =- Method2a arg0123456789876543210- instance SuppressUnusedWarnings Method2aSym0 where- suppressUnusedWarnings = snd (((,) Method2aSym0KindInference) ())- data Method2aSym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) b0123456789876543210 a0123456789876543210- where- Method2aSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply Method2aSym0 arg) (Method2aSym1 arg) =>- Method2aSym0 arg0123456789876543210- type instance Apply Method2aSym0 arg0123456789876543210 = Method2a arg0123456789876543210- type Method2bSym1 (arg0123456789876543210 :: b0123456789876543210) =- Method2b arg0123456789876543210- instance SuppressUnusedWarnings Method2bSym0 where- suppressUnusedWarnings = snd (((,) Method2bSym0KindInference) ())- data Method2bSym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) b0123456789876543210 a0123456789876543210- where- Method2bSym0KindInference :: forall arg0123456789876543210- arg. SameKind (Apply Method2bSym0 arg) (Method2bSym1 arg) =>- Method2bSym0 arg0123456789876543210- type instance Apply Method2bSym0 arg0123456789876543210 = Method2b arg0123456789876543210- class PC2 (a :: Type) where- type Method2a (arg :: b) :: a- type Method2b (arg :: b) :: a- type family Method1_0123456789876543210 :: [a] where- Method1_0123456789876543210 = '[]- type Method1_0123456789876543210Sym0 = Method1_0123456789876543210- instance PC1 [] where- type Method1 = Method1_0123456789876543210Sym0- type family Method2a_0123456789876543210 (a :: b) :: [a] where- Method2a_0123456789876543210 _ = '[]- type Method2a_0123456789876543210Sym1 (a0123456789876543210 :: b0123456789876543210) =- Method2a_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Method2a_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Method2a_0123456789876543210Sym0KindInference) ())- data Method2a_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) b0123456789876543210 [a0123456789876543210]- where- Method2a_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Method2a_0123456789876543210Sym0 arg) (Method2a_0123456789876543210Sym1 arg) =>- Method2a_0123456789876543210Sym0 a0123456789876543210- type instance Apply Method2a_0123456789876543210Sym0 a0123456789876543210 = Method2a_0123456789876543210 a0123456789876543210- type family Method2b_0123456789876543210 (a :: b) :: [a] where- Method2b_0123456789876543210 _ = '[]- type Method2b_0123456789876543210Sym1 (a0123456789876543210 :: b0123456789876543210) =- Method2b_0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings Method2b_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) Method2b_0123456789876543210Sym0KindInference) ())- data Method2b_0123456789876543210Sym0 :: forall a0123456789876543210- b0123456789876543210.- (~>) b0123456789876543210 [a0123456789876543210]- where- Method2b_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply Method2b_0123456789876543210Sym0 arg) (Method2b_0123456789876543210Sym1 arg) =>- Method2b_0123456789876543210Sym0 a0123456789876543210- type instance Apply Method2b_0123456789876543210Sym0 a0123456789876543210 = Method2b_0123456789876543210 a0123456789876543210- instance PC2 [a] where- type Method2a a = Apply Method2a_0123456789876543210Sym0 a- type Method2b a = Apply Method2b_0123456789876543210Sym0 a- class SC1 (f :: k -> Type) where- sMethod1 :: forall a. Sing (Method1Sym0 :: f a)- class SC2 a where- sMethod2a ::- forall b (t :: b). Sing t -> Sing (Apply Method2aSym0 t :: a)- sMethod2b ::- forall b (t :: b). Sing t -> Sing (Apply Method2bSym0 t :: a)- instance SC1 [] where- sMethod1 :: forall a. Sing (Method1Sym0 :: [a])- sMethod1 = Data.Singletons.Prelude.Instances.SNil- instance SC2 [a] where- sMethod2a ::- forall b (t :: b). Sing t -> Sing (Apply Method2aSym0 t :: [a])- sMethod2b ::- forall b (t :: b). Sing t -> Sing (Apply Method2bSym0 t :: [a])- sMethod2a _- = Data.Singletons.Prelude.Instances.SNil- sMethod2b _- = Data.Singletons.Prelude.Instances.SNil- instance SC2 a => SingI (Method2aSym0 :: (~>) b a) where- sing = (singFun1 @Method2aSym0) sMethod2a- instance SC2 a => SingI (Method2bSym0 :: (~>) b a) where- sing = (singFun1 @Method2bSym0) sMethod2b
+ tests/compile-and-dump/Singletons/T358.ghc88.template view
@@ -0,0 +1,116 @@+Singletons/T358.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| class C1 (f :: k -> Type) where+ method1 :: f a+ class C2 a where+ method2a, method2b :: forall b. b -> a+ + instance C1 [] where+ method1 :: [a]+ method1 = []+ instance C2 [a] where+ method2a _ = []+ method2b :: forall b. b -> [a]+ method2b _ = [] |]+ ======>+ class C1 (f :: k -> Type) where+ method1 :: f a+ instance C1 [] where+ method1 :: [a]+ method1 = []+ class C2 a where+ method2a :: forall b. b -> a+ method2b :: forall b. b -> a+ instance C2 [a] where+ method2b :: forall b. b -> [a]+ method2a _ = []+ method2b _ = []+ type Method1Sym0 = Method1+ class PC1 (f :: k -> Type) where+ type Method1 :: f a+ type Method2aSym1 (arg0123456789876543210 :: b0123456789876543210) =+ Method2a arg0123456789876543210+ instance SuppressUnusedWarnings Method2aSym0 where+ suppressUnusedWarnings = snd (((,) Method2aSym0KindInference) ())+ data Method2aSym0 :: forall b0123456789876543210+ a0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ Method2aSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply Method2aSym0 arg) (Method2aSym1 arg) =>+ Method2aSym0 arg0123456789876543210+ type instance Apply Method2aSym0 arg0123456789876543210 = Method2a arg0123456789876543210+ type Method2bSym1 (arg0123456789876543210 :: b0123456789876543210) =+ Method2b arg0123456789876543210+ instance SuppressUnusedWarnings Method2bSym0 where+ suppressUnusedWarnings = snd (((,) Method2bSym0KindInference) ())+ data Method2bSym0 :: forall b0123456789876543210+ a0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ Method2bSym0KindInference :: forall arg0123456789876543210+ arg. SameKind (Apply Method2bSym0 arg) (Method2bSym1 arg) =>+ Method2bSym0 arg0123456789876543210+ type instance Apply Method2bSym0 arg0123456789876543210 = Method2b arg0123456789876543210+ class PC2 (a :: Type) where+ type Method2a (arg :: b) :: a+ type Method2b (arg :: b) :: a+ type family Method1_0123456789876543210 :: [a] where+ Method1_0123456789876543210 = '[]+ type Method1_0123456789876543210Sym0 = Method1_0123456789876543210+ instance PC1 [] where+ type Method1 = Method1_0123456789876543210Sym0+ type family Method2a_0123456789876543210 (a :: b) :: [a] where+ Method2a_0123456789876543210 _ = '[]+ type Method2a_0123456789876543210Sym1 (a0123456789876543210 :: b0123456789876543210) =+ Method2a_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Method2a_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Method2a_0123456789876543210Sym0KindInference) ())+ data Method2a_0123456789876543210Sym0 :: forall b0123456789876543210+ a0123456789876543210.+ (~>) b0123456789876543210 [a0123456789876543210]+ where+ Method2a_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Method2a_0123456789876543210Sym0 arg) (Method2a_0123456789876543210Sym1 arg) =>+ Method2a_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Method2a_0123456789876543210Sym0 a0123456789876543210 = Method2a_0123456789876543210 a0123456789876543210+ type family Method2b_0123456789876543210 (a :: b) :: [a] where+ Method2b_0123456789876543210 _ = '[]+ type Method2b_0123456789876543210Sym1 (a0123456789876543210 :: b0123456789876543210) =+ Method2b_0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings Method2b_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) Method2b_0123456789876543210Sym0KindInference) ())+ data Method2b_0123456789876543210Sym0 :: forall b0123456789876543210+ a0123456789876543210.+ (~>) b0123456789876543210 [a0123456789876543210]+ where+ Method2b_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Method2b_0123456789876543210Sym0 arg) (Method2b_0123456789876543210Sym1 arg) =>+ Method2b_0123456789876543210Sym0 a0123456789876543210+ type instance Apply Method2b_0123456789876543210Sym0 a0123456789876543210 = Method2b_0123456789876543210 a0123456789876543210+ instance PC2 [a] where+ type Method2a a = Apply Method2a_0123456789876543210Sym0 a+ type Method2b a = Apply Method2b_0123456789876543210Sym0 a+ class SC1 (f :: k -> Type) where+ sMethod1 :: forall a. Sing (Method1Sym0 :: f a)+ class SC2 a where+ sMethod2a ::+ forall b (t :: b). Sing t -> Sing (Apply Method2aSym0 t :: a)+ sMethod2b ::+ forall b (t :: b). Sing t -> Sing (Apply Method2bSym0 t :: a)+ instance SC1 [] where+ sMethod1 :: forall a. Sing (Method1Sym0 :: [a])+ sMethod1 = Data.Singletons.Prelude.Instances.SNil+ instance SC2 [a] where+ sMethod2a ::+ forall b (t :: b). Sing t -> Sing (Apply Method2aSym0 t :: [a])+ sMethod2b ::+ forall b (t :: b). Sing t -> Sing (Apply Method2bSym0 t :: [a])+ sMethod2a _ = Data.Singletons.Prelude.Instances.SNil+ sMethod2b _ = Data.Singletons.Prelude.Instances.SNil+ instance SC2 a => SingI (Method2aSym0 :: (~>) b a) where+ sing = (singFun1 @Method2aSym0) sMethod2a+ instance SC2 a => SingI (Method2bSym0 :: (~>) b a) where+ sing = (singFun1 @Method2bSym0) sMethod2b
+ tests/compile-and-dump/Singletons/T367.ghc88.template view
@@ -0,0 +1,39 @@+Singletons/T367.hs:(0,0)-(0,0): Splicing declarations+ singletonsOnly+ [d| const' :: a -> b -> a+ const' x _ = x |]+ ======>+ type Const'Sym2 (a0123456789876543210 :: a0123456789876543210) (a0123456789876543210 :: b0123456789876543210) =+ Const' a0123456789876543210 a0123456789876543210+ instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings (Const'Sym1 a0123456789876543210) where+ Data.Singletons.SuppressUnusedWarnings.suppressUnusedWarnings+ = snd (((,) Const'Sym1KindInference) ())+ data Const'Sym1 (a0123456789876543210 :: a0123456789876543210) :: forall b0123456789876543210.+ (~>) b0123456789876543210 a0123456789876543210+ where+ Const'Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (Const'Sym1 a0123456789876543210) arg) (Const'Sym2 a0123456789876543210 arg) =>+ Const'Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (Const'Sym1 a0123456789876543210) a0123456789876543210 = Const' a0123456789876543210 a0123456789876543210+ instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings Const'Sym0 where+ Data.Singletons.SuppressUnusedWarnings.suppressUnusedWarnings+ = snd (((,) Const'Sym0KindInference) ())+ data Const'Sym0 :: forall a0123456789876543210+ b0123456789876543210.+ (~>) a0123456789876543210 ((~>) b0123456789876543210 a0123456789876543210)+ where+ Const'Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply Const'Sym0 arg) (Const'Sym1 arg) =>+ Const'Sym0 a0123456789876543210+ type instance Apply Const'Sym0 a0123456789876543210 = Const'Sym1 a0123456789876543210+ type family Const' (a :: a) (a :: b) :: a where+ Const' x _ = x+ sConst' ::+ forall a b (t :: a) (t :: b).+ Sing t -> Sing t -> Sing (Apply (Apply Const'Sym0 t) t :: a)+ sConst' (sX :: Sing x) _ = sX+ instance SingI (Const'Sym0 :: (~>) a ((~>) b a)) where+ sing = (singFun2 @Const'Sym0) sConst'+ instance SingI d => SingI (Const'Sym1 (d :: a) :: (~>) b a) where+ sing = (singFun1 @(Const'Sym1 (d :: a))) (sConst' (sing @d))
+ tests/compile-and-dump/Singletons/T367.hs view
@@ -0,0 +1,12 @@+module T367 where++import Data.Singletons.Prelude+import Data.Singletons.TH (singletonsOnly)++$(singletonsOnly [d|+ const' :: a -> b -> a+ const' x _ = x+ |])++test :: Sing True+test = sConst' @Bool @() STrue STuple0
− tests/compile-and-dump/Singletons/T371.ghc86.template
@@ -1,233 +0,0 @@-Singletons/T371.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Y (a :: Type)- = Y1 | Y2 (X a)- deriving Show- data X (a :: Type)- = X1 | X2 (Y a)- deriving Show |]- ======>- data X (a :: Type)- = X1 | X2 (Y a)- deriving Show- data Y (a :: Type)- = Y1 | Y2 (X a)- deriving Show- type X1Sym0 = X1- type X2Sym1 (t0123456789876543210 :: Y a0123456789876543210) =- X2 t0123456789876543210- instance SuppressUnusedWarnings X2Sym0 where- suppressUnusedWarnings = snd (((,) X2Sym0KindInference) ())- data X2Sym0 :: forall (a0123456789876543210 :: Type).- (~>) (Y a0123456789876543210) (X (a0123456789876543210 :: Type))- where- X2Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply X2Sym0 arg) (X2Sym1 arg) =>- X2Sym0 t0123456789876543210- type instance Apply X2Sym0 t0123456789876543210 = X2 t0123456789876543210- type Y1Sym0 = Y1- type Y2Sym1 (t0123456789876543210 :: X a0123456789876543210) =- Y2 t0123456789876543210- instance SuppressUnusedWarnings Y2Sym0 where- suppressUnusedWarnings = snd (((,) Y2Sym0KindInference) ())- data Y2Sym0 :: forall (a0123456789876543210 :: Type).- (~>) (X a0123456789876543210) (Y (a0123456789876543210 :: Type))- where- Y2Sym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply Y2Sym0 arg) (Y2Sym1 arg) =>- Y2Sym0 t0123456789876543210- type instance Apply Y2Sym0 t0123456789876543210 = Y2 t0123456789876543210- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: X a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where- ShowsPrec_0123456789876543210 _ X1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "X1") a_0123456789876543210- ShowsPrec_0123456789876543210 p_0123456789876543210 (X2 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (Data.Singletons.Prelude.Num.FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "X2 ")) (Apply (Apply ShowsPrecSym0 (Data.Singletons.Prelude.Num.FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: X a0123456789876543210) (a0123456789876543210 :: GHC.Types.Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: X a0123456789876543210) :: (~>) GHC.Types.Symbol GHC.Types.Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210.- (~>) (X a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) GHC.Types.Nat ((~>) (X a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow (X a) where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Y a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where- ShowsPrec_0123456789876543210 _ Y1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "Y1") a_0123456789876543210- ShowsPrec_0123456789876543210 p_0123456789876543210 (Y2 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (Data.Singletons.Prelude.Num.FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Y2 ")) (Apply (Apply ShowsPrecSym0 (Data.Singletons.Prelude.Num.FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210- type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Y a0123456789876543210) (a0123456789876543210 :: GHC.Types.Symbol) =- ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())- data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Y a0123456789876543210) :: (~>) GHC.Types.Symbol GHC.Types.Symbol- where- ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210- a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())- data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210.- (~>) (Y a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol)- where- ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210- a0123456789876543210- arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>- ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210- type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210- instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())- data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210.- (~>) GHC.Types.Nat ((~>) (Y a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol))- where- ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>- ShowsPrec_0123456789876543210Sym0 a0123456789876543210- type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210- instance PShow (Y a) where- type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a- data instance Sing :: X a -> Type- where- SX1 :: Sing X1- SX2 :: forall a (n :: Y a). (Sing (n :: Y a)) -> Sing (X2 n)- type SX = (Sing :: X a -> Type)- instance SingKind a => SingKind (X a) where- type Demote (X a) = X (Demote a)- fromSing SX1 = X1- fromSing (SX2 b) = X2 (fromSing b)- toSing X1 = SomeSing SX1- toSing (X2 (b :: Demote (Y a)))- = case toSing b :: SomeSing (Y a) of {- SomeSing c -> SomeSing (SX2 c) }- data instance Sing :: Y a -> Type- where- SY1 :: Sing Y1- SY2 :: forall a (n :: X a). (Sing (n :: X a)) -> Sing (Y2 n)- type SY = (Sing :: Y a -> Type)- instance SingKind a => SingKind (Y a) where- type Demote (Y a) = Y (Demote a)- fromSing SY1 = Y1- fromSing (SY2 b) = Y2 (fromSing b)- toSing Y1 = SomeSing SY1- toSing (Y2 (b :: Demote (X a)))- = case toSing b :: SomeSing (X a) of {- SomeSing c -> SomeSing (SY2 c) }- instance SShow (Y a) => SShow (X a) where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: X a) (t3 :: GHC.Types.Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))- -> Type) t1) t2) t3)- sShowsPrec- _- SX1- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "X1")))- sA_0123456789876543210- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SX2 (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "X2 "))))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))- sA_0123456789876543210- instance SShow (X a) => SShow (Y a) where- sShowsPrec ::- forall (t1 :: GHC.Types.Nat) (t2 :: Y a) (t3 :: GHC.Types.Symbol).- Sing t1- -> Sing t2- -> Sing t3- -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))- -> Type) t1) t2) t3)- sShowsPrec- _- SY1- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Y1")))- sA_0123456789876543210- sShowsPrec- (sP_0123456789876543210 :: Sing p_0123456789876543210)- (SY2 (sArg_0123456789876543210 :: Sing arg_0123456789876543210))- (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((applySing- ((applySing ((singFun3 @ShowParenSym0) sShowParen))- ((applySing- ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 10)))))- ((applySing- ((applySing ((singFun3 @(.@#@$)) (%.)))- ((applySing ((singFun2 @ShowStringSym0) sShowString))- (sing :: Sing "Y2 "))))- ((applySing- ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))- (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 11))))- sArg_0123456789876543210))))- sA_0123456789876543210- deriving instance Data.Singletons.ShowSing.ShowSing (Y a) =>- Show (Sing (z :: X a))- deriving instance Data.Singletons.ShowSing.ShowSing (X a) =>- Show (Sing (z :: Y a))- instance SingI X1 where- sing = SX1- instance SingI n => SingI (X2 (n :: Y a)) where- sing = SX2 sing- instance SingI (X2Sym0 :: (~>) (Y a) (X (a :: Type))) where- sing = (singFun1 @X2Sym0) SX2- instance SingI (TyCon1 X2 :: (~>) (Y a) (X (a :: Type))) where- sing = (singFun1 @(TyCon1 X2)) SX2- instance SingI Y1 where- sing = SY1- instance SingI n => SingI (Y2 (n :: X a)) where- sing = SY2 sing- instance SingI (Y2Sym0 :: (~>) (X a) (Y (a :: Type))) where- sing = (singFun1 @Y2Sym0) SY2- instance SingI (TyCon1 Y2 :: (~>) (X a) (Y (a :: Type))) where- sing = (singFun1 @(TyCon1 Y2)) SY2
+ tests/compile-and-dump/Singletons/T371.ghc88.template view
@@ -0,0 +1,247 @@+Singletons/T371.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Y (a :: Type)+ = Y1 | Y2 (X a)+ deriving Show+ data X (a :: Type)+ = X1 | X2 (Y a)+ deriving Show |]+ ======>+ data X (a :: Type)+ = X1 | X2 (Y a)+ deriving Show+ data Y (a :: Type)+ = Y1 | Y2 (X a)+ deriving Show+ type X1Sym0 = X1+ type X2Sym1 (t0123456789876543210 :: Y a0123456789876543210) =+ X2 t0123456789876543210+ instance SuppressUnusedWarnings X2Sym0 where+ suppressUnusedWarnings = snd (((,) X2Sym0KindInference) ())+ data X2Sym0 :: forall (a0123456789876543210 :: Type).+ (~>) (Y a0123456789876543210) (X (a0123456789876543210 :: Type))+ where+ X2Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply X2Sym0 arg) (X2Sym1 arg) =>+ X2Sym0 t0123456789876543210+ type instance Apply X2Sym0 t0123456789876543210 = X2 t0123456789876543210+ type Y1Sym0 = Y1+ type Y2Sym1 (t0123456789876543210 :: X a0123456789876543210) =+ Y2 t0123456789876543210+ instance SuppressUnusedWarnings Y2Sym0 where+ suppressUnusedWarnings = snd (((,) Y2Sym0KindInference) ())+ data Y2Sym0 :: forall (a0123456789876543210 :: Type).+ (~>) (X a0123456789876543210) (Y (a0123456789876543210 :: Type))+ where+ Y2Sym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply Y2Sym0 arg) (Y2Sym1 arg) =>+ Y2Sym0 t0123456789876543210+ type instance Apply Y2Sym0 t0123456789876543210 = Y2 t0123456789876543210+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: X a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+ ShowsPrec_0123456789876543210 _ X1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "X1") a_0123456789876543210+ ShowsPrec_0123456789876543210 p_0123456789876543210 (X2 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (Data.Singletons.Prelude.Num.FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "X2 ")) (Apply (Apply ShowsPrecSym0 (Data.Singletons.Prelude.Num.FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: X a0123456789876543210) (a0123456789876543210 :: GHC.Types.Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: X a0123456789876543210) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210.+ (~>) (X a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) GHC.Types.Nat ((~>) (X a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow (X a) where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ type family ShowsPrec_0123456789876543210 (a :: GHC.Types.Nat) (a :: Y a) (a :: GHC.Types.Symbol) :: GHC.Types.Symbol where+ ShowsPrec_0123456789876543210 _ Y1 a_0123456789876543210 = Apply (Apply ShowStringSym0 "Y1") a_0123456789876543210+ ShowsPrec_0123456789876543210 p_0123456789876543210 (Y2 arg_0123456789876543210) a_0123456789876543210 = Apply (Apply (Apply ShowParenSym0 (Apply (Apply (>@#@$) p_0123456789876543210) (Data.Singletons.Prelude.Num.FromInteger 10))) (Apply (Apply (.@#@$) (Apply ShowStringSym0 "Y2 ")) (Apply (Apply ShowsPrecSym0 (Data.Singletons.Prelude.Num.FromInteger 11)) arg_0123456789876543210))) a_0123456789876543210+ type ShowsPrec_0123456789876543210Sym3 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Y a0123456789876543210) (a0123456789876543210 :: GHC.Types.Symbol) =+ ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym2KindInference) ())+ data ShowsPrec_0123456789876543210Sym2 (a0123456789876543210 :: GHC.Types.Nat) (a0123456789876543210 :: Y a0123456789876543210) :: (~>) GHC.Types.Symbol GHC.Types.Symbol+ where+ ShowsPrec_0123456789876543210Sym2KindInference :: forall a0123456789876543210+ a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym3 a0123456789876543210 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210 a0123456789876543210 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym1KindInference) ())+ data ShowsPrec_0123456789876543210Sym1 (a0123456789876543210 :: GHC.Types.Nat) :: forall a0123456789876543210.+ (~>) (Y a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol)+ where+ ShowsPrec_0123456789876543210Sym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) arg) (ShowsPrec_0123456789876543210Sym2 a0123456789876543210 arg) =>+ ShowsPrec_0123456789876543210Sym1 a0123456789876543210 a0123456789876543210+ type instance Apply (ShowsPrec_0123456789876543210Sym1 a0123456789876543210) a0123456789876543210 = ShowsPrec_0123456789876543210Sym2 a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings ShowsPrec_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd (((,) ShowsPrec_0123456789876543210Sym0KindInference) ())+ data ShowsPrec_0123456789876543210Sym0 :: forall a0123456789876543210.+ (~>) GHC.Types.Nat ((~>) (Y a0123456789876543210) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ where+ ShowsPrec_0123456789876543210Sym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ShowsPrec_0123456789876543210Sym0 arg) (ShowsPrec_0123456789876543210Sym1 arg) =>+ ShowsPrec_0123456789876543210Sym0 a0123456789876543210+ type instance Apply ShowsPrec_0123456789876543210Sym0 a0123456789876543210 = ShowsPrec_0123456789876543210Sym1 a0123456789876543210+ instance PShow (Y a) where+ type ShowsPrec a a a = Apply (Apply (Apply ShowsPrec_0123456789876543210Sym0 a) a) a+ data SX :: forall a. X a -> Type+ where+ SX1 :: SX X1+ SX2 :: forall a (n :: Y a). (Sing (n :: Y a)) -> SX (X2 n)+ type instance Sing @(X a) = SX+ instance SingKind a => SingKind (X a) where+ type Demote (X a) = X (Demote a)+ fromSing SX1 = X1+ fromSing (SX2 b) = X2 (fromSing b)+ toSing X1 = SomeSing SX1+ toSing (X2 (b :: Demote (Y a)))+ = case toSing b :: SomeSing (Y a) of {+ SomeSing c -> SomeSing (SX2 c) }+ data SY :: forall a. Y a -> Type+ where+ SY1 :: SY Y1+ SY2 :: forall a (n :: X a). (Sing (n :: X a)) -> SY (Y2 n)+ type instance Sing @(Y a) = SY+ instance SingKind a => SingKind (Y a) where+ type Demote (Y a) = Y (Demote a)+ fromSing SY1 = Y1+ fromSing (SY2 b) = Y2 (fromSing b)+ toSing Y1 = SomeSing SY1+ toSing (Y2 (b :: Demote (X a)))+ = case toSing b :: SomeSing (X a) of {+ SomeSing c -> SomeSing (SY2 c) }+ instance SShow (Y a) => SShow (X a) where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: X a) (t3 :: GHC.Types.Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (X a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ -> Type) t1) t2) t3)+ sShowsPrec+ _+ SX1+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "X1")))+ sA_0123456789876543210+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SX2 (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "X2 "))))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))+ sA_0123456789876543210+ instance SShow (X a) => SShow (Y a) where+ sShowsPrec ::+ forall (t1 :: GHC.Types.Nat) (t2 :: Y a) (t3 :: GHC.Types.Symbol).+ Sing t1+ -> Sing t2+ -> Sing t3+ -> Sing (Apply (Apply (Apply (ShowsPrecSym0 :: TyFun GHC.Types.Nat ((~>) (Y a) ((~>) GHC.Types.Symbol GHC.Types.Symbol))+ -> Type) t1) t2) t3)+ sShowsPrec+ _+ SY1+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Y1")))+ sA_0123456789876543210+ sShowsPrec+ (sP_0123456789876543210 :: Sing p_0123456789876543210)+ (SY2 (sArg_0123456789876543210 :: Sing arg_0123456789876543210))+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((applySing+ ((applySing ((singFun3 @ShowParenSym0) sShowParen))+ ((applySing+ ((applySing ((singFun2 @(>@#@$)) (%>))) sP_0123456789876543210))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 10)))))+ ((applySing+ ((applySing ((singFun3 @(.@#@$)) (%.)))+ ((applySing ((singFun2 @ShowStringSym0) sShowString))+ (sing :: Sing "Y2 "))))+ ((applySing+ ((applySing ((singFun3 @ShowsPrecSym0) sShowsPrec))+ (Data.Singletons.Prelude.Num.sFromInteger (sing :: Sing 11))))+ sArg_0123456789876543210))))+ sA_0123456789876543210+ instance Data.Singletons.ShowSing.ShowSing (Y a) =>+ Show (SX (z :: X a)) where+ showsPrec _ SX1 = showString "SX1"+ showsPrec+ p_0123456789876543210+ (SX2 (arg_0123456789876543210 :: Sing argTy_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 10))+ (((.) (showString "SX2 "))+ ((showsPrec 11) arg_0123456789876543210)) ::+ Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210 =>+ ShowS+ instance Data.Singletons.ShowSing.ShowSing (X a) =>+ Show (SY (z :: Y a)) where+ showsPrec _ SY1 = showString "SY1"+ showsPrec+ p_0123456789876543210+ (SY2 (arg_0123456789876543210 :: Sing argTy_0123456789876543210))+ = (showParen (((>) p_0123456789876543210) 10))+ (((.) (showString "SY2 "))+ ((showsPrec 11) arg_0123456789876543210)) ::+ Data.Singletons.ShowSing.ShowSing' argTy_0123456789876543210 =>+ ShowS+ instance SingI X1 where+ sing = SX1+ instance SingI n => SingI (X2 (n :: Y a)) where+ sing = SX2 sing+ instance SingI (X2Sym0 :: (~>) (Y a) (X (a :: Type))) where+ sing = (singFun1 @X2Sym0) SX2+ instance SingI Y1 where+ sing = SY1+ instance SingI n => SingI (Y2 (n :: X a)) where+ sing = SY2 sing+ instance SingI (Y2Sym0 :: (~>) (X a) (Y (a :: Type))) where+ sing = (singFun1 @Y2Sym0) SY2
+ tests/compile-and-dump/Singletons/T376.ghc88.template view
@@ -0,0 +1,40 @@+Singletons/T376.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| f :: (() -> ()) -> (() -> ())+ f g = g :: () -> () |]+ ======>+ f :: (() -> ()) -> () -> ()+ f g = g :: () -> ()+ type FSym2 (a0123456789876543210 :: (~>) () ()) (a0123456789876543210 :: ()) =+ F a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings (FSym1 a0123456789876543210) where+ suppressUnusedWarnings = snd (((,) FSym1KindInference) ())+ data FSym1 (a0123456789876543210 :: (~>) () ()) :: (~>) () ()+ where+ FSym1KindInference :: forall a0123456789876543210+ a0123456789876543210+ arg. SameKind (Apply (FSym1 a0123456789876543210) arg) (FSym2 a0123456789876543210 arg) =>+ FSym1 a0123456789876543210 a0123456789876543210+ type instance Apply (FSym1 a0123456789876543210) a0123456789876543210 = F a0123456789876543210 a0123456789876543210+ instance SuppressUnusedWarnings FSym0 where+ suppressUnusedWarnings = snd (((,) FSym0KindInference) ())+ data FSym0 :: (~>) ((~>) () ()) ((~>) () ())+ where+ FSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>+ FSym0 a0123456789876543210+ type instance Apply FSym0 a0123456789876543210 = FSym1 a0123456789876543210+ type family F (a :: (~>) () ()) (a :: ()) :: () where+ F g a_0123456789876543210 = Apply (g :: (~>) () ()) a_0123456789876543210+ sF ::+ forall (t :: (~>) () ()) (t :: ()).+ Sing t -> Sing t -> Sing (Apply (Apply FSym0 t) t :: ())+ sF+ (sG :: Sing g)+ (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing (sG :: Sing (g :: (~>) () ()))) sA_0123456789876543210+ instance SingI (FSym0 :: (~>) ((~>) () ()) ((~>) () ())) where+ sing = (singFun2 @FSym0) sF+ instance SingI d =>+ SingI (FSym1 (d :: (~>) () ()) :: (~>) () ()) where+ sing = (singFun1 @(FSym1 (d :: (~>) () ()))) (sF (sing @d))
+ tests/compile-and-dump/Singletons/T376.hs view
@@ -0,0 +1,8 @@+module T376 where++import Data.Singletons.TH++$(singletons [d|+ f :: (() -> ()) -> (() -> ())+ f g = g :: () -> ()+ |])
+ tests/compile-and-dump/Singletons/T402.ghc88.template view
@@ -0,0 +1,15 @@+Singletons/T402.hs:0:0:: Splicing declarations+ singletons [d| type AnyOfKind (k :: Type) = Any :: k |]+ ======>+ type AnyOfKind (k :: Type) = Any :: k+ type AnyOfKindSym1 (k0123456789876543210 :: Type) =+ AnyOfKind k0123456789876543210+ instance SuppressUnusedWarnings AnyOfKindSym0 where+ suppressUnusedWarnings = snd (((,) AnyOfKindSym0KindInference) ())+ data AnyOfKindSym0 :: forall (k0123456789876543210 :: Type).+ (~>) Type k0123456789876543210+ where+ AnyOfKindSym0KindInference :: forall k0123456789876543210+ arg. SameKind (Apply AnyOfKindSym0 arg) (AnyOfKindSym1 arg) =>+ AnyOfKindSym0 k0123456789876543210+ type instance Apply AnyOfKindSym0 k0123456789876543210 = AnyOfKind k0123456789876543210
+ tests/compile-and-dump/Singletons/T402.hs view
@@ -0,0 +1,7 @@+module T402 where++import Data.Kind+import Data.Singletons.TH++type family Any :: k+$(singletons [d| type AnyOfKind (k :: Type) = Any :: k |])
− tests/compile-and-dump/Singletons/T54.ghc86.template
@@ -1,53 +0,0 @@-Singletons/T54.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| g :: Bool -> Bool- g e = (case [not] of { [_] -> not }) e |]- ======>- g :: Bool -> Bool- g e = (case [not] of { [_] -> not }) e- type Let0123456789876543210Scrutinee_0123456789876543210Sym1 e0123456789876543210 =- Let0123456789876543210Scrutinee_0123456789876543210 e0123456789876543210- instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where- suppressUnusedWarnings- = snd- (((,)- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)- ())- data Let0123456789876543210Scrutinee_0123456789876543210Sym0 e0123456789876543210- where- Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall e0123456789876543210- arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>- Let0123456789876543210Scrutinee_0123456789876543210Sym0 e0123456789876543210- type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 e0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 e0123456789876543210- type family Let0123456789876543210Scrutinee_0123456789876543210 e where- Let0123456789876543210Scrutinee_0123456789876543210 e = Apply (Apply (:@#@$) NotSym0) '[]- type family Case_0123456789876543210 e t where- Case_0123456789876543210 e '[_] = NotSym0- type GSym1 (a0123456789876543210 :: Bool) = G a0123456789876543210- instance SuppressUnusedWarnings GSym0 where- suppressUnusedWarnings = snd (((,) GSym0KindInference) ())- data GSym0 :: (~>) Bool Bool- where- GSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply GSym0 arg) (GSym1 arg) =>- GSym0 a0123456789876543210- type instance Apply GSym0 a0123456789876543210 = G a0123456789876543210- type family G (a :: Bool) :: Bool where- G e = Apply (Case_0123456789876543210 e (Let0123456789876543210Scrutinee_0123456789876543210Sym1 e)) e- sG :: forall (t :: Bool). Sing t -> Sing (Apply GSym0 t :: Bool)- sG (sE :: Sing e)- = (applySing- (let- sScrutinee_0123456789876543210 ::- Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym1 e)- sScrutinee_0123456789876543210- = (applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((singFun1 @NotSym0) sNot)))- SNil- in (case sScrutinee_0123456789876543210 of {- SCons _ SNil -> (singFun1 @NotSym0) sNot }) ::- Sing (Case_0123456789876543210 e (Let0123456789876543210Scrutinee_0123456789876543210Sym1 e))))- sE- instance SingI (GSym0 :: (~>) Bool Bool) where- sing = (singFun1 @GSym0) sG
+ tests/compile-and-dump/Singletons/T54.ghc88.template view
@@ -0,0 +1,55 @@+Singletons/T54.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| g :: Bool -> Bool+ g e = (case [not] of { [_] -> not }) e |]+ ======>+ g :: Bool -> Bool+ g e = (case [not] of { [_] -> not }) e+ type Let0123456789876543210Scrutinee_0123456789876543210Sym1 e0123456789876543210 =+ Let0123456789876543210Scrutinee_0123456789876543210 e0123456789876543210+ instance SuppressUnusedWarnings Let0123456789876543210Scrutinee_0123456789876543210Sym0 where+ suppressUnusedWarnings+ = snd+ (((,)+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference)+ ())+ data Let0123456789876543210Scrutinee_0123456789876543210Sym0 e0123456789876543210+ where+ Let0123456789876543210Scrutinee_0123456789876543210Sym0KindInference :: forall e0123456789876543210+ arg. SameKind (Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 arg) (Let0123456789876543210Scrutinee_0123456789876543210Sym1 arg) =>+ Let0123456789876543210Scrutinee_0123456789876543210Sym0 e0123456789876543210+ type instance Apply Let0123456789876543210Scrutinee_0123456789876543210Sym0 e0123456789876543210 = Let0123456789876543210Scrutinee_0123456789876543210 e0123456789876543210+ type family Let0123456789876543210Scrutinee_0123456789876543210 e where+ Let0123456789876543210Scrutinee_0123456789876543210 e = Apply (Apply (:@#@$) NotSym0) '[]+ type family Case_0123456789876543210 e t where+ Case_0123456789876543210 e '[_] = NotSym0+ type GSym1 (a0123456789876543210 :: Bool) = G a0123456789876543210+ instance SuppressUnusedWarnings GSym0 where+ suppressUnusedWarnings = snd (((,) GSym0KindInference) ())+ data GSym0 :: (~>) Bool Bool+ where+ GSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply GSym0 arg) (GSym1 arg) =>+ GSym0 a0123456789876543210+ type instance Apply GSym0 a0123456789876543210 = G a0123456789876543210+ type family G (a :: Bool) :: Bool where+ G e = Apply (Case_0123456789876543210 e (Let0123456789876543210Scrutinee_0123456789876543210Sym1 e)) e+ sG :: forall (t :: Bool). Sing t -> Sing (Apply GSym0 t :: Bool)+ sG (sE :: Sing e)+ = (applySing+ (let+ sScrutinee_0123456789876543210 ::+ Sing (Let0123456789876543210Scrutinee_0123456789876543210Sym1 e)+ sScrutinee_0123456789876543210+ = (applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((singFun1 @NotSym0) sNot)))+ SNil+ in+ (id+ @(Sing (Case_0123456789876543210 e (Let0123456789876543210Scrutinee_0123456789876543210Sym1 e))))+ (case sScrutinee_0123456789876543210 of {+ SCons _ SNil -> (singFun1 @NotSym0) sNot })))+ sE+ instance SingI (GSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @GSym0) sG
− tests/compile-and-dump/Singletons/T78.ghc86.template
@@ -1,32 +0,0 @@-Singletons/T78.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo :: MaybeBool -> Bool- foo (Just False) = False- foo (Just True) = True- foo Nothing = False |]- ======>- foo :: MaybeBool -> Bool- foo (Just False) = False- foo (Just True) = True- foo Nothing = False- type FooSym1 (a0123456789876543210 :: Maybe Bool) =- Foo a0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: (~>) (Maybe Bool) Bool- where- FooSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 a0123456789876543210- type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210- type family Foo (a :: Maybe Bool) :: Bool where- Foo ( 'Just 'False) = FalseSym0- Foo ( 'Just 'True) = TrueSym0- Foo 'Nothing = FalseSym0- sFoo ::- forall (t :: Maybe Bool). Sing t -> Sing (Apply FooSym0 t :: Bool)- sFoo (SJust SFalse) = SFalse- sFoo (SJust STrue) = STrue- sFoo SNothing = SFalse- instance SingI (FooSym0 :: (~>) (Maybe Bool) Bool) where- sing = (singFun1 @FooSym0) sFoo
+ tests/compile-and-dump/Singletons/T78.ghc88.template view
@@ -0,0 +1,32 @@+Singletons/T78.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo :: MaybeBool -> Bool+ foo (Just False) = False+ foo (Just True) = True+ foo Nothing = False |]+ ======>+ foo :: MaybeBool -> Bool+ foo (Just False) = False+ foo (Just True) = True+ foo Nothing = False+ type FooSym1 (a0123456789876543210 :: Maybe Bool) =+ Foo a0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: (~>) (Maybe Bool) Bool+ where+ FooSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 a0123456789876543210+ type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210+ type family Foo (a :: Maybe Bool) :: Bool where+ Foo ('Just 'False) = FalseSym0+ Foo ('Just 'True) = TrueSym0+ Foo 'Nothing = FalseSym0+ sFoo ::+ forall (t :: Maybe Bool). Sing t -> Sing (Apply FooSym0 t :: Bool)+ sFoo (SJust SFalse) = SFalse+ sFoo (SJust STrue) = STrue+ sFoo SNothing = SFalse+ instance SingI (FooSym0 :: (~>) (Maybe Bool) Bool) where+ sing = (singFun1 @FooSym0) sFoo
− tests/compile-and-dump/Singletons/TopLevelPatterns.ghc86.template
@@ -1,347 +0,0 @@-Singletons/TopLevelPatterns.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| data Bool = False | True- data Foo = Bar Bool Bool |]- ======>- data Bool = False | True- data Foo = Bar Bool Bool- type FalseSym0 = False- type TrueSym0 = True- type BarSym2 (t0123456789876543210 :: Bool) (t0123456789876543210 :: Bool) =- Bar t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings (BarSym1 t0123456789876543210) where- suppressUnusedWarnings- = Data.Tuple.snd (((,) BarSym1KindInference) ())- data BarSym1 (t0123456789876543210 :: Bool) :: (~>) Bool Foo- where- BarSym1KindInference :: forall t0123456789876543210- t0123456789876543210- arg. SameKind (Apply (BarSym1 t0123456789876543210) arg) (BarSym2 t0123456789876543210 arg) =>- BarSym1 t0123456789876543210 t0123456789876543210- type instance Apply (BarSym1 t0123456789876543210) t0123456789876543210 = Bar t0123456789876543210 t0123456789876543210- instance SuppressUnusedWarnings BarSym0 where- suppressUnusedWarnings- = Data.Tuple.snd (((,) BarSym0KindInference) ())- data BarSym0 :: (~>) Bool ((~>) Bool Foo)- where- BarSym0KindInference :: forall t0123456789876543210- arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>- BarSym0 t0123456789876543210- type instance Apply BarSym0 t0123456789876543210 = BarSym1 t0123456789876543210- data instance Sing :: Bool -> GHC.Types.Type- where- SFalse :: Sing False- STrue :: Sing True- type SBool = (Sing :: Bool -> GHC.Types.Type)- instance SingKind Bool where- type Demote Bool = Bool- fromSing SFalse = False- fromSing STrue = True- toSing False = SomeSing SFalse- toSing True = SomeSing STrue- data instance Sing :: Foo -> GHC.Types.Type- where- SBar :: forall (n :: Bool) (n :: Bool).- (Sing (n :: Bool)) -> (Sing (n :: Bool)) -> Sing (Bar n n)- type SFoo = (Sing :: Foo -> GHC.Types.Type)- instance SingKind Foo where- type Demote Foo = Foo- fromSing (SBar b b) = (Bar (fromSing b)) (fromSing b)- toSing (Bar (b :: Demote Bool) (b :: Demote Bool))- = case- ((,) (toSing b :: SomeSing Bool)) (toSing b :: SomeSing Bool)- of {- (,) (SomeSing c) (SomeSing c) -> SomeSing ((SBar c) c) }- instance SingI False where- sing = SFalse- instance SingI True where- sing = STrue- instance (SingI n, SingI n) =>- SingI (Bar (n :: Bool) (n :: Bool)) where- sing = (SBar sing) sing- instance SingI (BarSym0 :: (~>) Bool ((~>) Bool Foo)) where- sing = (singFun2 @BarSym0) SBar- instance SingI (TyCon2 Bar :: (~>) Bool ((~>) Bool Foo)) where- sing = (singFun2 @(TyCon2 Bar)) SBar- instance SingI d =>- SingI (BarSym1 (d :: Bool) :: (~>) Bool Foo) where- sing = (singFun1 @(BarSym1 (d :: Bool))) (SBar (sing @d))- instance SingI d =>- SingI (TyCon1 (Bar (d :: Bool)) :: (~>) Bool Foo) where- sing = (singFun1 @(TyCon1 (Bar (d :: Bool)))) (SBar (sing @d))-Singletons/TopLevelPatterns.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| otherwise :: Bool- otherwise = True- id :: a -> a- id x = x- not :: Bool -> Bool- not True = False- not False = True- false_ = False- f, g :: Bool -> Bool- [f, g] = [not, id]- h, i :: Bool -> Bool- (h, i) = (f, g)- j, k :: Bool- (Bar j k) = Bar True (h False)- l, m :: Bool- [l, m] = [not True, id False] |]- ======>- otherwise :: Bool- otherwise = True- id :: a -> a- id x = x- not :: Bool -> Bool- not True = False- not False = True- false_ = False- f :: Bool -> Bool- g :: Bool -> Bool- [f, g] = [not, id]- h :: Bool -> Bool- i :: Bool -> Bool- (h, i) = (f, g)- j :: Bool- k :: Bool- Bar j k = (Bar True) (h False)- l :: Bool- m :: Bool- [l, m] = [not True, id False]- type family Case_0123456789876543210 a_0123456789876543210 t where- Case_0123456789876543210 a_0123456789876543210 '[y_0123456789876543210,- _] = y_0123456789876543210- type family Case_0123456789876543210 a_0123456789876543210 t where- Case_0123456789876543210 a_0123456789876543210 '[_,- y_0123456789876543210] = y_0123456789876543210- type family Case_0123456789876543210 a_0123456789876543210 t where- Case_0123456789876543210 a_0123456789876543210 '(y_0123456789876543210,- _) = y_0123456789876543210- type family Case_0123456789876543210 a_0123456789876543210 t where- Case_0123456789876543210 a_0123456789876543210 '(_,- y_0123456789876543210) = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 ( 'Bar y_0123456789876543210 _) = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 ( 'Bar _ y_0123456789876543210) = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 '[y_0123456789876543210,- _] = y_0123456789876543210- type family Case_0123456789876543210 t where- Case_0123456789876543210 '[_,- y_0123456789876543210] = y_0123456789876543210- type False_Sym0 = False_- type NotSym1 (a0123456789876543210 :: Bool) =- Not a0123456789876543210- instance SuppressUnusedWarnings NotSym0 where- suppressUnusedWarnings- = Data.Tuple.snd (((,) NotSym0KindInference) ())- data NotSym0 :: (~>) Bool Bool- where- NotSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply NotSym0 arg) (NotSym1 arg) =>- NotSym0 a0123456789876543210- type instance Apply NotSym0 a0123456789876543210 = Not a0123456789876543210- type IdSym1 (a0123456789876543210 :: a0123456789876543210) =- Id a0123456789876543210- instance SuppressUnusedWarnings IdSym0 where- suppressUnusedWarnings- = Data.Tuple.snd (((,) IdSym0KindInference) ())- data IdSym0 :: forall a0123456789876543210.- (~>) a0123456789876543210 a0123456789876543210- where- IdSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply IdSym0 arg) (IdSym1 arg) =>- IdSym0 a0123456789876543210- type instance Apply IdSym0 a0123456789876543210 = Id a0123456789876543210- type FSym1 (a0123456789876543210 :: Bool) = F a0123456789876543210- instance SuppressUnusedWarnings FSym0 where- suppressUnusedWarnings- = Data.Tuple.snd (((,) FSym0KindInference) ())- data FSym0 :: (~>) Bool Bool- where- FSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>- FSym0 a0123456789876543210- type instance Apply FSym0 a0123456789876543210 = F a0123456789876543210- type GSym1 (a0123456789876543210 :: Bool) = G a0123456789876543210- instance SuppressUnusedWarnings GSym0 where- suppressUnusedWarnings- = Data.Tuple.snd (((,) GSym0KindInference) ())- data GSym0 :: (~>) Bool Bool- where- GSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply GSym0 arg) (GSym1 arg) =>- GSym0 a0123456789876543210- type instance Apply GSym0 a0123456789876543210 = G a0123456789876543210- type HSym1 (a0123456789876543210 :: Bool) = H a0123456789876543210- instance SuppressUnusedWarnings HSym0 where- suppressUnusedWarnings- = Data.Tuple.snd (((,) HSym0KindInference) ())- data HSym0 :: (~>) Bool Bool- where- HSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply HSym0 arg) (HSym1 arg) =>- HSym0 a0123456789876543210- type instance Apply HSym0 a0123456789876543210 = H a0123456789876543210- type ISym1 (a0123456789876543210 :: Bool) = I a0123456789876543210- instance SuppressUnusedWarnings ISym0 where- suppressUnusedWarnings- = Data.Tuple.snd (((,) ISym0KindInference) ())- data ISym0 :: (~>) Bool Bool- where- ISym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply ISym0 arg) (ISym1 arg) =>- ISym0 a0123456789876543210- type instance Apply ISym0 a0123456789876543210 = I a0123456789876543210- type JSym0 = J- type KSym0 = K- type LSym0 = L- type MSym0 = M- type OtherwiseSym0 = Otherwise- type X_0123456789876543210Sym0 = X_0123456789876543210- type X_0123456789876543210Sym0 = X_0123456789876543210- type X_0123456789876543210Sym0 = X_0123456789876543210- type X_0123456789876543210Sym0 = X_0123456789876543210- type family False_ where- False_ = FalseSym0- type family Not (a :: Bool) :: Bool where- Not 'True = FalseSym0- Not 'False = TrueSym0- type family Id (a :: a) :: a where- Id x = x- type family F (a :: Bool) :: Bool where- F a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210- type family G (a :: Bool) :: Bool where- G a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210- type family H (a :: Bool) :: Bool where- H a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210- type family I (a :: Bool) :: Bool where- I a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210- type family J :: Bool where- J = Case_0123456789876543210 X_0123456789876543210Sym0- type family K :: Bool where- K = Case_0123456789876543210 X_0123456789876543210Sym0- type family L :: Bool where- L = Case_0123456789876543210 X_0123456789876543210Sym0- type family M :: Bool where- M = Case_0123456789876543210 X_0123456789876543210Sym0- type family Otherwise :: Bool where- Otherwise = TrueSym0- type family X_0123456789876543210 where- X_0123456789876543210 = Apply (Apply (:@#@$) NotSym0) (Apply (Apply (:@#@$) IdSym0) '[])- type family X_0123456789876543210 where- X_0123456789876543210 = Apply (Apply Tuple2Sym0 FSym0) GSym0- type family X_0123456789876543210 where- X_0123456789876543210 = Apply (Apply BarSym0 TrueSym0) (Apply HSym0 FalseSym0)- type family X_0123456789876543210 where- X_0123456789876543210 = Apply (Apply (:@#@$) (Apply NotSym0 TrueSym0)) (Apply (Apply (:@#@$) (Apply IdSym0 FalseSym0)) '[])- sFalse_ :: Sing False_Sym0- sNot ::- forall (t :: Bool). Sing t -> Sing (Apply NotSym0 t :: Bool)- sId :: forall a (t :: a). Sing t -> Sing (Apply IdSym0 t :: a)- sF :: forall (t :: Bool). Sing t -> Sing (Apply FSym0 t :: Bool)- sG :: forall (t :: Bool). Sing t -> Sing (Apply GSym0 t :: Bool)- sH :: forall (t :: Bool). Sing t -> Sing (Apply HSym0 t :: Bool)- sI :: forall (t :: Bool). Sing t -> Sing (Apply ISym0 t :: Bool)- sJ :: Sing (JSym0 :: Bool)- sK :: Sing (KSym0 :: Bool)- sL :: Sing (LSym0 :: Bool)- sM :: Sing (MSym0 :: Bool)- sOtherwise :: Sing (OtherwiseSym0 :: Bool)- sX_0123456789876543210 :: Sing X_0123456789876543210Sym0- sX_0123456789876543210 :: Sing X_0123456789876543210Sym0- sX_0123456789876543210 :: Sing X_0123456789876543210Sym0- sX_0123456789876543210 :: Sing X_0123456789876543210Sym0- sFalse_ = SFalse- sNot STrue = SFalse- sNot SFalse = STrue- sId (sX :: Sing x) = sX- sF (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((case sX_0123456789876543210 of {- SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)- (SCons _ SNil)- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))- sA_0123456789876543210- sG (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((case sX_0123456789876543210 of {- SCons _- (SCons (sY_0123456789876543210 :: Sing y_0123456789876543210) SNil)- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))- sA_0123456789876543210- sH (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((case sX_0123456789876543210 of {- STuple2 (sY_0123456789876543210 :: Sing y_0123456789876543210) _- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))- sA_0123456789876543210- sI (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (applySing- ((case sX_0123456789876543210 of {- STuple2 _ (sY_0123456789876543210 :: Sing y_0123456789876543210)- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))- sA_0123456789876543210- sJ- = (case sX_0123456789876543210 of {- SBar (sY_0123456789876543210 :: Sing y_0123456789876543210) _- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)- sK- = (case sX_0123456789876543210 of {- SBar _ (sY_0123456789876543210 :: Sing y_0123456789876543210)- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)- sL- = (case sX_0123456789876543210 of {- SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)- (SCons _ SNil)- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)- sM- = (case sX_0123456789876543210 of {- SCons _- (SCons (sY_0123456789876543210 :: Sing y_0123456789876543210) SNil)- -> sY_0123456789876543210 }) ::- Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)- sOtherwise = STrue- sX_0123456789876543210- = (applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((singFun1 @NotSym0) sNot)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons)) ((singFun1 @IdSym0) sId)))- SNil)- sX_0123456789876543210- = (applySing- ((applySing ((singFun2 @Tuple2Sym0) STuple2))- ((singFun1 @FSym0) sF)))- ((singFun1 @GSym0) sG)- sX_0123456789876543210- = (applySing ((applySing ((singFun2 @BarSym0) SBar)) STrue))- ((applySing ((singFun1 @HSym0) sH)) SFalse)- sX_0123456789876543210- = (applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @NotSym0) sNot)) STrue)))- ((applySing- ((applySing ((singFun2 @(:@#@$)) SCons))- ((applySing ((singFun1 @IdSym0) sId)) SFalse)))- SNil)- instance SingI (NotSym0 :: (~>) Bool Bool) where- sing = (singFun1 @NotSym0) sNot- instance SingI (IdSym0 :: (~>) a a) where- sing = (singFun1 @IdSym0) sId- instance SingI (FSym0 :: (~>) Bool Bool) where- sing = (singFun1 @FSym0) sF- instance SingI (GSym0 :: (~>) Bool Bool) where- sing = (singFun1 @GSym0) sG- instance SingI (HSym0 :: (~>) Bool Bool) where- sing = (singFun1 @HSym0) sH- instance SingI (ISym0 :: (~>) Bool Bool) where- sing = (singFun1 @ISym0) sI
+ tests/compile-and-dump/Singletons/TopLevelPatterns.ghc88.template view
@@ -0,0 +1,350 @@+Singletons/TopLevelPatterns.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| data Bool = False | True+ data Foo = Bar Bool Bool |]+ ======>+ data Bool = False | True+ data Foo = Bar Bool Bool+ type FalseSym0 = False+ type TrueSym0 = True+ type BarSym2 (t0123456789876543210 :: Bool) (t0123456789876543210 :: Bool) =+ Bar t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings (BarSym1 t0123456789876543210) where+ suppressUnusedWarnings+ = Data.Tuple.snd (((,) BarSym1KindInference) ())+ data BarSym1 (t0123456789876543210 :: Bool) :: (~>) Bool Foo+ where+ BarSym1KindInference :: forall t0123456789876543210+ t0123456789876543210+ arg. SameKind (Apply (BarSym1 t0123456789876543210) arg) (BarSym2 t0123456789876543210 arg) =>+ BarSym1 t0123456789876543210 t0123456789876543210+ type instance Apply (BarSym1 t0123456789876543210) t0123456789876543210 = Bar t0123456789876543210 t0123456789876543210+ instance SuppressUnusedWarnings BarSym0 where+ suppressUnusedWarnings+ = Data.Tuple.snd (((,) BarSym0KindInference) ())+ data BarSym0 :: (~>) Bool ((~>) Bool Foo)+ where+ BarSym0KindInference :: forall t0123456789876543210+ arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>+ BarSym0 t0123456789876543210+ type instance Apply BarSym0 t0123456789876543210 = BarSym1 t0123456789876543210+ data SBool :: Bool -> GHC.Types.Type+ where+ SFalse :: SBool False+ STrue :: SBool True+ type instance Sing @Bool = SBool+ instance SingKind Bool where+ type Demote Bool = Bool+ fromSing SFalse = False+ fromSing STrue = True+ toSing False = SomeSing SFalse+ toSing True = SomeSing STrue+ data SFoo :: Foo -> GHC.Types.Type+ where+ SBar :: forall (n :: Bool) (n :: Bool).+ (Sing (n :: Bool)) -> (Sing (n :: Bool)) -> SFoo (Bar n n)+ type instance Sing @Foo = SFoo+ instance SingKind Foo where+ type Demote Foo = Foo+ fromSing (SBar b b) = (Bar (fromSing b)) (fromSing b)+ toSing (Bar (b :: Demote Bool) (b :: Demote Bool))+ = case+ ((,) (toSing b :: SomeSing Bool)) (toSing b :: SomeSing Bool)+ of {+ (,) (SomeSing c) (SomeSing c) -> SomeSing ((SBar c) c) }+ instance SingI False where+ sing = SFalse+ instance SingI True where+ sing = STrue+ instance (SingI n, SingI n) =>+ SingI (Bar (n :: Bool) (n :: Bool)) where+ sing = (SBar sing) sing+ instance SingI (BarSym0 :: (~>) Bool ((~>) Bool Foo)) where+ sing = (singFun2 @BarSym0) SBar+ instance SingI d =>+ SingI (BarSym1 (d :: Bool) :: (~>) Bool Foo) where+ sing = (singFun1 @(BarSym1 (d :: Bool))) (SBar (sing @d))+Singletons/TopLevelPatterns.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| otherwise :: Bool+ otherwise = True+ id :: a -> a+ id x = x+ not :: Bool -> Bool+ not True = False+ not False = True+ false_ = False+ f, g :: Bool -> Bool+ [f, g] = [not, id]+ h, i :: Bool -> Bool+ (h, i) = (f, g)+ j, k :: Bool+ (Bar j k) = Bar True (h False)+ l, m :: Bool+ [l, m] = [not True, id False] |]+ ======>+ otherwise :: Bool+ otherwise = True+ id :: a -> a+ id x = x+ not :: Bool -> Bool+ not True = False+ not False = True+ false_ = False+ f :: Bool -> Bool+ g :: Bool -> Bool+ [f, g] = [not, id]+ h :: Bool -> Bool+ i :: Bool -> Bool+ (h, i) = (f, g)+ j :: Bool+ k :: Bool+ Bar j k = (Bar True) (h False)+ l :: Bool+ m :: Bool+ [l, m] = [not True, id False]+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 '[_,+ y_0123456789876543210] = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 '[y_0123456789876543210,+ _] = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 ('Bar _ y_0123456789876543210) = y_0123456789876543210+ type family Case_0123456789876543210 t where+ Case_0123456789876543210 ('Bar y_0123456789876543210 _) = y_0123456789876543210+ type family Case_0123456789876543210 a_0123456789876543210 t where+ Case_0123456789876543210 a_0123456789876543210 '(_,+ y_0123456789876543210) = y_0123456789876543210+ type family Case_0123456789876543210 a_0123456789876543210 t where+ Case_0123456789876543210 a_0123456789876543210 '(y_0123456789876543210,+ _) = y_0123456789876543210+ type family Case_0123456789876543210 a_0123456789876543210 t where+ Case_0123456789876543210 a_0123456789876543210 '[_,+ y_0123456789876543210] = y_0123456789876543210+ type family Case_0123456789876543210 a_0123456789876543210 t where+ Case_0123456789876543210 a_0123456789876543210 '[y_0123456789876543210,+ _] = y_0123456789876543210+ type MSym0 = M+ type LSym0 = L+ type X_0123456789876543210Sym0 = X_0123456789876543210+ type KSym0 = K+ type JSym0 = J+ type X_0123456789876543210Sym0 = X_0123456789876543210+ type ISym1 (a0123456789876543210 :: Bool) = I a0123456789876543210+ instance SuppressUnusedWarnings ISym0 where+ suppressUnusedWarnings+ = Data.Tuple.snd (((,) ISym0KindInference) ())+ data ISym0 :: (~>) Bool Bool+ where+ ISym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply ISym0 arg) (ISym1 arg) =>+ ISym0 a0123456789876543210+ type instance Apply ISym0 a0123456789876543210 = I a0123456789876543210+ type HSym1 (a0123456789876543210 :: Bool) = H a0123456789876543210+ instance SuppressUnusedWarnings HSym0 where+ suppressUnusedWarnings+ = Data.Tuple.snd (((,) HSym0KindInference) ())+ data HSym0 :: (~>) Bool Bool+ where+ HSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply HSym0 arg) (HSym1 arg) =>+ HSym0 a0123456789876543210+ type instance Apply HSym0 a0123456789876543210 = H a0123456789876543210+ type X_0123456789876543210Sym0 = X_0123456789876543210+ type GSym1 (a0123456789876543210 :: Bool) = G a0123456789876543210+ instance SuppressUnusedWarnings GSym0 where+ suppressUnusedWarnings+ = Data.Tuple.snd (((,) GSym0KindInference) ())+ data GSym0 :: (~>) Bool Bool+ where+ GSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply GSym0 arg) (GSym1 arg) =>+ GSym0 a0123456789876543210+ type instance Apply GSym0 a0123456789876543210 = G a0123456789876543210+ type FSym1 (a0123456789876543210 :: Bool) = F a0123456789876543210+ instance SuppressUnusedWarnings FSym0 where+ suppressUnusedWarnings+ = Data.Tuple.snd (((,) FSym0KindInference) ())+ data FSym0 :: (~>) Bool Bool+ where+ FSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FSym0 arg) (FSym1 arg) =>+ FSym0 a0123456789876543210+ type instance Apply FSym0 a0123456789876543210 = F a0123456789876543210+ type X_0123456789876543210Sym0 = X_0123456789876543210+ type False_Sym0 = False_+ type NotSym1 (a0123456789876543210 :: Bool) =+ Not a0123456789876543210+ instance SuppressUnusedWarnings NotSym0 where+ suppressUnusedWarnings+ = Data.Tuple.snd (((,) NotSym0KindInference) ())+ data NotSym0 :: (~>) Bool Bool+ where+ NotSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply NotSym0 arg) (NotSym1 arg) =>+ NotSym0 a0123456789876543210+ type instance Apply NotSym0 a0123456789876543210 = Not a0123456789876543210+ type IdSym1 (a0123456789876543210 :: a0123456789876543210) =+ Id a0123456789876543210+ instance SuppressUnusedWarnings IdSym0 where+ suppressUnusedWarnings+ = Data.Tuple.snd (((,) IdSym0KindInference) ())+ data IdSym0 :: forall a0123456789876543210.+ (~>) a0123456789876543210 a0123456789876543210+ where+ IdSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply IdSym0 arg) (IdSym1 arg) =>+ IdSym0 a0123456789876543210+ type instance Apply IdSym0 a0123456789876543210 = Id a0123456789876543210+ type OtherwiseSym0 = Otherwise+ type family M :: Bool where+ M = Case_0123456789876543210 X_0123456789876543210Sym0+ type family L :: Bool where+ L = Case_0123456789876543210 X_0123456789876543210Sym0+ type family X_0123456789876543210 where+ X_0123456789876543210 = Apply (Apply (:@#@$) (Apply NotSym0 TrueSym0)) (Apply (Apply (:@#@$) (Apply IdSym0 FalseSym0)) '[])+ type family K :: Bool where+ K = Case_0123456789876543210 X_0123456789876543210Sym0+ type family J :: Bool where+ J = Case_0123456789876543210 X_0123456789876543210Sym0+ type family X_0123456789876543210 where+ X_0123456789876543210 = Apply (Apply BarSym0 TrueSym0) (Apply HSym0 FalseSym0)+ type family I (a :: Bool) :: Bool where+ I a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210+ type family H (a :: Bool) :: Bool where+ H a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210+ type family X_0123456789876543210 where+ X_0123456789876543210 = Apply (Apply Tuple2Sym0 FSym0) GSym0+ type family G (a :: Bool) :: Bool where+ G a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210+ type family F (a :: Bool) :: Bool where+ F a_0123456789876543210 = Apply (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0) a_0123456789876543210+ type family X_0123456789876543210 where+ X_0123456789876543210 = Apply (Apply (:@#@$) NotSym0) (Apply (Apply (:@#@$) IdSym0) '[])+ type family False_ where+ False_ = FalseSym0+ type family Not (a :: Bool) :: Bool where+ Not 'True = FalseSym0+ Not 'False = TrueSym0+ type family Id (a :: a) :: a where+ Id x = x+ type family Otherwise :: Bool where+ Otherwise = TrueSym0+ sM :: Sing (MSym0 :: Bool)+ sL :: Sing (LSym0 :: Bool)+ sX_0123456789876543210 :: Sing X_0123456789876543210Sym0+ sK :: Sing (KSym0 :: Bool)+ sJ :: Sing (JSym0 :: Bool)+ sX_0123456789876543210 :: Sing X_0123456789876543210Sym0+ sI :: forall (t :: Bool). Sing t -> Sing (Apply ISym0 t :: Bool)+ sH :: forall (t :: Bool). Sing t -> Sing (Apply HSym0 t :: Bool)+ sX_0123456789876543210 :: Sing X_0123456789876543210Sym0+ sG :: forall (t :: Bool). Sing t -> Sing (Apply GSym0 t :: Bool)+ sF :: forall (t :: Bool). Sing t -> Sing (Apply FSym0 t :: Bool)+ sX_0123456789876543210 :: Sing X_0123456789876543210Sym0+ sFalse_ :: Sing False_Sym0+ sNot ::+ forall (t :: Bool). Sing t -> Sing (Apply NotSym0 t :: Bool)+ sId :: forall a (t :: a). Sing t -> Sing (Apply IdSym0 t :: a)+ sOtherwise :: Sing (OtherwiseSym0 :: Bool)+ sM+ = (GHC.Base.id+ @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))+ (case sX_0123456789876543210 of {+ SCons _+ (SCons (sY_0123456789876543210 :: Sing y_0123456789876543210) SNil)+ -> sY_0123456789876543210 })+ sL+ = (GHC.Base.id+ @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))+ (case sX_0123456789876543210 of {+ SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)+ (SCons _ SNil)+ -> sY_0123456789876543210 })+ sX_0123456789876543210+ = (applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @NotSym0) sNot)) STrue)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((applySing ((singFun1 @IdSym0) sId)) SFalse)))+ SNil)+ sK+ = (GHC.Base.id+ @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))+ (case sX_0123456789876543210 of {+ SBar _ (sY_0123456789876543210 :: Sing y_0123456789876543210)+ -> sY_0123456789876543210 })+ sJ+ = (GHC.Base.id+ @(Sing (Case_0123456789876543210 X_0123456789876543210Sym0 :: Bool)))+ (case sX_0123456789876543210 of {+ SBar (sY_0123456789876543210 :: Sing y_0123456789876543210) _+ -> sY_0123456789876543210 })+ sX_0123456789876543210+ = (applySing ((applySing ((singFun2 @BarSym0) SBar)) STrue))+ ((applySing ((singFun1 @HSym0) sH)) SFalse)+ sI (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((GHC.Base.id+ @(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ STuple2 _ (sY_0123456789876543210 :: Sing y_0123456789876543210)+ -> sY_0123456789876543210 })))+ sA_0123456789876543210+ sH (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((GHC.Base.id+ @(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ STuple2 (sY_0123456789876543210 :: Sing y_0123456789876543210) _+ -> sY_0123456789876543210 })))+ sA_0123456789876543210+ sX_0123456789876543210+ = (applySing+ ((applySing ((singFun2 @Tuple2Sym0) STuple2))+ ((singFun1 @FSym0) sF)))+ ((singFun1 @GSym0) sG)+ sG (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((GHC.Base.id+ @(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ SCons _+ (SCons (sY_0123456789876543210 :: Sing y_0123456789876543210) SNil)+ -> sY_0123456789876543210 })))+ sA_0123456789876543210+ sF (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (applySing+ ((GHC.Base.id+ @(Sing (Case_0123456789876543210 a_0123456789876543210 X_0123456789876543210Sym0)))+ (case sX_0123456789876543210 of {+ SCons (sY_0123456789876543210 :: Sing y_0123456789876543210)+ (SCons _ SNil)+ -> sY_0123456789876543210 })))+ sA_0123456789876543210+ sX_0123456789876543210+ = (applySing+ ((applySing ((singFun2 @(:@#@$)) SCons))+ ((singFun1 @NotSym0) sNot)))+ ((applySing+ ((applySing ((singFun2 @(:@#@$)) SCons)) ((singFun1 @IdSym0) sId)))+ SNil)+ sFalse_ = SFalse+ sNot STrue = SFalse+ sNot SFalse = STrue+ sId (sX :: Sing x) = sX+ sOtherwise = STrue+ instance SingI (ISym0 :: (~>) Bool Bool) where+ sing = (singFun1 @ISym0) sI+ instance SingI (HSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @HSym0) sH+ instance SingI (GSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @GSym0) sG+ instance SingI (FSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @FSym0) sF+ instance SingI (NotSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @NotSym0) sNot+ instance SingI (IdSym0 :: (~>) a a) where+ sing = (singFun1 @IdSym0) sId
tests/compile-and-dump/Singletons/TopLevelPatterns.hs view
@@ -6,7 +6,7 @@ import Data.Singletons import Data.Singletons.Prelude.List import Data.Singletons.SuppressUnusedWarnings-import Data.Singletons.TH hiding (STrue, SFalse, TrueSym0, FalseSym0)+import Data.Singletons.TH hiding (SBool(..), TrueSym0, FalseSym0) $(singletons [d| data Bool = False | True
− tests/compile-and-dump/Singletons/TypeRepTYPE.ghc86.template
+ tests/compile-and-dump/Singletons/TypeRepTYPE.ghc88.template view
tests/compile-and-dump/Singletons/TypeRepTYPE.hs view
@@ -37,4 +37,4 @@ = NothingWordRep h :: forall (rep :: RuntimeRep) (a :: TYPE rep). Typeable a => Sing a-h = STypeRep (typeRep @a)+h = typeRep @a
− tests/compile-and-dump/Singletons/Undef.ghc86.template
@@ -1,47 +0,0 @@-Singletons/Undef.hs:(0,0)-(0,0): Splicing declarations- singletons- [d| foo :: Bool -> Bool- foo = undefined- bar :: Bool -> Bool- bar = error "urk" |]- ======>- foo :: Bool -> Bool- foo = undefined- bar :: Bool -> Bool- bar = error "urk"- type BarSym1 (a0123456789876543210 :: Bool) =- Bar a0123456789876543210- instance SuppressUnusedWarnings BarSym0 where- suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())- data BarSym0 :: (~>) Bool Bool- where- BarSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>- BarSym0 a0123456789876543210- type instance Apply BarSym0 a0123456789876543210 = Bar a0123456789876543210- type FooSym1 (a0123456789876543210 :: Bool) =- Foo a0123456789876543210- instance SuppressUnusedWarnings FooSym0 where- suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())- data FooSym0 :: (~>) Bool Bool- where- FooSym0KindInference :: forall a0123456789876543210- arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>- FooSym0 a0123456789876543210- type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210- type family Bar (a :: Bool) :: Bool where- Bar a_0123456789876543210 = Apply (Apply ErrorSym0 "urk") a_0123456789876543210- type family Foo (a :: Bool) :: Bool where- Foo a_0123456789876543210 = Apply UndefinedSym0 a_0123456789876543210- sBar ::- forall (t :: Bool). Sing t -> Sing (Apply BarSym0 t :: Bool)- sFoo ::- forall (t :: Bool). Sing t -> Sing (Apply FooSym0 t :: Bool)- sBar (sA_0123456789876543210 :: Sing a_0123456789876543210)- = (sError (sing :: Sing "urk")) sA_0123456789876543210- sFoo (sA_0123456789876543210 :: Sing a_0123456789876543210)- = sUndefined sA_0123456789876543210- instance SingI (BarSym0 :: (~>) Bool Bool) where- sing = (singFun1 @BarSym0) sBar- instance SingI (FooSym0 :: (~>) Bool Bool) where- sing = (singFun1 @FooSym0) sFoo
+ tests/compile-and-dump/Singletons/Undef.ghc88.template view
@@ -0,0 +1,47 @@+Singletons/Undef.hs:(0,0)-(0,0): Splicing declarations+ singletons+ [d| foo :: Bool -> Bool+ foo = undefined+ bar :: Bool -> Bool+ bar = error "urk" |]+ ======>+ foo :: Bool -> Bool+ foo = undefined+ bar :: Bool -> Bool+ bar = error "urk"+ type BarSym1 (a0123456789876543210 :: Bool) =+ Bar a0123456789876543210+ instance SuppressUnusedWarnings BarSym0 where+ suppressUnusedWarnings = snd (((,) BarSym0KindInference) ())+ data BarSym0 :: (~>) Bool Bool+ where+ BarSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply BarSym0 arg) (BarSym1 arg) =>+ BarSym0 a0123456789876543210+ type instance Apply BarSym0 a0123456789876543210 = Bar a0123456789876543210+ type FooSym1 (a0123456789876543210 :: Bool) =+ Foo a0123456789876543210+ instance SuppressUnusedWarnings FooSym0 where+ suppressUnusedWarnings = snd (((,) FooSym0KindInference) ())+ data FooSym0 :: (~>) Bool Bool+ where+ FooSym0KindInference :: forall a0123456789876543210+ arg. SameKind (Apply FooSym0 arg) (FooSym1 arg) =>+ FooSym0 a0123456789876543210+ type instance Apply FooSym0 a0123456789876543210 = Foo a0123456789876543210+ type family Bar (a :: Bool) :: Bool where+ Bar a_0123456789876543210 = Apply (Apply ErrorSym0 "urk") a_0123456789876543210+ type family Foo (a :: Bool) :: Bool where+ Foo a_0123456789876543210 = Apply UndefinedSym0 a_0123456789876543210+ sBar ::+ forall (t :: Bool). Sing t -> Sing (Apply BarSym0 t :: Bool)+ sFoo ::+ forall (t :: Bool). Sing t -> Sing (Apply FooSym0 t :: Bool)+ sBar (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = (sError (sing :: Sing "urk")) sA_0123456789876543210+ sFoo (sA_0123456789876543210 :: Sing a_0123456789876543210)+ = sUndefined sA_0123456789876543210+ instance SingI (BarSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @BarSym0) sBar+ instance SingI (FooSym0 :: (~>) Bool Bool) where+ sing = (singFun1 @FooSym0) sFoo